An STL container for iterating query results. More...
#include <Wt/Dbo/collection>
Classes | |
class | const_iterator |
Const Iterator. More... | |
class | iterator |
Iterator. More... | |
Public Types | |
typedef C | value_type |
Value type. | |
Public Member Functions | |
collection () | |
Default constructor. | |
~collection () | |
Destructor. | |
iterator | begin () |
Returns an iterator to the begin of the collection. | |
iterator | end () |
Returns an iterator to the end of the collection. | |
const_iterator | begin () const |
Returns a const iterator to the begin of the collection. | |
const_iterator | end () const |
Returns a const iterator to the end of the collection. | |
size_type | size () const |
Returns the size. | |
void | insert (C c) |
Inserts an object. | |
void | erase (C c) |
Removes an object. | |
Session * | session () const |
Returns the session to which this collection is bound. | |
Query< C, DynamicBinding > | find () const |
Returns the query that backs the collection. |
An STL container for iterating query results.
This is an STL-compatible container that is backed by an SQL query for fetching data.
A collection has two uses in Wt::Dbo:
Its iterators implement the InputIterator requirements, meaning you have to traverse the results from begin() to end() solely by alternating between reading an element and incrementing the iterator. When the collection represents the results of a Query, you can only iterate the results just once: i.e. you can have only one begin() call.
The container is read only, unless it is being used as a member of a dbo to manage a Many-to-Many relation. In that case, you may also insert() and erase() may also be used.
You will typically iterate the container results for local processing, or copy the results into a standard STL container for extended processing. Not only the weak guarantees of the iterators make this useful, but also in the current implementation of the library, all sql statements are non-reentrant prepared statements (this limitation is likely to be removed in the future): only one collection, which is backed by the same SQL statement may be used at once per session. Thus, the following will fail:
void iterateChildren(Wt::Dbo::ptr<Comment> comment) { typedef Wt::Dbo::collection<Wt::Dbo::ptr<Comment> > Comments; Comments children = comment->children; for (Comments::const_iterator i = children.begin(); i != children.end(); ++i) { std::cerr << "Comment: " << i->text << std::endl; iterateChildren(*i); // Illegal since will result in nested use of the same query. } }
If you cannot gaurantee that during its iteration the same query will be reused, you should copy the results in a standard container. Note that this is no big overhead since dbo pointers are lightweight.
void iterateChildren(Wt::Dbo::ptr<Comment> comment) { typedef std::vector<Wt::Dbo::ptr<Comment> > Comments; Comments children(comment->children.begin(), comment->children.end()); // copy into an STL container, freeing the underlying query for reuse for (Comments::const_iterator i = children.begin(); i != children.end(); ++i) { std::cerr << "Comment: " << i->text << std::endl; iterateChildren(*i); // Okay now. } }
Before iterating a collection, the session is flushed. In this way, the collection will reflect any pending dirty changes.
Wt::Dbo::collection< C >::collection | ( | ) |
Default constructor.
Constructs an empty collection that is not bound to a database session or query.
void Wt::Dbo::collection< C >::erase | ( | C | c ) |
Removes an object.
This is only useful for a collection that implements one side of a ManyToMany relation.
Query< C, DynamicBinding > Wt::Dbo::collection< C >::find | ( | ) | const |
Returns the query that backs the collection.
Returns the query that backs the collection. This can be used to search for a subset or to browse the results in a particular order.
void Wt::Dbo::collection< C >::insert | ( | C | c ) |
Inserts an object.
This is only useful for a collection that implements one side of a ManyToMany relation.
collection< C >::size_type Wt::Dbo::collection< C >::size | ( | ) | const |