6#include "DataBinder/UnicodeConverter.hpp"
7#include "SqlOdbcPrelude.hpp"
15namespace Lightweight::detail
21static_assert(
sizeof(SQLWCHAR) ==
sizeof(
char16_t),
"ODBC W variants require a 16-bit code unit; SQLWCHAR shape mismatch");
27inline std::u16string OdbcUtf8ToUtf16(std::string_view utf8)
29 return ToUtf16(std::u8string_view {
reinterpret_cast<char8_t const*
>(utf8.data()), utf8.size() });
35inline SQLWCHAR* AsSqlWChar(
char16_t* p)
noexcept
37 return reinterpret_cast<SQLWCHAR*
>(p);
47 std::u16string buffer;
49 explicit OdbcWideArg(std::string_view utf8):
50 buffer(utf8.empty() ? std::u16string {} : OdbcUtf8ToUtf16(utf8))
54 explicit OdbcWideArg(std::u16string utf16)
noexcept:
55 buffer(std::move(utf16))
59 [[nodiscard]] SQLWCHAR* data() noexcept
61 return buffer.empty() ? nullptr : AsSqlWChar(buffer.data());
64 [[nodiscard]] SQLSMALLINT length() const noexcept
66 return static_cast<SQLSMALLINT
>(buffer.size());
std::u16string ToUtf16(std::basic_string_view< T > const u32InputString)