libpqxx  v4.0-1
C++ library for PostgreSQL
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pqxx::cursor_base Class Reference

Common definitions for cursor types. More...

#include <cursor.hxx>

Inheritance diagram for pqxx::cursor_base:
Collaboration diagram for pqxx::cursor_base:

Public Types

enum  accesspolicy {
  forward_only,
  random_access
}
 Cursor access-pattern policy. More...
 
typedef result::difference_type difference_type
 
enum  ownershippolicy {
  owned,
  loose
}
 Cursor destruction policy. More...
 
typedef result::size_type size_type
 
enum  updatepolicy {
  read_only,
  update
}
 Cursor update policy. More...
 

Public Member Functions

const PGSTD::string & name () const throw ()
 Name of underlying SQL cursor. More...
 

Static Public Member Functions

Special movement distances
static difference_type all () throw ()
 Special value: read until end. More...
 
static difference_type next () throw ()
 Special value: read one row only. More...
 
static difference_type prior () throw ()
 Special value: read backwards, one row only. More...
 
static difference_type backward_all () throw ()
 Special value: read backwards from current position back to origin. More...
 

Protected Member Functions

 cursor_base (connection_base &, const PGSTD::string &Name, bool embellish_name=true)
 

Protected Attributes

const PGSTD::string m_name
 

Private Member Functions

 cursor_base ()
 Not allowed. More...
 
 cursor_base (const cursor_base &)
 Not allowed. More...
 
cursor_baseoperator= (const cursor_base &)
 Not allowed. More...
 

Detailed Description

Common definitions for cursor types.

In C++ terms, fetches are always done in pre-increment or pre-decrement fashion–i.e. the result does not include the row the cursor is on at the beginning of the fetch, and the cursor ends up being positioned on the last row in the result.

There are singular positions akin to end() at both the beginning and the end of the cursor's range of movement, although these fit in so naturally with the semantics that one rarely notices them. The cursor begins at the first of these, but any fetch in the forward direction will move the cursor off this position and onto the first row before returning anything.

Member Typedef Documentation

Member Enumeration Documentation

Cursor access-pattern policy.

Allowing a cursor to move forward only can result in better performance, so use this access policy whenever possible.

Enumerator
forward_only 

Cursor can move forward only.

random_access 

Cursor can move back and forth.

Cursor destruction policy.

The normal thing to do is to make a cursor object the owner of the SQL cursor it represents. There may be cases, however, where a cursor needs to persist beyond the end of the current transaction (and thus also beyond the lifetime of the cursor object that created it!), where it can be "adopted" into a new cursor object. See the basic_cursor documentation for an explanation of cursor adoption.

If a cursor is created with "loose" ownership policy, the object representing the underlying SQL cursor will not take the latter with it when its own lifetime ends, nor will its originating transaction.

Warning
Use this feature with care and moderation. Only one cursor object should be responsible for any one underlying SQL cursor at any given time.
Don't "leak" cursors! As long as any "loose" cursor exists, any attempts to deactivate or reactivate the connection, implicitly or explicitly, are quietly ignored.
Enumerator
owned 

Destroy SQL cursor when cursor object is closed at end of transaction.

loose 

Leave SQL cursor in existence after close of object and transaction.

Cursor update policy.

Warning
Not all PostgreSQL versions support updatable cursors.
Enumerator
read_only 

Cursor can be used to read data but not to write.

update 

Cursor can be used to update data as well as read it.

Constructor & Destructor Documentation

pqxx::cursor_base::cursor_base ( connection_base ,
const PGSTD::string &  Name,
bool  embellish_name = true 
)
protected
pqxx::cursor_base::cursor_base ( )
private

Not allowed.

pqxx::cursor_base::cursor_base ( const cursor_base )
private

Not allowed.

Member Function Documentation

cursor_base::difference_type pqxx::cursor_base::all ( ) throw ()
inlinestatic

Special value: read until end.

Returns
Maximum value for result::difference_type, so the cursor will attempt to read the largest possible result set.
cursor_base::difference_type pqxx::cursor_base::backward_all ( ) throw ()
inlinestatic

Special value: read backwards from current position back to origin.

Returns
Minimum value for result::difference_type

Referenced by pqxx::stateless_cursor< up, op >::stateless_cursor().

Here is the caller graph for this function:

const PGSTD::string& pqxx::cursor_base::name ( ) const throw ()
inline

Name of underlying SQL cursor.

Returns
Name of SQL cursor, which may differ from original given name.
Warning
Don't use this to access the SQL cursor directly without going through the provided wrapper classes!
static difference_type pqxx::cursor_base::next ( ) throw ()
inlinestatic

Special value: read one row only.

Returns
Unsurprisingly, 1
cursor_base& pqxx::cursor_base::operator= ( const cursor_base )
private

Not allowed.

static difference_type pqxx::cursor_base::prior ( ) throw ()
inlinestatic

Special value: read backwards, one row only.

Returns
Unsurprisingly, -1

Member Data Documentation

const PGSTD::string pqxx::cursor_base::m_name
protected

The documentation for this class was generated from the following file: