From 504fa38f3f71c345f41dfbb7e59b1d2f88308987 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 4 Feb 2015 17:23:54 +0200 Subject: Implement object loading views See section 10.2 in the manual for details. --- common/view/driver.cxx | 662 ------------------------------------------------- 1 file changed, 662 deletions(-) delete mode 100644 common/view/driver.cxx (limited to 'common/view/driver.cxx') 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 // std::auto_ptr -#include -#include - -#include -#include - -#include -#include // DATABASE_XXX - -#include "test.hxx" -#include "test-odb.hxx" - -using namespace std; -using namespace odb::core; - -template -void -view1_check (odb::result& r) -{ - typedef odb::result 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 -void -view2_test (const auto_ptr& db) -{ - typedef odb::query query; - typedef odb::result result; - typedef typename result::iterator iterator; - - transaction t (db->begin ()); - - { - result r (db->query ()); - iterator i (r.begin ()); - assert (i != r.end ()); - assert (i->count == 4); - } - - { - result r; - if (db->id () != odb::id_oracle) - r = db->query ("age < 31"); - else - r = db->query ("\"age\" < 31"); - - iterator i (r.begin ()); - assert (i != r.end ()); - assert (i->count == 2); - } - - { - result r (db->query (query::age < 31)); - iterator i (r.begin ()); - assert (i != r.end ()); - assert (i->count == 2); - } - - { - auto_ptr v (db->query_one ()); - assert (v->count == 4); - } - - { - auto_ptr v; - if (db->id () != odb::id_oracle) - v.reset (db->query_one ("age < 31")); - else - v.reset (db->query_one ("\"age\" < 31")); - assert (v->count == 2); - } - - { - auto_ptr v (db->query_one (query::age < 31)); - assert (v->count == 2); - } - - t.commit (); -} - -template -void -view4_test (const auto_ptr& db) -{ - typedef odb::query query; - typedef odb::result result; - typedef typename result::iterator iterator; - - transaction t (db->begin ()); - - { - result r; - if (db->id () != odb::id_oracle) - r = db->query ((query::person::age > 30) + "ORDER BY age"); - else - r = db->query ((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 ( - (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 (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 -void -view6_test (const auto_ptr& db, const odb::query& q) -{ - typedef odb::result result; - typedef typename result::iterator iterator; - - transaction t (db->begin ()); - - { - result r (db->query (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 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 result; - - { - transaction t (db->begin ()); - - { - result r (db->query ()); - assert (size (r) == 4); - } - - { - result r; - if (db->id () != odb::id_oracle) - r = db->query ("ORDER BY age"); - else - r = db->query ("ORDER BY \"age\""); - - assert (size (r) == 4); - } - - { - result r; - if (db->id () != odb::id_oracle) - r = db->query ("age < 31 ORDER BY age"); - else - r = db->query ("\"age\" < 31 ORDER BY \"age\""); - - view1_check (r); - } - - t.commit (); - } - } - - // view1a - // - { - typedef odb::result result; - - { - transaction t (db->begin ()); - - result r (db->query ()); - view1_check (r); - - t.commit (); - } - } - - // view1b - // - { - typedef odb::result result; - - { - transaction t (db->begin ()); - - result r (db->query ()); - view1_check (r); - - t.commit (); - } - - // No native parameter support in dynamic multi-database mode. - // -#ifndef DATABASE_COMMON - { - typedef odb::query query; - - transaction t (db->begin ()); - -#ifndef DATABASE_ORACLE - result r (db->query ("first = " + query::_val ("Jane"))); -#else - result r (db->query ("\"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 result; - - { - transaction t (db->begin ()); - - result r; - if (db->id () != odb::id_oracle) - r = db->query ("SELECT first, last, age " - "FROM t_view_person " - "WHERE age < 31 ORDER BY age"); - else - r = db->query ("SELECT \"first\", \"last\", \"age\" " - "FROM \"t_view_person\" " - "WHERE \"age\" < 31 ORDER BY \"age\""); - view1_check (r); - - t.commit (); - } - } - - // view1d - // - { - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r; - if (db->id () != odb::id_oracle) - r = db->query ("age < 31 ORDER BY age"); - else - r = db->query ("\"age\" < 31 ORDER BY \"age\""); - - view1_check (r); - } - - t.commit (); - } - } - - // view2 - // - view2_test (db); - view2_test (db); - view2_test (db); - view2_test (db); - - // view3 - // - { - typedef odb::result result; // Test const 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_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 query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r (db->query (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 (db); - view4_test (db); - - // view5 - // - { - typedef odb::query query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r ( - db->query ( - 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 ( - db, odb::query::employer::name == "Simple Tech, Inc"); - - view6_test ( - db, odb::query::employer::name == "Simple Tech, Inc"); - - view6_test ( - db, odb::query::employer::name == "Simple Tech, Inc"); - - // No native parameter support in dynamic multi-database mode. - // -#ifndef DATABASE_COMMON - view6_test ( -#ifndef DATABASE_ORACLE - db, "e.name = " + odb::query::_val ("Simple Tech, Inc")); -#else - db, "\"e\".\"name\" = " + odb::query::_val ("Simple Tech, Inc")); -#endif -#endif - - // view7 - // - { - typedef odb::query query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r (db->query (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 result; - - { - transaction t (db->begin ()); - - { - result r (db->query ()); - - 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 query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - // Test case-insensitive clause prefix detection. - // - result r (db->query ("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 query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r (db->query ( - 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 result; - - { - transaction t (db->begin ()); - - { - result r (db->query ()); - - 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 query; - typedef odb::result result; - - { - transaction t (db->begin ()); - - { - result r (db->query (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; - } -} -- cgit v1.1