Object Store
============

The object store contains code for inserting objects into a relational
database and for retrieving sets of objects. The appropriate SQL is
generated by the OQL module.

The module provides an API for the rest of the system to use, and this in
turn calls the appropriate functions provided to interact with a specific
database. (Currently MySQl and PostgreSQL code is implemented.)

A structure of type 'database_handle' stores generic configuration
information required by most databases, and a set of pointers to functions
that implement various operations.

A structure of type 'active_connection' provides information about a single
connection to a database.


Query Results
=============

A query_result structure contains fields that indicate the result of the
query (sucess/failure) and an indicator of the rows of data affected. (for a
SELCT type query, this is the number of rows returned. For other queries, it
may or may not be accurate. eg: for a DELETE, it should indicate the number
of records deleted, if this information is available.)

A table of data is also made available. Ideally, this should not be accessed
directly, as the stored format may change (and in the interests of
efficiency, probably should change.)

The macros and functions (defined in objectstore/objectstore.h) allow users
of the objectstore module to retrieve data from the result.

As the database modules currently access this structure directly, any
changes will have to be done to all database code simultaneously. (Once
again, this should have been dealt with previously.)

Success: A non NULL pointer, and
         a pointer to a structure with ptr->success == TRUE
	 all other structure members must be set appropriately

Failure: a NULL pointer, or
         a pointer to a structure with ptr->success == FALSE
	 all other structure members are invalid (but should be set to
	 appropriate default values).

