16 #include "pqxx/compiler-public.hxx" 17 #include "pqxx/internal/compiler-internal-pre.hxx" 21 #include "pqxx/array.hxx" 22 #include "pqxx/composite.hxx" 23 #include "pqxx/result.hxx" 24 #include "pqxx/strconv.hxx" 25 #include "pqxx/types.hxx" 68 [[nodiscard]] PQXX_PURE
bool operator==(
field const &)
const;
75 return not operator==(rhs);
83 [[nodiscard]] PQXX_PURE
char const *name()
const;
87 [[nodiscard]] oid PQXX_PURE type()
const;
90 [[nodiscard]] PQXX_PURE oid table()
const;
102 [[nodiscard]] PQXX_PURE std::string_view view()
const 105 return std::string_view(c_str(), size());
114 [[nodiscard]] PQXX_PURE
char const *c_str()
const;
117 [[nodiscard]] PQXX_PURE
bool is_null() const noexcept;
120 [[nodiscard]] PQXX_PURE size_type size() const noexcept;
127 auto to(T &obj) const -> typename
std::enable_if_t<
128 (not
std::is_pointer<T>::value or
std::is_same<T,
char const *>::value),
131 auto const bytes{c_str()};
158 template<
typename T>
bool operator>>(T &obj)
const {
return to(obj); }
165 auto to(T &obj, T
const &default_value)
const ->
typename std::enable_if_t<
166 (not std::is_pointer<T>::value or std::is_same<T, char const *>::value),
169 bool const has_value{to(obj)};
179 template<
typename T> T
as(T
const &default_value)
const 182 to(obj, default_value);
192 template<
typename T> T
as()
const 209 template<
typename T,
template<
typename>
class O = std::optional>
210 constexpr O<T>
get()
const 247 template<>
inline bool field::to<std::string>(std::string &obj)
const 249 char const *
const bytes = c_str();
250 if (bytes[0] ==
'\0' and
is_null())
252 obj = std::string{bytes, size()};
262 template<>
inline bool field::to<char const *>(
char const *&obj)
const 271 template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
286 virtual int sync()
override {
return traits_type::eof(); }
290 return traits_type::eof();
294 return traits_type::eof();
300 field const &m_field;
304 auto g{
static_cast<char_type *
>(
const_cast<char *
>(m_field.
c_str()))};
305 this->setg(g, g, g + std::size(m_field));
306 return int_type(std::size(m_field));
320 template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
323 using super = std::basic_istream<CHAR, TRAITS>;
338 field_streambuf<CHAR, TRAITS> m_buf;
364 template<
typename CHAR>
365 inline std::basic_ostream<CHAR> &
366 operator<<(std::basic_ostream<CHAR> &s,
field const &value)
368 s.write(value.c_str(), std::streamsize(std::size(value)));
388 return from_string<T>(value.
view());
401 inline std::nullptr_t from_string<std::nullptr_t>(
field const &value)
403 if (not value.is_null())
405 "Extracting non-null field into nullptr_t variable."};
411 template<> PQXX_LIBEXPORT std::string
to_string(field
const &value);
414 #include "pqxx/internal/compiler-internal-post.hxx" typename traits_type::int_type int_type
Definition: field.hxx:277
virtual pos_type seekoff(off_type, seekdir, openmode) override
Definition: field.hxx:288
TRAITS traits_type
Definition: field.hxx:327
PQXX_PURE row_size_type num() const
Definition: field.hxx:92
Reference to a field in a result set.
Definition: field.hxx:33
Value conversion failed, e.g. when converting "Hello" to int.
Definition: except.hxx:178
result const & home() const noexcept
Definition: field.hxx:230
static TYPE null()
Return a null value.
std::size_t field_size_type
Number of bytes in a field of database data.
Definition: types.hxx:30
basic_fieldstream(field const &f)
Definition: field.hxx:332
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:498
result::size_type idx() const noexcept
Definition: field.hxx:231
Input stream that gets its data from a result field.
Definition: field.hxx:321
T from_string(field const &value)
Convert a field's value to type T.
Definition: field.hxx:377
Traits describing a type's "null value," if any.
Definition: strconv.hxx:86
PQXX_PURE bool is_null() const noexcept
Is this field's value null?
Definition: field.cxx:66
PQXX_PURE std::string_view view() const
Read as string_view.
Definition: field.hxx:103
typename traits_type::off_type off_type
Definition: field.hxx:330
typename traits_type::int_type int_type
Definition: field.hxx:328
CHAR char_type
Definition: field.hxx:326
std::ios::openmode openmode
Definition: field.hxx:280
typename traits_type::pos_type pos_type
Definition: field.hxx:329
PQXX_PURE char const * c_str() const
Read as plain C string.
Definition: field.cxx:60
bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:310
T as(T const &default_value) const
Return value as object of given type, or default value if null.
Definition: field.hxx:179
virtual int sync() override
Definition: field.hxx:286
void parse_composite(pqxx::internal::encoding_group enc, std::string_view text, T &... fields)
Parse a string representation of a value of a composite type.
Definition: composite.hxx:30
std::ios::seekdir seekdir
Definition: field.hxx:281
void throw_null_conversion(std::string const &type)
Definition: strconv.cxx:243
virtual int_type overflow(int_type) override
Definition: field.hxx:296
field_size_type size_type
Definition: field.hxx:36
int row_size_type
Number of fields in a row of database data.
Definition: types.hxx:24
result_size_type size_type
Definition: result.hxx:73
T as() const
Return value as object of given type, or throw exception if null.
Definition: field.hxx:192
PQXX_PURE bool operator!=(field const &rhs) const
Byte-by-byte comparison (all nulls are considered equal)
Definition: field.hxx:73
typename traits_type::pos_type pos_type
Definition: field.hxx:278
CHAR char_type
Definition: field.hxx:275
bool operator>>(T &obj) const
Read value into obj; or leave obj untouched and return false if null.
Definition: field.hxx:158
auto to(T &obj, T const &default_value) const -> typename std::enable_if_t<(not std::is_pointer< T >::value or std::is_same< T, char const *>::value), bool >
Read value into obj; or if null, use default value and return false.
Definition: field.hxx:165
Low-level array parser.
Definition: array.hxx:46
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:25
Reference to one row in a result.
Definition: row.hxx:43
field_streambuf(field const &f)
Definition: field.hxx:283
virtual int_type underflow() override
Definition: field.hxx:297
array_parser as_array() const
Parse the field as an SQL array.
Definition: field.hxx:222
typename traits_type::off_type off_type
Definition: field.hxx:279
Definition: field.hxx:272
TRAITS traits_type
Definition: field.hxx:276
row_size_type col() const noexcept
Definition: field.hxx:232
bool composite_to(T &... fields) const
Read field as a composite value, write its components into fields.
Definition: field.hxx:144
row_size_type m_col
Definition: field.hxx:238
virtual pos_type seekpos(pos_type, openmode) override
Definition: field.hxx:292
Result set containing data returned by a query or command.
Definition: result.hxx:70