22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
31 #include "pqxx/internal/result_data.hxx"
33 #include "pqxx/except"
49 class result_connection;
50 class result_creation;
51 class result_sql_cursor;
56 class const_result_iterator;
57 class const_reverse_result_iterator;
83 const internal::result_data, internal::freemem_result_data>
86 const internal::result_data, internal::freemem_result_data>
super;
102 result() throw () : super(), m_data(0) {}
104 super(rhs), m_data(rhs.m_data) {}
107 { super::operator=(rhs); m_data=rhs.m_data;
return *
this; }
113 bool operator==(
const result &)
const throw ();
114 bool operator!=(const
result &rhs) const throw ()
115 {
return !operator==(rhs); }
118 const_reverse_iterator rbegin()
const;
119 const_reverse_iterator rend()
const;
121 const_iterator begin()
const throw ();
122 inline const_iterator end() const throw ();
124 reference front() const throw () {
return tuple(
this,0); }
125 reference
back()
const throw () {
return tuple(
this,size()-1);}
127 size_type PQXX_PURE size()
const throw ();
128 bool PQXX_PURE empty() const throw ();
129 size_type capacity() const throw () {
return size(); }
131 void swap(
result &) throw ();
133 const tuple operator[](size_type i) const throw ()
134 {
return tuple(
this, i); }
135 const tuple at(size_type)
const throw (
range_error);
137 void clear() throw () { super::reset(); m_data = 0; }
147 tuple::size_type column_number(const
char ColName[]) const;
150 tuple::size_type column_number(const PGSTD::
string &Name) const
151 {
return column_number(Name.c_str());}
164 {
return column_type(column_number(ColName)); }
168 {
return column_type(column_number(ColName)); }
179 {
return column_table(column_number(ColName)); }
190 {
return table_column(column_number(ColName)); }
194 const PGSTD::string & PQXX_PURE query()
const throw ();
200 oid PQXX_PURE inserted_oid() const;
206 size_type PQXX_PURE affected_rows() const;
211 const
char * PQXX_PURE GetValue(size_type Row, tuple::size_type Col) const;
212 bool PQXX_PURE GetIsNull(size_type Row, tuple::size_type Col) const;
213 field::size_type PQXX_PURE GetLength(
215 tuple::size_type) const throw ();
217 friend class
pqxx::internal::gate::result_creation;
218 result(internal::pq::PGresult *rhs,
220 const PGSTD::
string &Query,
222 void PQXX_PRIVATE CheckStatus() const;
224 friend class
pqxx::internal::gate::result_connection;
225 bool operator!() const throw () {
return !m_data; }
226 operator bool()
const throw () {
return m_data != 0; }
228 void PQXX_PRIVATE PQXX_NORETURN ThrowSQLError(
229 const PGSTD::string &Err,
230 const PGSTD::string &Query)
const;
231 int PQXX_PRIVATE PQXX_PURE errorposition()
const throw ();
232 PGSTD::
string PQXX_PRIVATE StatusError() const;
234 friend class
pqxx::internal::gate::result_sql_cursor;
235 const
char * PQXX_PURE CmdStatus() const throw ();
238 pqxx::internal::pq::PGresult *m_data;
240 static const PGSTD::
string PQXX_PRIVATE s_empty_string;
250 public PGSTD::iterator<
251 PGSTD::random_access_iterator_tag,
290 const_result_iterator operator++(
int);
291 const_result_iterator &
operator++() { ++m_Index;
return *
this; }
292 const_result_iterator operator--(
int);
293 const_result_iterator &
operator--() { --m_Index;
return *
this; }
296 { m_Index = size_type(difference_type(m_Index) + i);
return *
this; }
298 { m_Index = size_type(difference_type (m_Index) - i);
return *
this; }
306 {
return m_Index==i.m_Index;}
308 {
return m_Index!=i.m_Index;}
310 {
return m_Index<i.m_Index;}
312 {
return m_Index<=i.m_Index;}
314 {
return m_Index>i.m_Index;}
316 {
return m_Index>=i.m_Index;}
323 inline const_result_iterator
operator+(difference_type)
const;
326 const_result_iterator);
327 inline const_result_iterator operator-(difference_type)
const;
328 inline difference_type operator-(const_result_iterator)
const;
340 private const_result_iterator
343 typedef const_result_iterator
super;
345 using iterator_type::iterator_category;
349 using iterator_type::value_type;
353 typedef const tuple &reference;
354 typedef tuple value_type;
359 const_result_iterator(rhs) {}
361 const const_result_iterator &rhs) :
362 const_result_iterator(rhs) { super::operator--(); }
364 const_result_iterator PQXX_PURE base()
const throw ();
370 using const_result_iterator::operator->;
371 using const_result_iterator::operator*;
380 { iterator_type::operator=(r);
return *
this; }
382 { iterator_type::operator--();
return *
this; }
385 { iterator_type::operator++();
return *
this; }
388 { iterator_type::operator-=(i);
return *
this; }
390 { iterator_type::operator+=(i);
return *
this; }
403 {
return rhs.const_result_iterator::operator-(*this); }
412 {
return iterator_type::operator==(rhs); }
415 {
return !operator==(rhs); }
418 {
return iterator_type::operator>(rhs); }
420 {
return iterator_type::operator>=(rhs); }
422 {
return iterator_type::operator<(rhs); }
424 {
return iterator_type::operator<=(rhs); }
451 template<
typename CHAR>
453 PGSTD::basic_ostream<CHAR> &S,
const pqxx::field &F)
455 S.write(F.
c_str(), PGSTD::streamsize(F.
size()));
468 {
return PGSTD::string(Obj.
c_str(), Obj.
size()); }
471 inline const_result_iterator
474 return const_result_iterator(
478 inline const_result_iterator
482 inline const_result_iterator
485 return const_result_iterator(
495 {
return const_result_iterator(
this, size()); }
506 #include "pqxx/compiler-internal-post.hxx"
std::basic_ostream< CHAR > & operator<<(std::basic_ostream< CHAR > &S, const pqxx::field &F)
Write a result field to any type of stream.
Definition: result.hxx:452
const_reverse_iterator reverse_iterator
Definition: result.hxx:95
bool operator>=(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:423
Reference to one row in a result.
Definition: tuple.hxx:52
const_reverse_result_iterator operator+(difference_type i) const
Definition: result.hxx:397
pqxx::tuple reference
Definition: result.hxx:90
result(const result &rhs)
Definition: result.hxx:103
tuple::size_type table_column(int ColNum) const
What column in its table did this column come from?
Definition: result.hxx:185
bool operator==(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:410
tuple_size_type size_type
Definition: tuple.hxx:55
const_iterator iterator
Definition: result.hxx:93
tuple reference
Definition: result.hxx:260
Reference-counted smart pointer to libpq-allocated object.
Definition: util.hxx:559
bool operator<=(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:419
const_result_iterator()
Definition: result.hxx:264
const_result_iterator(const tuple &t)
Definition: result.hxx:265
const_iterator end() const
Definition: result.hxx:494
const_reverse_result_iterator(const const_result_iterator &rhs)
Definition: result.hxx:360
const_result_iterator super
Definition: result.hxx:343
oid column_type(int ColNum) const
Type of given column.
Definition: result.hxx:159
The home of all libpqxx classes, functions, templates, etc.
Definition: basic_connection.hxx:35
const_reverse_result_iterator & operator--()
Definition: result.hxx:384
Reference to a field in a result set.
Definition: field.hxx:43
signed long difference_type
Definition: result.hxx:89
pqxx::field field
For backward compatibility only.
Definition: result.hxx:100
const_result_iterator iterator_type
Definition: result.hxx:344
void from_string(const field &F, T &Obj)
Convert a field's string contents to another type.
Definition: result.hxx:462
oid column_type(const char ColName[]) const
Type of given column.
Definition: result.hxx:167
const_result_iterator PQXX_PURE base() const
Definition: result.cxx:386
const_result_iterator const_iterator
Definition: result.hxx:91
const char * c_str() const
Read as plain C string.
Definition: field.cxx:74
const tuple * pointer
Definition: result.hxx:259
oid column_table(const std::string &ColName) const
What table did this column come from?
Definition: result.hxx:178
reference back() const
Definition: result.hxx:125
bool operator>(const const_result_iterator &i) const
Definition: result.hxx:313
reference operator*() const
Definition: result.hxx:283
Reverse iterator for result. Use as result::const_reverse_iterator.
Definition: result.hxx:339
pqxx::tuple tuple
For backward compatibility only.
Definition: result.hxx:98
const_result_iterator & operator--()
Definition: result.hxx:293
const_result_iterator operator+(difference_type) const
Definition: result.hxx:472
bool operator<=(const const_result_iterator &i) const
Definition: result.hxx:311
tuple::size_type table_column(const std::string &ColName) const
What column in its table did this column come from?
Definition: result.hxx:189
const_reverse_result_iterator & operator+=(difference_type i)
Definition: result.hxx:387
result()
Definition: result.hxx:102
size_t num() const
Definition: tuple.hxx:166
const_result_iterator & operator+=(difference_type i)
Definition: result.hxx:295
std::string to_string(const field &Obj)
Convert a field to a string.
Definition: result.hxx:467
pointer operator->() const
Definition: result.hxx:282
const_reverse_result_iterator operator++()
Definition: result.hxx:381
const_reverse_result_iterator & operator-=(difference_type i)
Definition: result.hxx:389
oid column_type(const std::string &ColName) const
Type of given column.
Definition: result.hxx:163
const_result_iterator & operator-=(difference_type i)
Definition: result.hxx:297
const_iterator pointer
Definition: result.hxx:92
const_reverse_result_iterator operator-(difference_type i)
Definition: result.hxx:399
result & operator=(const result &rhs)
Definition: result.hxx:106
bool operator<(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:417
bool operator!=(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:413
bool operator>=(const const_result_iterator &i) const
Definition: result.hxx:315
const_result_iterator & operator++()
Definition: result.hxx:291
bool operator<(const const_result_iterator &i) const
Definition: result.hxx:309
bool operator!=(const const_result_iterator &i) const
Definition: result.hxx:307
const_result_iterator operator+(result::difference_type o, const_result_iterator i)
Definition: result.hxx:479
unsigned long size_type
Definition: result.hxx:88
bool operator>(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:421
size_type size() const
Definition: field.cxx:86
const_result_iterator operator-(difference_type) const
Definition: result.hxx:483
Iterator for rows (tuples) in a result. Use as result::const_iterator.
Definition: result.hxx:249
Something is out of range, similar to std::out_of_range.
Definition: except.hxx:203
result::size_type size_type
Definition: result.hxx:261
bool operator==(const const_result_iterator &i) const
Definition: result.hxx:305
oid column_table(int ColNum) const
What table did this column come from?
Definition: result.hxx:174
const_reverse_result_iterator(const const_reverse_result_iterator &rhs)
Definition: result.hxx:357
Result set containing data returned by a query or command.
Definition: result.hxx:81
const_reverse_result_iterator const_reverse_iterator
Definition: result.hxx:94
result::difference_type difference_type
Definition: result.hxx:262
difference_type operator-(const const_reverse_result_iterator &rhs) const
Definition: result.hxx:401