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>."
27 #if defined(PQXX_HAVE_RANGES)
69 template<
typename TYPE,
typename ENABLE =
void>
struct nullness
78 static bool is_null(TYPE
const &value);
86 [[nodiscard]]
static TYPE
null();
117 [[nodiscard]]
static constexpr
bool is_null(TYPE
const &) noexcept
166 [[nodiscard]]
static inline zview
167 to_buf(
char *begin,
char *end, TYPE
const &value);
177 static inline char *
into_buf(
char *begin,
char *end, TYPE
const &value);
193 [[nodiscard]]
static inline std::size_t
228 static constexpr
bool converts_to_string{
false};
229 static constexpr
bool converts_from_string{
false};
232 oops_forbidden_conversion<TYPE>();
234 [[noreturn]]
static char *
into_buf(
char *,
char *, TYPE
const &)
236 oops_forbidden_conversion<TYPE>();
240 oops_forbidden_conversion<TYPE>();
242 [[noreturn]]
static std::size_t
size_buffer(TYPE
const &) noexcept
244 oops_forbidden_conversion<TYPE>();
318 template<
typename ENUM>
347 [[nodiscard]]
static constexpr
zview
348 to_buf(
char *begin,
char *end, ENUM
const &value)
353 static constexpr
char *
into_buf(
char *begin,
char *end, ENUM
const &value)
363 [[nodiscard]]
static std::size_t
size_buffer(ENUM
const &value) noexcept
370 static constexpr
impl_type to_underlying(ENUM
const &value) noexcept
394 #define PQXX_DECLARE_ENUM_CONVERSION(ENUM) \
395 template<> struct string_traits<ENUM> : pqxx::internal::enum_traits<ENUM> \
398 inline constexpr PQXX_PURE std::string_view name_type<ENUM>() noexcept \
402 template<> [[maybe_unused]] inline std::string_view const type_name<ENUM> \
423 template<
typename TYPE>
438 [[nodiscard]]
inline std::string_view
from_string(std::string_view text)
452 template<
typename T>
inline void from_string(std::string_view text, T &value)
454 value = from_string<T>(text);
464 template<
typename TYPE>
inline std::string
to_string(TYPE
const &value);
475 template<
typename... TYPE>
476 [[nodiscard]]
inline std::vector<std::string_view>
477 to_buf(
char *here,
char const *end, TYPE... value)
480 return {[&here, end](
auto v) {
484 auto len{
static_cast<std::size_t
>(here - begin) - 1};
485 return std::string_view{begin, len};
493 template<
typename TYPE>
494 inline void into_string(TYPE
const &value, std::string &out);
498 template<
typename TYPE>
499 [[nodiscard]]
inline constexpr
bool is_null(TYPE
const &value) noexcept
509 template<
typename... TYPE>
510 [[nodiscard]]
inline std::size_t
size_buffer(TYPE
const &...value) noexcept
570 template<
typename TYPE>
579 return {begin, traits::into_buf(begin, end, value) - begin - 1};
583 #if defined(PQXX_HAVE_CONCEPTS) && defined(PQXX_HAVE_RANGES)
592 concept binary = std::ranges::contiguous_range<TYPE> and
593 std::is_same_v<strip_t<value_type<TYPE>>, std::byte>;
std::underlying_type_t< ExecStatusType > impl_type
Definition: strconv.hxx:341
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:37
static constexpr bool always_null
Are all values of this type null?
Definition: strconv.hxx:110
static char * into_buf(char *, char *, TYPE const &)
Definition: strconv.hxx:234
static TYPE from_string(std::string_view)
Definition: strconv.hxx:238
static constexpr bool is_null(TYPE const &) noexcept
Does a given value correspond to an SQL null value?
Definition: strconv.hxx:117
static zview to_buf(char *begin, char *end, TYPE const &value)
Return a string_view representing value, plus terminating zero.
Internal items for libpqxx' own use. Do not use these yourself.
Definition: encodings.cxx:32
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:510
Helper class for defining enum conversions.
Definition: strconv.hxx:339
static constexpr bool converts_to_string
Definition: strconv.hxx:344
T from_string(field const &value)
Convert a field's value to type T.
Definition: field.hxx:548
static zview to_buf(char *, char *, TYPE const &)
Definition: strconv.hxx:230
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:477
static TYPE from_string(std::string_view text)
Parse a string representation of a TYPE value.
constexpr format param_format(std::optional< T > const &value)
Definition: conversions.hxx:286
static bool has_null
Does this type have a null value?
Definition: strconv.hxx:72
PQXX_LIBEXPORT std::string to_string(field const &value)
Convert a field to a string.
format
Format code: is data text or binary?
Definition: types.hxx:81
constexpr bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:499
constexpr bool is_unquoted_safe
Can we use this type in arrays and composite types without quoting them?
Definition: strconv.hxx:539
static ENUM from_string(std::string_view text)
Definition: strconv.hxx:358
static std::size_t size_buffer(ENUM const &value) noexcept
Definition: strconv.hxx:363
static constexpr bool converts_from_string
Is conversion from string_view to TYPE supported?
Definition: strconv.hxx:144
void into_string(T const &value, std::string &out)
Definition: conversions.hxx:1286
static TYPE null()
Return a null value.
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:26
zview generic_to_buf(char *begin, char *end, TYPE const &value)
Implement string_traits::to_buf by calling into_buf.
Definition: strconv.hxx:571
void oops_forbidden_conversion() noexcept
Nonexistent function to indicate a disallowed type conversion.
Nullness traits describing a type which does not have a null value.
Definition: strconv.hxx:91
static constexpr bool converts_from_string
Definition: strconv.hxx:345
static constexpr zview to_buf(char *begin, char *end, ENUM const &value)
Definition: strconv.hxx:348
static constexpr bool has_null
Does TYPE have a "built-in null value"?
Definition: strconv.hxx:104
Traits class for use in string conversions.
Definition: strconv.hxx:132
static constexpr char * into_buf(char *begin, char *end, ENUM const &value)
Definition: strconv.hxx:353
static constexpr bool converts_to_string
Is conversion from TYPE to strings supported?
Definition: strconv.hxx:138
static bool always_null
Is this type always null?
Definition: strconv.hxx:75
Traits describing a type's "null value," if any.
Definition: strconv.hxx:69
static std::size_t size_buffer(TYPE const &) noexcept
Definition: strconv.hxx:242
static char * into_buf(char *begin, char *end, TYPE const &value)
Write value's string representation into buffer at begin.
static bool is_null(TYPE const &value)
Is value a null?
constexpr char array_separator
Element separator between SQL array elements of this type.
Definition: strconv.hxx:543
String traits for a forbidden type conversion.
Definition: strconv.hxx:226
std::remove_cv_t< std::remove_reference_t< TYPE >> strip_t
Remove any constness, volatile, and reference-ness from a type.
Definition: types.hxx:92
constexpr bool is_sql_array
Does this type translate to an SQL array?
Definition: strconv.hxx:523
static std::size_t size_buffer(TYPE const &value) noexcept
Estimate how much buffer space is needed to represent value.