6#include "UnicodeConverter.hpp"
16struct SqlDataBinder<std::basic_string_view<char>>
18 static constexpr SQLSMALLINT CType = SQL_C_CHAR;
19 static constexpr SQLSMALLINT SqlType = SQL_VARCHAR;
21 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
23 std::basic_string_view<char> value,
24 SqlDataBinderCallback& )
noexcept
26 return SQLBindParameter(
27 stmt, column, SQL_PARAM_INPUT, CType, SqlType, value.size(), 0, (SQLPOINTER) value.data(), 0,
nullptr);
30 static LIGHTWEIGHT_FORCE_INLINE std::string_view Inspect(std::basic_string_view<char> value)
noexcept
32 return { value.data(), value.size() };
36template <
typename Char16Type>
37 requires std::same_as<Char16Type, char16_t> || (std::same_as<Char16Type, wchar_t> &&
sizeof(wchar_t) == 2)
38struct SqlDataBinder<std::basic_string_view<Char16Type>>
40 static constexpr SQLSMALLINT CType = SQL_C_WCHAR;
41 static constexpr SQLSMALLINT SqlType = SQL_WVARCHAR;
43 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
45 std::basic_string_view<Char16Type> value,
46 SqlDataBinderCallback& )
noexcept
48 return SQLBindParameter(
49 stmt, column, SQL_PARAM_INPUT, CType, SqlType, value.size(), 0, (SQLPOINTER) value.data(), 0,
nullptr);
52 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(std::basic_string_view<Char16Type> value)
noexcept
54 auto u8String =
ToUtf8(value);
55 return std::string((
char const*) u8String.data(), u8String.size());
59template <
typename Char32Type>
60 requires std::same_as<Char32Type, char32_t> || (std::same_as<Char32Type, wchar_t> &&
sizeof(wchar_t) == 4)
61struct SqlDataBinder<std::basic_string_view<Char32Type>>
63 static constexpr SQLSMALLINT CType = SQL_C_WCHAR;
64 static constexpr SQLSMALLINT SqlType = SQL_WVARCHAR;
66 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
68 std::basic_string_view<Char32Type> value,
69 SqlDataBinderCallback& cb)
noexcept
71 auto u16String = std::make_shared<std::u16string>(
ToUtf16(value));
72 cb.PlanPostExecuteCallback([u16String = u16String]() {});
73 auto const* data = u16String->data();
74 auto const sizeInBytes = u16String->size() *
sizeof(Char32Type);
75 return SQLBindParameter(
76 stmt, column, SQL_PARAM_INPUT, CType, SqlType, sizeInBytes, 0, (SQLPOINTER) data, 0,
nullptr);
79 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(std::basic_string_view<Char32Type> value)
noexcept
81 auto u8String =
ToUtf8(value);
82 return std::string((
char const*) u8String.data(), u8String.size());
87struct SqlDataBinder<std::u8string_view>
89 static constexpr SQLSMALLINT CType = SQL_C_WCHAR;
90 static constexpr SQLSMALLINT SqlType = SQL_WVARCHAR;
92 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
94 std::u8string_view value,
95 SqlDataBinderCallback& cb)
noexcept
97 auto u16String = std::make_shared<std::u16string>(
ToUtf16(value));
98 cb.PlanPostExecuteCallback([u16String = u16String]() {});
99 auto const* data = u16String->data();
100 auto const sizeInBytes = u16String->size() *
sizeof(char8_t);
101 return SQLBindParameter(
102 stmt, column, SQL_PARAM_INPUT, CType, SqlType, sizeInBytes, 0, (SQLPOINTER) data, 0,
nullptr);
105 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(std::basic_string_view<char8_t> value)
noexcept
107 return std::string { (
char const*) value.data(), value.size() };
LIGHTWEIGHT_API std::u8string ToUtf8(std::u32string_view u32InputString)
std::u16string ToUtf16(std::basic_string_view< T > const u32InputString)