11 #ifndef PQXX_H_STRCONV 12 #define PQXX_H_STRCONV 14 #if !defined(PQXX_HEADER_PRE) 15 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>." 25 #if __has_include(<charconv>) 29 #if defined(PQXX_HAVE_RANGES) && __has_include(<ranges>) 33 #include "pqxx/except.hxx" 34 #include "pqxx/util.hxx" 35 #include "pqxx/zview.hxx" 81 template<
typename TYPE>
92 template<
typename TYPE,
typename ENABLE =
void>
struct nullness 101 static bool is_null(TYPE
const &value);
109 [[nodiscard]]
static TYPE null();
127 static constexpr
bool has_null =
false;
133 static constexpr
bool always_null =
false;
140 [[nodiscard]]
static constexpr
bool is_null(TYPE
const &) noexcept
174 [[nodiscard]]
static inline zview 175 to_buf(
char *begin,
char *end, TYPE
const &value);
185 static inline char *into_buf(
char *begin,
char *end, TYPE
const &value);
199 [[nodiscard]]
static inline std::size_t
205 template<
typename ENUM>
228 [[nodiscard]]
static constexpr
zview 229 to_buf(
char *begin,
char *end, ENUM
const &value)
234 static constexpr
char *
into_buf(
char *begin,
char *end, ENUM
const &value)
236 return impl_traits::into_buf(begin, end, to_underlying(value));
244 [[nodiscard]]
static std::size_t
size_buffer(ENUM
const &value) noexcept
251 static constexpr
impl_type to_underlying(ENUM
const &value) noexcept
271 #define PQXX_DECLARE_ENUM_CONVERSION(ENUM) \ 272 template<> struct string_traits<ENUM> : pqxx::internal::enum_traits<ENUM> \ 274 template<> inline std::string const type_name<ENUM> { #ENUM } 292 template<
typename TYPE>
307 [[nodiscard]]
inline std::string_view
from_string(std::string_view text)
321 template<
typename T>
inline void from_string(std::string_view text, T &value)
323 value = from_string<T>(text);
333 template<
typename TYPE>
inline std::string
to_string(TYPE
const &value);
344 template<
typename... TYPE>
345 [[nodiscard]]
inline std::vector<std::string_view>
346 to_buf(
char *here,
char const *end, TYPE... value)
348 return {[&here, end](
auto v) {
352 auto len{
static_cast<std::size_t
>(here - begin) - 1};
353 return std::string_view{begin, len};
361 template<
typename TYPE>
362 inline void into_string(TYPE
const &value, std::string &out);
366 template<
typename TYPE>
367 [[nodiscard]]
inline constexpr
bool is_null(TYPE
const &value) noexcept
377 template<
typename... TYPE>
378 [[nodiscard]]
inline std::size_t
size_buffer(TYPE
const &...value) noexcept
438 template<
typename TYPE>
447 return {begin, traits::into_buf(begin, end, value) - begin - 1};
451 #if defined(PQXX_HAVE_CONCEPTS) 460 concept
binary = std::ranges::contiguous_range<TYPE> and
461 std::is_same_v<strip_t<value_type<TYPE>>, std::byte>;
467 #include "pqxx/internal/conversions.hxx" static std::size_t size_buffer(ENUM const &value) noexcept
Definition: strconv.hxx:244
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
format
Format code: is data text or binary?
Definition: types.hxx:80
static constexpr bool is_null(TYPE const &) noexcept
Does a given value correspond to an SQL null value?
Definition: strconv.hxx:140
std::string const type_name
A human-readable name for a type, used in error messages and such.
Definition: strconv.hxx:82
Traits class for use in string conversions.
Definition: strconv.hxx:154
static bool always_null
Is this type always null?
Definition: strconv.hxx:98
constexpr bool is_sql_array
Does this type translate to an SQL array?
Definition: strconv.hxx:391
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:533
static constexpr char * into_buf(char *begin, char *end, ENUM const &value)
Definition: strconv.hxx:234
std::vector< std::string_view > to_buf(char *here, char const *end, TYPE... value)
Convert multiple values to strings inside a single buffer.
Definition: strconv.hxx:346
Helper class for defining enum conversions.
Definition: strconv.hxx:223
Nullness traits describing a type which does not have a null value.
Definition: strconv.hxx:114
static TYPE from_string(std::string_view text)
Parse a string representation of a TYPE value.
Definition: strconv.cxx:744
T from_string(field const &value)
Convert a field's value to type T.
Definition: field.hxx:506
static bool has_null
Does this type have a null value?
Definition: strconv.hxx:95
void from_string(std::string_view text, T &value)
Attempt to convert postgres-generated string to given built-in object.
Definition: strconv.hxx:321
constexpr format param_format(TYPE const &)
What's the preferred format for passing non-null parameters of this type?
Definition: strconv.hxx:422
static constexpr zview to_buf(char *begin, char *end, ENUM const &value)
Definition: strconv.hxx:229
std::remove_cv_t< std::remove_reference_t< TYPE > > strip_t
Remove any constness, volatile, and reference-ness from a type.
Definition: types.hxx:91
zview generic_to_buf(char *begin, char *end, TYPE const &value)
Implement string_traits<TYPE>::to_buf by calling into_buf.
Definition: strconv.hxx:439
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:37
Internal items for libpqxx' own use. Do not use these yourself.
Definition: composite.hxx:82
constexpr bool is_unquoted_safe
Can we use this type in arrays and composite types without quoting them?
Definition: strconv.hxx:407
static ENUM from_string(std::string_view text)
Definition: strconv.hxx:239
std::size_t size_buffer(TYPE const &...value) noexcept
Estimate how much buffer space is needed to represent values as a string.
Definition: strconv.hxx:378
std::underlying_type_t< ENUM > impl_type
Definition: strconv.hxx:225
void into_string(TYPE const &value, std::string &out)
Convert a value to a readable string that PostgreSQL will understand.
Traits describing a type's "null value," if any.
Definition: strconv.hxx:92
constexpr bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:367
constexpr char array_separator
Element separator between SQL array elements of this type.
Definition: strconv.hxx:411
std::string demangle_type_name(char const [])
Attempt to demangle std::type_info::name() to something human-readable.
Definition: strconv.cxx:230