From 8bf752fc2354af4e98a43e208d1eb18c8a71e48b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 5 Sep 2011 10:36:33 +0200 Subject: Support for views; native part --- common/view/driver.cxx | 185 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 common/view/driver.cxx (limited to 'common/view/driver.cxx') diff --git a/common/view/driver.cxx b/common/view/driver.cxx new file mode 100644 index 0000000..89ef304 --- /dev/null +++ b/common/view/driver.cxx @@ -0,0 +1,185 @@ +// file : common/view/driver.cxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +// Test views. +// + +#include // std::auto_ptr +#include +#include + +#include +#include + +#include + +#include "test.hxx" +#include "test-odb.hxx" + +using namespace std; +using namespace odb::core; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr db (create_database (argc, argv)); + + // + // + { + country* ca (new country ("CA", "Canada")); + country* za (new country ("ZA", "South Africa")); + country* us (new country ("US", "United States")); + country* se (new country ("SE", "Sweden")); + + person p1 (1, "John", "Doe", 30, ca); + person p2 (2, "Jane", "Doe", 29, za); + person p3 (3, "Joe", "Dirt", 31, us); + person p4 (4, "Johansen", "Johansen", 32, se); + + transaction t (db->begin ()); + db->persist (ca); + db->persist (za); + db->persist (us); + db->persist (se); + + db->persist (p1); + db->persist (p2); + db->persist (p3); + db->persist (p4); + t.commit (); + } + + // view1 + // + { + typedef odb::query query; + typedef odb::result result; + + { + transaction t (db->begin ()); + + { + result r (db->query ()); + assert (size (r) == 4); + } + + { + result r (db->query ("ORDER BY age")); + assert (size (r) == 4); + } + + { + result r (db->query ("age < 31 ORDER BY age")); + result::iterator i (r.begin ()); + + assert (i != r.end ()); + assert (i->first == "Jane" && i->last == "Doe" && i->age == 29); + + assert (++i != r.end ()); + view1 v; + i.load (v); + assert (v.first == "John" && v.last == "Doe" && v.age == 30); + } + + t.commit (); + } + } + + // view2 + // + { + typedef odb::query query; + typedef odb::result result; + + { + transaction t (db->begin ()); + + { + result r (db->query ()); + result::iterator i (r.begin ()); + assert (i != r.end ()); + assert (i->count == 4); + } + + { + result r (db->query ("age < 31")); + result::iterator i (r.begin ()); + assert (i != r.end ()); + assert (i->count == 2); + } + + t.commit (); + } + } + + // view3 + // + { + typedef odb::query query; + typedef odb::result result; + + { + transaction t (db->begin ()); + + { + result r (db->query ()); + + size_t count (0); + for (result::iterator i (r.begin ()); i != r.end (); ++i) + { + if (i->last == "Doe") + assert (i->count == 2); + else if (i->last == "Dirt" || + i->last == "Johansen") + assert (i->count == 1); + else + assert (false); + + count++; + } + + assert (count == 3); + } + + t.commit (); + } + } + + // view4 + // + { + typedef odb::query query; + typedef odb::result result; + + { + transaction t (db->begin ()); + + { + result r (db->query ("age > 30 ORDER BY age")); + + result::iterator i (r.begin ()); + + assert (i != r.end ()); + assert (i->first == "Joe" && i->last == "Dirt" && + i->location == "United States"); + + assert (++i != r.end ()); + assert (i->first == "Johansen" && i->last == "Johansen" && + i->location == "Sweden"); + } + + t.commit (); + } + } + } + catch (const odb::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} -- cgit v1.1