aboutsummaryrefslogtreecommitdiff
path: root/common/view/driver.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-02-04 17:23:54 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-02-04 17:23:54 +0200
commit504fa38f3f71c345f41dfbb7e59b1d2f88308987 (patch)
treed4328b3cb9de151699232c9722e2f8899ac2f36b /common/view/driver.cxx
parentcbad49a571dfff9a046997b18776fd3cee6d7b51 (diff)
Implement object loading views
See section 10.2 in the manual for details.
Diffstat (limited to 'common/view/driver.cxx')
-rw-r--r--common/view/driver.cxx662
1 files changed, 0 insertions, 662 deletions
diff --git a/common/view/driver.cxx b/common/view/driver.cxx
deleted file mode 100644
index 28c3ba0..0000000
--- a/common/view/driver.cxx
+++ /dev/null
@@ -1,662 +0,0 @@
-// file : common/view/driver.cxx
-// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
-// license : GNU GPL v2; see accompanying LICENSE file
-
-// Test views.
-//
-
-#include <memory> // std::auto_ptr
-#include <cassert>
-#include <iostream>
-
-#include <odb/database.hxx>
-#include <odb/transaction.hxx>
-
-#include <common/common.hxx>
-#include <common/config.hxx> // DATABASE_XXX
-
-#include "test.hxx"
-#include "test-odb.hxx"
-
-using namespace std;
-using namespace odb::core;
-
-template <typename V>
-void
-view1_check (odb::result<V>& r)
-{
- typedef odb::result<V> result;
-
- typename result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first == "Jane" && i->last == "Doe" && i->age == 29);
-
- assert (++i != r.end ());
- V v;
- i.load (v);
- assert (v.first == "John" && v.last == "Doe" && v.age == 30);
-
- assert (++i == r.end ());
-}
-
-template <typename V>
-void
-view2_test (const auto_ptr<database>& db)
-{
- typedef odb::query<V> query;
- typedef odb::result<V> result;
- typedef typename result::iterator iterator;
-
- transaction t (db->begin ());
-
- {
- result r (db->query<V> ());
- iterator i (r.begin ());
- assert (i != r.end ());
- assert (i->count == 4);
- }
-
- {
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<V> ("age < 31");
- else
- r = db->query<V> ("\"age\" < 31");
-
- iterator i (r.begin ());
- assert (i != r.end ());
- assert (i->count == 2);
- }
-
- {
- result r (db->query<V> (query::age < 31));
- iterator i (r.begin ());
- assert (i != r.end ());
- assert (i->count == 2);
- }
-
- {
- auto_ptr<V> v (db->query_one<V> ());
- assert (v->count == 4);
- }
-
- {
- auto_ptr<V> v;
- if (db->id () != odb::id_oracle)
- v.reset (db->query_one<V> ("age < 31"));
- else
- v.reset (db->query_one<V> ("\"age\" < 31"));
- assert (v->count == 2);
- }
-
- {
- auto_ptr<V> v (db->query_one<V> (query::age < 31));
- assert (v->count == 2);
- }
-
- t.commit ();
-}
-
-template <typename V>
-void
-view4_test (const auto_ptr<database>& db)
-{
- typedef odb::query<V> query;
- typedef odb::result<V> result;
- typedef typename result::iterator iterator;
-
- transaction t (db->begin ());
-
- {
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<V> ((query::person::age > 30) + "ORDER BY age");
- else
- r = db->query<V> ((query::person::age > 30) + "ORDER BY \"age\"");
-
- iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "Joe" && i->last_name == "Dirt" &&
- i->name == "United States");
-
- assert (++i != r.end ());
- assert (i->first_name == "Johan" && i->last_name == "Johansen" &&
- i->name == "Sweden");
-
- assert (++i == r.end ());
- }
-
- {
- result r (db->query<V> (
- (query::person::age > 30) +
- "ORDER BY " + query::person::age));
-
- iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "Joe" && i->last_name == "Dirt" &&
- i->name == "United States");
-
- assert (++i != r.end ());
- assert (i->first_name == "Johan" && i->last_name == "Johansen" &&
- i->name == "Sweden");
-
- assert (++i == r.end ());
- }
-
- {
- result r (db->query<V> (query::residence::code == "US"));
-
- iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "Joe" && i->last_name == "Dirt" &&
- i->name == "United States");
-
- assert (++i == r.end ());
- }
-
- t.commit ();
-}
-
-template <typename V>
-void
-view6_test (const auto_ptr<database>& db, const odb::query<V>& q)
-{
- typedef odb::result<V> result;
- typedef typename result::iterator iterator;
-
- transaction t (db->begin ());
-
- {
- result r (db->query<V> (q));
-
- iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "John" && i->last_name == "Doe" &&
- i->employer == "Simple Tech, Inc");
-
- assert (++i != r.end ());
- assert (i->first_name == "Joe" && i->last_name == "Dirt" &&
- i->employer == "Simple Tech, Inc");
-
- assert (++i == r.end ());
- }
-
- t.commit ();
-}
-
-int
-main (int argc, char* argv[])
-{
- try
- {
- auto_ptr<database> db (create_database (argc, argv));
-
- //
- //
- {
- country ca ("CA", "Canada");
- country za ("ZA", "South Africa");
- country us ("US", "United States");
- country se ("SE", "Sweden");
-
- person p1 (1, "John", "Doe", 30, male, measures (60, 160), &ca, &ca);
- person p2 (2, "Jane", "Doe", 29, female, measures (70, 170), &za, &us);
- person p3 (3, "Joe", "Dirt", 31, male, measures (80, 180), &us, &za);
- person p4 (4, "Johan", "Johansen", 32, male, measures (90, 190), &se,
- &se);
-
- p2.husband = &p1;
-
- employer st ("Simple Tech, Inc");
- employer ct ("Complex Tech, Inc");
-
- p2.previous_employer = st.name;
- p3.previous_employer = ct.name;
-
- st.employees.push_back (&p1);
- st.employees.push_back (&p3);
- st.head_count = 2;
-
- ct.employees.push_back (&p2);
- ct.employees.push_back (&p4);
- ct.head_count = 2;
-
- 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);
-
- db->persist (st);
- db->persist (ct);
- t.commit ();
- }
-
- // view1
- //
- {
- typedef odb::result<view1> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view1> ());
- assert (size (r) == 4);
- }
-
- {
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<view1> ("ORDER BY age");
- else
- r = db->query<view1> ("ORDER BY \"age\"");
-
- assert (size (r) == 4);
- }
-
- {
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<view1> ("age < 31 ORDER BY age");
- else
- r = db->query<view1> ("\"age\" < 31 ORDER BY \"age\"");
-
- view1_check (r);
- }
-
- t.commit ();
- }
- }
-
- // view1a
- //
- {
- typedef odb::result<view1a> result;
-
- {
- transaction t (db->begin ());
-
- result r (db->query<view1a> ());
- view1_check (r);
-
- t.commit ();
- }
- }
-
- // view1b
- //
- {
- typedef odb::result<view1b> result;
-
- {
- transaction t (db->begin ());
-
- result r (db->query<view1b> ());
- view1_check (r);
-
- t.commit ();
- }
-
- // No native parameter support in dynamic multi-database mode.
- //
-#ifndef DATABASE_COMMON
- {
- typedef odb::query<view1b> query;
-
- transaction t (db->begin ());
-
-#ifndef DATABASE_ORACLE
- result r (db->query<view1b> ("first = " + query::_val ("Jane")));
-#else
- result r (db->query<view1b> ("\"first\" = " + query::_val ("Jane")));
-#endif
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first == "Jane" && i->last == "Doe");
- assert (++i == r.end ());
-
- t.commit ();
- }
-#endif
- }
-
- // view1c
- //
- {
- typedef odb::result<view1c> result;
-
- {
- transaction t (db->begin ());
-
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<view1c> ("SELECT first, last, age "
- "FROM t_view_person "
- "WHERE age < 31 ORDER BY age");
- else
- r = db->query<view1c> ("SELECT \"first\", \"last\", \"age\" "
- "FROM \"t_view_person\" "
- "WHERE \"age\" < 31 ORDER BY \"age\"");
- view1_check (r);
-
- t.commit ();
- }
- }
-
- // view1d
- //
- {
- typedef odb::result<view1d> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r;
- if (db->id () != odb::id_oracle)
- r = db->query<view1d> ("age < 31 ORDER BY age");
- else
- r = db->query<view1d> ("\"age\" < 31 ORDER BY \"age\"");
-
- view1_check (r);
- }
-
- t.commit ();
- }
- }
-
- // view2
- //
- view2_test<view2> (db);
- view2_test<view2a> (db);
- view2_test<view2b> (db);
- view2_test<view2c> (db);
-
- // view3
- //
- {
- typedef odb::result<const view3> result; // Test const result.
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view3> ());
-
- size_t count (0);
- for (result::iterator i (r.begin ()); i != r.end (); ++i)
- {
- if (i->last_name == "Doe")
- assert (i->count == 2);
- else if (i->last_name == "Dirt" ||
- i->last_name == "Johansen")
- assert (i->count == 1);
- else
- assert (false);
-
- count++;
- }
-
- assert (count == 3);
- }
-
- t.commit ();
- }
- }
-
- // view3a
- //
- {
- typedef odb::query<view3a> query;
- typedef odb::result<view3a> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view3a> (query::last_name == "Doe"));
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->last_name == "Doe" && i->count == 2);
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view4
- //
- view4_test<view4> (db);
- view4_test<view4a> (db);
-
- // view5
- //
- {
- typedef odb::query<view5> query;
- typedef odb::result<view5> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (
- db->query<view5> (
- query::residence::name == query::nationality::name));
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "John" && i->last_name == "Doe" &&
- i->rname == "Canada" && i->rname == "Canada");
-
- assert (++i != r.end ());
- assert (i->first_name == "Johan" && i->last_name == "Johansen" &&
- i->rname == "Sweden" && i->rname == "Sweden");
-
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view6
- //
- view6_test<view6> (
- db, odb::query<view6>::employer::name == "Simple Tech, Inc");
-
- view6_test<view6a> (
- db, odb::query<view6a>::employer::name == "Simple Tech, Inc");
-
- view6_test<view6b> (
- db, odb::query<view6b>::employer::name == "Simple Tech, Inc");
-
- // No native parameter support in dynamic multi-database mode.
- //
-#ifndef DATABASE_COMMON
- view6_test<view6c> (
-#ifndef DATABASE_ORACLE
- db, "e.name = " + odb::query<view6c>::_val ("Simple Tech, Inc"));
-#else
- db, "\"e\".\"name\" = " + odb::query<view6c>::_val ("Simple Tech, Inc"));
-#endif
-#endif
-
- // view7
- //
- {
- typedef odb::query<view7> query;
- typedef odb::result<view7> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view7> (query::person::last_name == "Doe"));
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "Jane" && i->last_name == "Doe" &&
- !i->head_count.null () && *i->head_count == 2);
-
- assert (++i != r.end ());
- assert (i->first_name == "John" && i->last_name == "Doe" &&
- i->head_count.null ());
-
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view8
- //
- {
- typedef odb::result<view8> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view8> ());
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->wife_name == "Jane" && i->husb_name == "John");
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view9
- //
- {
- typedef odb::query<view9> query;
- typedef odb::result<view9> result;
-
- {
- transaction t (db->begin ());
-
- {
- // Test case-insensitive clause prefix detection.
- //
- result r (db->query<view9> ("where" + (query::gender == female)));
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->first_name == "Jane" && i->last_name == "Doe" &&
- i->gender == female);
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view10
- //
- {
- typedef odb::query<view10> query;
- typedef odb::result<view10> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view10> (
- query::measures.weight > 60 &&
- query::measures.hight < 190));
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->last_name == "Doe" &&
- i->measures.weight == 70 && i->measures.hight == 170);
-
- assert (++i != r.end ());
- assert (i->last_name == "Dirt" &&
- i->measures.weight == 80 && i->measures.hight == 180);
-
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view11
- //
- {
- typedef odb::result<view11> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view11> ());
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->last_name == "Doe" && i->hight == 170);
-
- assert (++i != r.end ());
- assert (i->last_name == "Dirt" && i->hight == 180);
-
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
-
- // view12
- //
- {
- typedef odb::query<view12> query;
- typedef odb::result<view12> result;
-
- {
- transaction t (db->begin ());
-
- {
- result r (db->query<view12> (query::last_name == "Dirt"));
-
- result::iterator i (r.begin ());
-
- assert (i != r.end ());
- assert (i->residence == "US");
- assert (++i == r.end ());
- }
-
- t.commit ();
- }
- }
- }
- catch (const odb::exception& e)
- {
- cerr << e.what () << endl;
- return 1;
- }
-}