From acba5c43f189dfddef4992371fadaa6f019a8027 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 4 Feb 2011 14:02:12 +0200 Subject: Add Boost profile example --- boost/driver.cxx | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 boost/driver.cxx (limited to 'boost/driver.cxx') diff --git a/boost/driver.cxx b/boost/driver.cxx new file mode 100644 index 0000000..5136312 --- /dev/null +++ b/boost/driver.cxx @@ -0,0 +1,151 @@ +// file : boost/driver.cxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#include // std::auto_ptr +#include + +#include +#include +#include + +#include "database.hxx" // create_database + +#include "employee.hxx" +#include "employee-odb.hxx" + +using namespace std; +using namespace boost::gregorian; +using namespace odb; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr db (create_database (argc, argv)); + + // Create a few persistent objects. + // + { + // Simple Tech Ltd. + // + { + shared_ptr er (new employer ("Simple Tech Ltd")); + + shared_ptr john ( + new employee ("John", "Doe", date (1975, Jan, 1), er)); + + shared_ptr jane ( + new employee ("Jane", "Doe", date (1976, Feb, 2), er)); + + john->emails ().insert ("john_d@example.com"); + john->emails ().insert ("john.doe@example.com"); + jane->emails ().insert ("jane_s@example.com"); + jane->emails ().insert ("jane.smith@example.com"); + + // Set the inverse side of the employee-employer relationship. + // + er->employees ().push_back (john); + er->employees ().push_back (jane); + + transaction t (db->begin ()); + + db->persist (er); + + db->persist (john); + db->persist (jane); + + t.commit (); + } + + // Complex Systems Inc. + // + { + shared_ptr er (new employer ("Complex Systems Inc")); + + shared_ptr john ( + new employee ("John", "Smith", date (1977, Mar, 3), er)); + + shared_ptr jane ( + new employee ("Jane", "Smith", date (1978, Apr, 4), er)); + + john->emails ().insert ("john_s@example.com"); + john->emails ().insert ("john.smith@example.com"); + jane->emails ().insert ("jane_s@example.com"); + jane->emails ().insert ("jane.smith@example.com"); + + // Set the inverse side of the employee-employer relationship. + // + er->employees ().push_back (john); + er->employees ().push_back (jane); + + transaction t (db->begin ()); + + db->persist (er); + + db->persist (john); + db->persist (jane); + + t.commit (); + } + } + + + // Load Simple Tech Ltd and print its employees. + // + { + session s; + transaction t (db->begin ()); + + shared_ptr stl (db->load ("Simple Tech Ltd")); + + employees& es (stl->employees ()); + + for (employees::iterator i (es.begin ()); i != es.end (); ++i) + { + lazy_weak_ptr& lwp (*i); + shared_ptr p (lwp.load ()); // Load and lock. + + cout << p->first () << " " << p->last () << endl + << " born: " << p->born () << endl + << " employer: " << p->employer ()->name () << endl; + + for (emails::const_iterator j (p->emails ().begin ()); + j != p->emails ().end (); ++j) + { + cout << " email: " << *j << endl; + } + + cout << endl; + } + + t.commit (); + } + + // Search for Complex Systems Inc employees that were born before + // April 1978. + // + { + typedef odb::query query; + typedef odb::result result; + + session s; + transaction t (db->begin ()); + + result r (db->query ( + query::employer::name == "Complex Systems Inc" && + query::born < date (1978, Apr, 1))); + + for (result::iterator i (r.begin ()); i != r.end (); ++i) + cout << i->first () << " " << i->last () << " " << i->born () << endl; + + t.commit (); + } + } + catch (const odb::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} -- cgit v1.1