6#if defined(_WIN32) || defined(_WIN64)
10#include "DataBinder/UnicodeConverter.hpp"
18namespace Lightweight::detail
24static_assert(
sizeof(SQLWCHAR) ==
sizeof(
char16_t),
"ODBC W variants require a 16-bit code unit; SQLWCHAR shape mismatch");
30inline std::u16string OdbcUtf8ToUtf16(std::string_view utf8)
32 return ToUtf16(std::u8string_view {
reinterpret_cast<char8_t const*
>(utf8.data()), utf8.size() });
38inline SQLWCHAR* AsSqlWChar(
char16_t* p)
noexcept
40 return reinterpret_cast<SQLWCHAR*
>(p);
50 std::u16string buffer;
52 explicit OdbcWideArg(std::string_view utf8):
53 buffer(utf8.empty() ? std::u16string {} : OdbcUtf8ToUtf16(utf8))
57 explicit OdbcWideArg(std::u16string utf16)
noexcept:
58 buffer(std::move(utf16))
62 [[nodiscard]] SQLWCHAR* data() noexcept
64 return buffer.empty() ? nullptr : AsSqlWChar(buffer.data());
67 [[nodiscard]] SQLSMALLINT length() const noexcept
69 return static_cast<SQLSMALLINT
>(buffer.size());
std::u16string ToUtf16(std::basic_string_view< T > const u32InputString)