16#if !defined(PQXX_HEADER_PRE)
17# error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
76 [[nodiscard]]
PQXX_PURE char const *name() const &;
82 [[nodiscard]]
PQXX_PURE oid table() const;
85 PQXX_PURE constexpr row_size_type num() const noexcept {
return col(); }
111 [[nodiscard]]
PQXX_PURE std::string_view view() const &
113 return std::string_view(c_str(), size());
126 [[nodiscard]]
PQXX_PURE char const *c_str() const &;
129 [[nodiscard]]
PQXX_PURE bool is_null() const noexcept;
132 [[nodiscard]]
PQXX_PURE size_type size() const noexcept;
139 auto to(T &obj) const ->
140 typename std::enable_if_t<
141 (not std::is_pointer<T>::value or std::is_same<T,
char const *>::value),
150 auto const data{c_str()};
162 template<
typename... T>
bool composite_to(T &...fields)
const
176 template<
typename T>
bool operator>>(T &obj)
const {
return to(obj); }
190 auto to(T &obj, T
const &default_value)
const ->
191 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
225 if constexpr (not nullness<T>::has_null)
226 internal::throw_null_conversion(type_name<T>);
228 return nullness<T>::null();
232 return from_string<T>(this->view());
240 template<
typename T,
template<
typename>
class O = std::optional>
241 constexpr O<T> get()
const
247 template<
typename ELEMENT,
auto... ARGS>
248 array<ELEMENT, ARGS...> as_sql_array()
const
250 using array_type = array<ELEMENT, ARGS...>;
254 internal::throw_null_conversion(type_name<array_type>);
256 return array_type{this->view(), this->m_home.m_encoding};
267 "Avoid pqxx::array_parser. "
268 "Instead, use as_sql_array() to convert to pqxx::array.")]]
269 array_parser as_array() const & noexcept
271 return array_parser{c_str(), m_home.m_encoding};
281 "Do not construct fields yourself. Get them from the row.")]] field(row
const &r, row_size_type c)
noexcept;
285 "Do not construct fields yourself. Get them from the "
286 "row.")]] field() noexcept = default;
290 constexpr result const &home() const noexcept {
return m_home; }
291 constexpr result::size_type idx() const noexcept {
return m_row; }
292 constexpr row_size_type col() const noexcept {
return m_col; }
295 friend class pqxx::result;
296 friend class pqxx::row;
298 result
const &r, result_size_type row_num, row_size_type col_num) noexcept
300 m_col{col_num}, m_home{r}, m_row{row_num}
311 result::size_type m_row;
315template<>
inline bool field::to<std::string>(std::string &obj)
const
319 obj = std::string{view()};
325inline bool field::to<std::string>(
326 std::string &obj, std::string
const &default_value)
const
332 obj = std::string{view()};
343template<>
inline bool field::to<char const *>(
char const *&obj)
const
352template<>
inline bool field::to<std::string_view>(std::string_view &obj)
const
362inline bool field::to<std::string_view>(
363 std::string_view &obj, std::string_view
const &default_value)
const
374template<>
inline std::string_view field::as<std::string_view>()
const
384inline std::string_view
385field::as<std::string_view>(std::string_view
const &default_value)
const
387 return is_null() ? default_value : view();
391template<>
inline bool field::to<zview>(zview &obj)
const
395 obj =
zview{c_str(), size()};
401inline bool field::to<zview>(
zview &obj,
zview const &default_value)
const
407 obj =
zview{c_str(), size()};
412template<>
inline zview field::as<zview>()
const
417 return zview{c_str(), size()};
421template<>
inline zview field::as<zview>(
zview const &default_value)
const
423 return is_null() ? default_value :
zview{c_str(), size()};
427template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
442 virtual int sync()
override {
return traits_type::eof(); }
446 return traits_type::eof();
450 return traits_type::eof();
456 field
const &m_field;
460 auto g{
static_cast<char_type *
>(
const_cast<char *
>(m_field.c_str()))};
461 this->setg(g, g, g + std::size(m_field));
462 return int_type(std::size(m_field));
481template<
typename CHAR =
char,
typename TRAITS = std::
char_traits<CHAR>>
484 using super = std::basic_istream<CHAR, TRAITS>;
495 super{nullptr}, m_buf{f}
533template<
typename CHAR>
535 "Do this by hand, probably with better error checking.")]]
inline std::
536 basic_ostream<CHAR> &
537 operator<<(std::basic_ostream<CHAR> &s, field
const &value)
539 s.write(value.c_str(), std::streamsize(std::size(value)));
574 if (not value.is_null())
576 "Extracting non-null field into nullptr_t variable."};
Input stream that gets its data from a result field.
Definition field.hxx:483
TRAITS traits_type
Definition field.hxx:488
basic_fieldstream(field const &f)
Definition field.hxx:493
typename traits_type::pos_type pos_type
Definition field.hxx:490
typename traits_type::off_type off_type
Definition field.hxx:491
typename traits_type::int_type int_type
Definition field.hxx:489
CHAR char_type
Definition field.hxx:487
TRAITS traits_type
Definition field.hxx:432
typename traits_type::off_type off_type
Definition field.hxx:435
field_streambuf(field const &f)
Definition field.hxx:439
virtual pos_type seekoff(off_type, seekdir, openmode) override
Definition field.hxx:444
virtual pos_type seekpos(pos_type, openmode) override
Definition field.hxx:448
std::ios::openmode openmode
Definition field.hxx:436
virtual int_type overflow(int_type) override
Definition field.hxx:452
typename traits_type::pos_type pos_type
Definition field.hxx:434
virtual int sync() override
Definition field.hxx:442
typename traits_type::int_type int_type
Definition field.hxx:433
virtual int_type underflow() override
Definition field.hxx:453
CHAR char_type
Definition field.hxx:431
std::ios::seekdir seekdir
Definition field.hxx:437
Marker-type wrapper: zero-terminated std::string_view.
Definition zview.hxx:38
Value conversion failed, e.g. when converting "Hello" to int.
Definition except.hxx:283
void throw_null_conversion(std::string const &type)
Throw exception for attempt to convert SQL NULL to given type.
Definition strconv.cxx:257
bool operator!=(stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
Definition stream_query_impl.hxx:143
bool operator==(stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
Definition stream_query_impl.hxx:135
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
std::string const type_name
A human-readable name for a type, used in error messages and such.
Definition strconv.hxx:81
basic_fieldstream< char > fieldstream
Definition field.hxx:506
std::basic_ostream< CHAR > & operator<<(std::basic_ostream< CHAR > &s, field const &value)
Write a result field to any type of stream.
Definition field.hxx:537
std::size_t field_size_type
Number of bytes in a field of database data.
Definition types.hxx:40
int row_size_type
Number of fields in a row of database data.
Definition types.hxx:34
std::string to_string(T const &value)
Definition conversions.hxx:1249
constexpr bool is_null(TYPE const &value) noexcept
Is value null?
Definition strconv.hxx:516
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:36
std::nullptr_t from_string< std::nullptr_t >(field const &value)
Convert a field's value to nullptr_t.
Definition field.hxx:572
T from_string(field const &value)
Convert a field's value to type T.
Definition field.hxx:548
static TYPE null()
Return a null value.
static bool has_null
Does this type have a null value?
Definition strconv.hxx:94