Lightweight 0.20250904.0
Loading...
Searching...
No Matches
StringLiteral.hpp
1// SPDX-License-Identifier: Apache-2.0
2
3#pragma once
4
5#include "Core.hpp"
6#include "UnicodeConverter.hpp"
7
8#include <concepts>
9
10namespace Lightweight
11{
12
13template <std::size_t N>
14struct SqlDataBinder<char[N]>
15{
16 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
17 SQLUSMALLINT column,
18 char const* value,
19 SqlDataBinderCallback& /*cb*/) noexcept
20 {
21 return SQLBindParameter(
22 stmt, column, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, N - 1, 0, (SQLPOINTER) value, 0, nullptr);
23 }
24
25 static LIGHTWEIGHT_FORCE_INLINE std::string_view Inspect(char const* value) noexcept
26 {
27 return { value, N * sizeof(char) };
28 }
29};
30
31template <typename T, std::size_t N>
32 requires(std::same_as<T, char16_t> || (std::same_as<T, wchar_t> && sizeof(wchar_t) == 2))
33struct SqlDataBinder<T[N]>
34{
35 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
36 SQLUSMALLINT column,
37 T const* value,
38 SqlDataBinderCallback& /*cb*/) noexcept
39 {
40 return SQLBindParameter(stmt,
41 column,
42 SQL_PARAM_INPUT,
43 SQL_C_WCHAR,
44 SQL_WVARCHAR,
45 (N - 1) * sizeof(T),
46 0,
47 (SQLPOINTER) value,
48 0,
49 nullptr);
50 }
51
52 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(T const* value) noexcept
53 {
54 auto u8String = ToUtf8(std::basic_string_view<T> { value, N });
55 return std::string((char const*) u8String.data(), u8String.size());
56 }
57};
58
59} // namespace Lightweight
LIGHTWEIGHT_API std::u8string ToUtf8(std::u32string_view u32InputString)