Overview of IBPP Structure
Here is the overall big picture of the relationships between the various IBPP objects. Don't mis-read this graph: it is not a class derivation tree. The arrows show you the runtime dependencies of objects.
The blue rounded shapes are the IBPP 'Interfaces'. You call their corresponding Factories
to get instances of these objects. Except for Database
and for Service
, each Factory call requires one or multiple references to other existing object instances. These dependencies are shown by the arrows. For instance, to instantiate an Events
object, you need a Database
object. Similarly, to get a Statement
object, you need a Database
and a Transaction
.
The Transaction
object has a double arrow to the Database
. To instantiate a Transaction
you indeed need a Database
. But you can later simultaneously attach your Transaction
to multiple Database
objects: a transaction context can span multiple database attachments.
The yellow rectangles are ordinary C++ classes. They are just datatypes defined by IBPP. Their dotted connections simply show you which interfaces they are related to. Indeed, Date
, Time
, Timestamp
and DBKey
are datatypes useful to exchange some non C++ basic values with SQL statements. User
is a datatype related to the users management methods of the Service
interface.
Blob
and Array
are somewhat a special case. They are interfaces, and you instantiate them using their Factories
, which both require a Database
and a Transaction
for their context. Though, when instantiated they are used in relation with Statement
to access special SQL values (blobs and arrays). This is why they are shown on the graph with a dotted line to Statement
.