diff options
Diffstat (limited to 'odb-examples/schema/custom/README')
-rw-r--r-- | odb-examples/schema/custom/README | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/odb-examples/schema/custom/README b/odb-examples/schema/custom/README new file mode 100644 index 0000000..48699d0 --- /dev/null +++ b/odb-examples/schema/custom/README @@ -0,0 +1,61 @@ +This example shows how to map persistent C++ classes to a custom database +schema. In particular, it shows how to map all the commonly-used constructs, +including containers, object relationships, and composite value types. + +The example consists of the following files: + +employee.hxx + Header file defining the 'employee' and 'employer' persistent classes + as well as the 'name' composite value type. ODB pragmas are used to + assign custom database tables to persistent classes as well as custom + database types and columns to data members. + +employee-odb.hxx +employee-odb.ixx +employee-odb.cxx + These files contain the database support code for the employee.hxx header + and are generated by the ODB compiler from employee.hxx using the following + command line: + + odb --std c++11 -d <database> --generate-query --generate-session \ + --default-pointer std::shared_ptr employee.hxx + + Where <database> stands for the database system we are using, for example, + 'pgsql'. + + The --generate-session option is used to enable session support for all + the persistent classes in employee.hxx. The --default-pointer option is + used to make std::shared_ptr the default object pointer. + +database.hxx + Contains the create_database() function which instantiates the concrete + database class corresponding to the database system we are using. + +driver.cxx + Driver for the example. It includes the employee.hxx and employee-odb.hxx + headers to gain access to the persistent classes and their database support + code. It also includes database.hxx for the create_database() function + declaration. + + In main() the driver first calls create_database() to obtain the database + instance. It then programmatically creates the database schema by executing + a series of SQL statements. After that the driver creates a number of + 'employee' and 'employer' objects, sets the relationships between them, + and persists them in the database. Finally, the driver performs a database + query and prints the information about the returned objects. + +To compile and link the example manually from the command line we can use the +following commands (using PostgreSQL as an example; replace 'c++' with your +C++ compiler name): + +c++ -c employee-odb.cxx +c++ -DDATABASE_PGSQL -c driver.cxx +c++ -o driver driver.o employee-odb.o -lodb-pgsql -lodb + +To run the driver, using PostgreSQL as an example, we can execute the +following command: + +./driver --user odb_test --database odb_test + +Here we use 'odb_test' as the database login and also 'odb_test' as the +database name. |