blob: 373169f625c52fb16cbd222abad7e51fc5b0aa66 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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 uses the shared_ptr smart pointer from TR1 and requires a C++
compiler with TR1 support or an external TR1 implementation, such as the
one provided by Boost.
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 -d <database> --generate-query --default-pointer std::tr1::shared_ptr \
employee.hxx
Where <database> stands for the database system we are using, for example,
'mysql'.
The --default-pointer option is used to make TR1 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 run the driver, using MySQL 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.
|