#include <cursor.hxx>
Inheritance diagram for pqxx::icursorstream:
Public Member Functions | |
icursorstream (transaction_base &Context, const PGSTD::string &Query, const PGSTD::string &Basename, difference_type Stride=1) | |
Set up a read-only, forward-only cursor. | |
icursorstream (transaction_base &Context, const result::field &Name, difference_type Stride=1) | |
Adopt existing SQL cursor. Use with care. | |
icursorstream & | get (result &res) |
Read new value into given result object; same as operator >>. | |
icursorstream & | operator>> (result &res) |
Read new value into given result object; same as get(result &). | |
icursorstream & | ignore (PGSTD::streamsize n=1) |
Move given number of rows forward (ignoring stride) without reading data. | |
void | set_stride (difference_type stride) |
Change stride, i.e. the number of rows to fetch per read operation. | |
difference_type | stride () const throw () |
Friends | |
class | icursor_iterator |
SQL cursors can be tricky, especially in C++ since the two languages seem to have been designed on different planets. An SQL cursor has two singular positions akin to end()
on either side of the underlying result set.
These cultural differences are hidden from view somewhat by libpqxx, which tries to make SQL cursors behave more like familiar C++ entities such as iterators, sequences, streams, and containers.
Data is fetched from the cursor as a sequence of result objects. Each of these will contain the number of rows defined as the stream's stride, except of course the last block of data which may contain fewer rows.
This class can create or adopt cursors that live outside any backend transaction, which your backend version may not support.
pqxx::icursorstream::icursorstream | ( | transaction_base & | Context, | |
const PGSTD::string & | Query, | |||
const PGSTD::string & | Basename, | |||
difference_type | Stride = 1 | |||
) |
Set up a read-only, forward-only cursor.
Roughly equivalent to a C++ Standard Library istream, this cursor type supports only two operations: reading a block of rows while moving forward, and moving forward without reading any data.
Context | Transaction context that this cursor will be active in | |
Query | SQL query whose results this cursor shall iterate | |
Basename | Suggested name for the SQL cursor; a unique code will be appended by the library to ensure its uniqueness | |
Stride | Number of rows to fetch per read operation; must be a positive number |
pqxx::icursorstream::icursorstream | ( | transaction_base & | Context, | |
const result::field & | Name, | |||
difference_type | Stride = 1 | |||
) |
Adopt existing SQL cursor. Use with care.
Forms a cursor stream around an existing SQL cursor, as returned by e.g. a server-side function. The SQL cursor will be cleaned up by the stream's destructor as if it had been created by the stream; cleaning it up by hand or adopting the same cursor twice is an error.
Passing the name of the cursor as a string is not allowed, both to avoid confusion with the other constructor and to discourage unnecessary use of adopted cursors.
Context | Transaction context that this cursor will be active in | |
Name | Result field containing the name of the SQL cursor to adopt | |
Stride | Number of rows to fetch per read operation; must be a positive number |
icursorstream& pqxx::icursorstream::get | ( | result & | res | ) |
Read new value into given result object; same as operator >>.
The result set may continue any number of rows from zero to the chosen stride, inclusive. An empty result will only be returned if there are no more rows to retrieve.
C.get(r1).get(r2);
) icursorstream& pqxx::icursorstream::operator>> | ( | result & | res | ) |
Read new value into given result object; same as get(result &).
The result set may continue any number of rows from zero to the chosen stride, inclusive. An empty result will only be returned if there are no more rows to retrieve.
C >> r1 >> r2;
) pqxx::icursorstream & pqxx::icursorstream::ignore | ( | PGSTD::streamsize | n = 1 |
) |
Move given number of rows forward (ignoring stride) without reading data.
C.ignore(2).get(r).ignore(4);
) void pqxx::icursorstream::set_stride | ( | difference_type | stride | ) |
Change stride, i.e. the number of rows to fetch per read operation.
stride | Must be a positive number |
difference_type pqxx::icursorstream::stride | ( | ) | const throw () |
friend class icursor_iterator [friend] |