Lightweight 0.20261105.1
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(stmt,
22 column,
23 SQL_PARAM_INPUT,
24 SQL_C_CHAR,
25 SQL_VARCHAR,
26 detail::NonZeroColumnSize(N - 1),
27 0,
28 (SQLPOINTER) value,
29 0,
30 nullptr);
31 }
32
33 static LIGHTWEIGHT_FORCE_INLINE std::string_view Inspect(char const* value) noexcept
34 {
35 return { value, N * sizeof(char) };
36 }
37};
38
39template <typename T, std::size_t N>
40 requires(std::same_as<T, char16_t> || (std::same_as<T, wchar_t> && sizeof(wchar_t) == 2))
41struct SqlDataBinder<T[N]>
42{
43 static LIGHTWEIGHT_FORCE_INLINE SQLRETURN InputParameter(SQLHSTMT stmt,
44 SQLUSMALLINT column,
45 T const* value,
46 SqlDataBinderCallback& /*cb*/) noexcept
47 {
48 return SQLBindParameter(stmt,
49 column,
50 SQL_PARAM_INPUT,
51 SQL_C_WCHAR,
52 SQL_WVARCHAR,
53 detail::NonZeroColumnSize((N - 1) * sizeof(T)),
54 0,
55 (SQLPOINTER) value,
56 0,
57 nullptr);
58 }
59
60 static LIGHTWEIGHT_FORCE_INLINE std::string Inspect(T const* value) noexcept
61 {
62 auto u8String = ToUtf8(std::basic_string_view<T> { value, N });
63 return std::string((char const*) u8String.data(), u8String.size());
64 }
65};
66
67} // namespace Lightweight
LIGHTWEIGHT_API std::u8string ToUtf8(std::u32string_view u32InputString)