16 #if !defined(PQXX_HEADER_PRE) 17 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>." 22 #include "pqxx/array.hxx" 23 #include "pqxx/composite.hxx" 24 #include "pqxx/result.hxx" 25 #include "pqxx/strconv.hxx" 26 #include "pqxx/types.hxx" 45 "Do not construct fields yourself. Get them from the row.")]]
field(
row const &r,
row_size_type c) noexcept;
49 "Do not construct fields yourself. Get them from the " 50 "row.")]]
field() noexcept = default;
73 [[nodiscard]] PQXX_PURE
bool operator==(
field const &) const noexcept;
78 [[nodiscard]] PQXX_PURE
bool operator!=(
field const &rhs) const noexcept
80 return not operator==(rhs);
88 [[nodiscard]] PQXX_PURE
char const *name()
const &;
92 [[nodiscard]] oid PQXX_PURE type()
const;
95 [[nodiscard]] PQXX_PURE oid table()
const;
113 [[nodiscard]] PQXX_PURE std::string_view
view() const &
115 return std::string_view(c_str(), size());
128 [[nodiscard]] PQXX_PURE
char const *c_str()
const &;
131 [[nodiscard]] PQXX_PURE
bool is_null()
const noexcept;
134 [[nodiscard]] PQXX_PURE
size_type size()
const noexcept;
141 auto to(T &obj)
const ->
typename std::enable_if_t<
142 (not std::is_pointer<T>::value or std::is_same<T, char const *>::value),
151 auto const bytes{c_str()};
177 template<
typename T>
bool operator>>(T &obj)
const {
return to(obj); }
191 auto to(T &obj, T
const &default_value)
const ->
typename std::enable_if_t<
192 (not std::is_pointer<T>::value or std::is_same<T, char const *>::value),
199 obj = from_string<T>(this->view());
207 template<
typename T> T
as(T
const &default_value)
const 210 return default_value;
212 return from_string<T>(this->view());
221 template<
typename T> T
as()
const 232 return from_string<T>(this->view());
240 template<
typename T,
template<
typename>
class O = std::optional>
241 constexpr O<T>
get()
const 261 constexpr
result const &
home() const noexcept {
return m_home; }
271 m_col{col_num}, m_home{r}, m_row{row_num}
286 template<>
inline bool field::to<std::string>(std::string &obj)
const 290 obj = std::string{view()};
296 inline bool field::to<std::string>(
297 std::string &obj, std::string
const &default_value)
const 303 obj = std::string{view()};
314 template<>
inline bool field::to<char const *>(
char const *&obj)
const 323 template<>
inline bool field::to<std::string_view>(std::string_view &obj)
const 333 inline bool field::to<std::string_view>(
334 std::string_view &obj, std::string_view
const &default_value)
const 345 template<>
inline std::string_view field::as<std::string_view>()
const 355 inline std::string_view
356 field::as<std::string_view>(std::string_view
const &default_value)
const 358 return is_null() ? default_value : view();
362 template<>
inline bool field::to<zview>(
zview &obj)
const 372 inline bool field::to<zview>(
zview &obj,
zview const &default_value)
const 383 template<>
inline zview field::as<zview>()
const 392 template<>
inline zview field::as<zview>(
zview const &default_value)
const 398 template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
413 virtual int sync()
override {
return traits_type::eof(); }
417 return traits_type::eof();
421 return traits_type::eof();
427 field const &m_field;
431 auto g{
static_cast<char_type *
>(
const_cast<char *
>(m_field.
c_str()))};
432 this->setg(g, g, g + std::size(m_field));
433 return int_type(std::size(m_field));
452 template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
455 using super = std::basic_istream<CHAR, TRAITS>;
466 super{
nullptr}, m_buf{f}
505 template<
typename CHAR>
507 "Do this by hand, probably with better error checking.")]]
inline std::
508 basic_ostream<CHAR> &
509 operator<<(std::basic_ostream<CHAR> &s,
field const &value)
511 s.write(value.c_str(), std::streamsize(std::size(value)));
531 return from_string<T>(value.
view());
544 inline std::nullptr_t from_string<std::nullptr_t>(
field const &value)
546 if (not value.is_null())
548 "Extracting non-null field into nullptr_t variable."};
554 template<> PQXX_LIBEXPORT std::string
to_string(
field const &value);
TRAITS traits_type
Definition: field.hxx:459
row_size_type m_col
Definition: field.hxx:278
virtual pos_type seekoff(off_type, seekdir, openmode) override
Definition: field.hxx:415
T as(T const &default_value) const
Return value as object of given type, or default value if null.
Definition: field.hxx:207
Low-level array parser.
Definition: array.hxx:526
virtual int_type overflow(int_type) override
Definition: field.hxx:423
virtual int sync() override
Definition: field.hxx:413
bool operator>>(T &obj) const
Read value into obj; or leave obj untouched and return false if null.
Definition: field.hxx:177
virtual pos_type seekpos(pos_type, openmode) override
Definition: field.hxx:419
PQXX_PURE std::string_view view() const &
Read as string_view, or an empty one if null.
Definition: field.hxx:113
std::size_t field_size_type
Number of bytes in a field of database data.
Definition: types.hxx:40
typename traits_type::pos_type pos_type
Definition: field.hxx:405
PQXX_PURE bool is_null() const noexcept
Is this field's value null?
Definition: field.cxx:71
Value conversion failed, e.g. when converting "Hello" to int.
Definition: except.hxx:267
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:548
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:35
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:32
constexpr bool is_null(TYPE const &value) noexcept
Is value null?
Definition: strconv.hxx:508
field(result const &r, result_size_type row_num, row_size_type col_num) noexcept
Definition: field.hxx:268
basic_fieldstream(field const &f)
Definition: field.hxx:464
CHAR char_type
Definition: field.hxx:458
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:37
constexpr result const & home() const noexcept
Definition: field.hxx:261
field_streambuf(field const &f)
Definition: field.hxx:410
int row_size_type
Number of fields in a row of database data.
Definition: types.hxx:34
Traits describing a type's "null value," if any.
Definition: strconv.hxx:92
Definition: field.hxx:399
Reference to one row in a result.
Definition: row.hxx:46
TRAITS traits_type
Definition: field.hxx:403
virtual int_type underflow() override
Definition: field.hxx:424
typename traits_type::off_type off_type
Definition: field.hxx:406
T from_string(field const &value)
Convert a field's value to type T.
Definition: field.hxx:520
void PQXX_COLD throw_null_conversion(std::string const &type)
Definition: strconv.cxx:253
constexpr size_type size() const noexcept
Definition: row.hxx:104
int result_size_type
Number of rows in a result set.
Definition: types.hxx:28
typename traits_type::int_type int_type
Definition: field.hxx:460
typename traits_type::off_type off_type
Definition: field.hxx:462
array_parser as_array() const &noexcept
Parse the field as an SQL array.
Definition: field.hxx:253
bool composite_to(T &...fields) const
Read field as a composite value, write its components into fields.
Definition: field.hxx:163
std::ios::seekdir seekdir
Definition: field.hxx:408
PQXX_PURE char const * c_str() const &
Read as plain C string.
Definition: field.cxx:65
field_size_type size_type
Definition: field.hxx:37
Reference to a field in a result set.
Definition: field.hxx:34
PQXX_PURE constexpr row_size_type num() const noexcept
Return row number. The first row is row 0, the second is row 1, etc.
Definition: field.hxx:98
CHAR char_type
Definition: field.hxx:402
Result set containing data returned by a query or command.
Definition: result.hxx:72
static TYPE null()
Return a null value.
constexpr result::size_type idx() const noexcept
Definition: field.hxx:262
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:191
Input stream that gets its data from a result field.
Definition: field.hxx:453
typename traits_type::pos_type pos_type
Definition: field.hxx:461
result_size_type size_type
Definition: result.hxx:75
auto to(T &obj) 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, leave obj untouched and return false.
Definition: field.hxx:141
T as() const
Return value as object of given type, or throw exception if null.
Definition: field.hxx:221
constexpr row_size_type col() const noexcept
Definition: field.hxx:263
typename traits_type::int_type int_type
Definition: field.hxx:404
std::ios::openmode openmode
Definition: field.hxx:407