5#include "DataBinder/UnicodeConverter.hpp"
13namespace Lightweight::detail
19static_assert(
sizeof(SQLWCHAR) ==
sizeof(
char16_t),
"ODBC W variants require a 16-bit code unit; SQLWCHAR shape mismatch");
25inline std::u16string OdbcUtf8ToUtf16(std::string_view utf8)
27 return ToUtf16(std::u8string_view {
reinterpret_cast<char8_t const*
>(utf8.data()), utf8.size() });
33inline SQLWCHAR* AsSqlWChar(
char16_t* p)
noexcept
35 return reinterpret_cast<SQLWCHAR*
>(p);
45 std::u16string buffer;
47 explicit OdbcWideArg(std::string_view utf8):
48 buffer(utf8.empty() ? std::u16string {} : OdbcUtf8ToUtf16(utf8))
52 explicit OdbcWideArg(std::u16string utf16)
noexcept:
53 buffer(std::move(utf16))
57 [[nodiscard]] SQLWCHAR* data() noexcept
59 return buffer.empty() ? nullptr : AsSqlWChar(buffer.data());
62 [[nodiscard]] SQLSMALLINT length() const noexcept
64 return static_cast<SQLSMALLINT
>(buffer.size());
std::u16string ToUtf16(std::basic_string_view< T > const u32InputString)