diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2024-01-25 20:32:06 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2024-01-25 20:32:06 +0300 |
commit | 0d49ea1fe08cf1eab41a00149393a291c65a59d7 (patch) | |
tree | 0391eb09309ca95282e200516937e64d89f3e1bb /common/view | |
parent | fc3fb39c90ab7fe5fccbe3f3bc0eb2645157bb96 (diff) |
Turn odb-tests repository into package for muti-package repositoryodb-tests
Diffstat (limited to 'common/view')
-rw-r--r-- | common/view/basics/buildfile | 42 | ||||
-rw-r--r-- | common/view/basics/driver.cxx | 846 | ||||
-rw-r--r-- | common/view/basics/test.hxx | 640 | ||||
-rw-r--r-- | common/view/basics/testscript | 33 | ||||
-rw-r--r-- | common/view/olv/.gitignore | 46 | ||||
-rw-r--r-- | common/view/olv/buildfile | 50 | ||||
-rw-r--r-- | common/view/olv/driver.cxx | 654 | ||||
-rw-r--r-- | common/view/olv/test1.hxx | 116 | ||||
-rw-r--r-- | common/view/olv/test2.hxx | 122 | ||||
-rw-r--r-- | common/view/olv/test3.hxx | 106 | ||||
-rw-r--r-- | common/view/olv/test4.hxx | 151 | ||||
-rw-r--r-- | common/view/olv/test5.hxx | 86 | ||||
-rw-r--r-- | common/view/olv/test6.hxx | 57 | ||||
-rw-r--r-- | common/view/olv/test7.hxx | 57 | ||||
-rw-r--r-- | common/view/olv/test8.hxx | 54 | ||||
-rw-r--r-- | common/view/olv/test9.hxx | 78 | ||||
-rw-r--r-- | common/view/olv/testscript | 39 |
17 files changed, 0 insertions, 3177 deletions
diff --git a/common/view/basics/buildfile b/common/view/basics/buildfile deleted file mode 100644 index d9738a4..0000000 --- a/common/view/basics/buildfile +++ /dev/null @@ -1,42 +0,0 @@ -# file : common/view/basics/buildfile -# license : GNU GPL v2; see accompanying LICENSE file - -import libodb = libodb%lib{odb} - -libs = - -for db: $databases - import libs += libodb-$db%lib{odb-$db} - -import libs += lib{common} - -exe{driver}: {hxx cxx}{* -*-odb -*-odb-*} {hxx ixx cxx}{test-odb} testscript - -# Introduce the metadata library target to make sure the libodb library is -# resolved for the odb_compile ad hoc rule (see build/root.build for details). -# -libue{test-meta}: $libodb - -<{hxx ixx cxx}{test-odb}>: hxx{test} libue{test-meta} - -for db: $databases -{ - exe{driver}: {hxx ixx cxx}{test-odb-$db}: include = $multi - <{hxx ixx cxx}{test-odb-$db}>: hxx{test} libue{test-meta} -} - -exe{driver}: libue{test-meta} $libs - -# Specify the ODB custom options to be used by the odb_compile ad hoc rule -# (see build/root.build for details). -# -odb_options = --table-prefix t_view_b_ \ - --generate-schema \ - --generate-query \ - --generate-prepared - -cxx.poptions =+ "-I$out_base" "-I$src_base" - -# Testscript's run-time prerequisites. -# -exe{driver}: ../../../alias{database-client}: include = adhoc diff --git a/common/view/basics/driver.cxx b/common/view/basics/driver.cxx deleted file mode 100644 index e2f611a..0000000 --- a/common/view/basics/driver.cxx +++ /dev/null @@ -1,846 +0,0 @@ -// file : common/view/basics/driver.cxx -// license : GNU GPL v2; see accompanying LICENSE file - -// Test view basics. -// - -#include <memory> // std::unique_ptr -#include <iostream> - -#include <odb/database.hxx> -#include <odb/transaction.hxx> - -#include <libcommon/common.hxx> -#include <libcommon/config.hxx> // DATABASE_XXX - -#include "test.hxx" -#include "test-odb.hxx" - -#undef NDEBUG -#include <cassert> - -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 unique_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); - } - - { - unique_ptr<V> v (db->query_one<V> ()); - assert (v->count == 4); - } - - { - unique_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); - } - - { - unique_ptr<V> v (db->query_one<V> (query::age < 31)); - assert (v->count == 2); - } - - t.commit (); -} - -template <typename V> -void -view4_test (const unique_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 unique_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 - { - unique_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 MULTI_DATABASE - { - 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_b_person " - "WHERE age < 31 ORDER BY age"); - else - r = db->query<view1c> ("SELECT \"first\", \"last\", \"age\" " - "FROM \"t_view_b_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 MULTI_DATABASE - 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 (); - } - } - - // view13 - // - { - typedef odb::query<view13> query; - typedef odb::result<view13> result; - - { - transaction t (db->begin ()); - - { - result r (db->query<view13> ( - (query::person::age < 32) + - "ORDER BY" + query::employer::name)); - - assert (size (r) == 2); - } - - t.commit (); - } - } - - // view14 - // - { - transaction t (db->begin ()); - assert (size (db->query<view14> ()) == 2); - t.commit (); - } - - // Test join types. - // - { - using namespace test2; - - { - obj1 o11 (1, 1); - obj1 o12 (2, 2); - - obj2 o21 (1, 1); - obj2 o22 (2, 1); - obj2 o23 (3, 3); - - transaction t (db->begin ()); - db->persist (o11); - db->persist (o12); - db->persist (o21); - db->persist (o22); - db->persist (o23); - t.commit (); - } - - { - typedef odb::query<vleft> query; - typedef odb::result<vleft> result; - - transaction t (db->begin ()); - result r (db->query<vleft> ( - "ORDER BY" + query::o1::id1 + "," + query::o2::id2)); - result::iterator i (r.begin ()); - assert ( i != r.end () && i->id1 == 1 && *i->id2 == 1); - assert (++i != r.end () && i->id1 == 1 && *i->id2 == 2); - assert (++i != r.end () && i->id1 == 2 && i->id2.null ()); - assert (++i == r.end ()); - t.commit (); - } - - // @@ BUILD2 Also disable for DATABASE_MYSQL and DATABASE_PGSQL (see - // vright definition for details). - // -#if !defined(DATABASE_MYSQL) && \ - !defined(DATABASE_SQLITE) && \ - !defined(DATABASE_PGSQL) - { - typedef odb::query<vright> query; - typedef odb::result<vright> result; - - transaction t (db->begin ()); - result r (db->query<vright> ( - "ORDER BY" + query::o1::id1 + "," + query::o2::id2)); - result::iterator i (r.begin ()); - assert ( i != r.end () && i->id1 == 1 && *i->id2 == 1); - assert (++i != r.end () && i->id1 == 1 && *i->id2 == 2); - assert (++i != r.end () && i->id1 == 2 && i->id2.null ()); - assert (++i == r.end ()); - t.commit (); - } -#endif - - // @@ BUILD2 Also disable for DATABASE_PGSQL (see vfull definition for - // details). - // -#if !defined(DATABASE_MYSQL) && \ - !defined(DATABASE_SQLITE) && \ - !defined(DATABASE_PGSQL) - { - typedef odb::query<vfull> query; - typedef odb::result<vfull> result; - - transaction t (db->begin ()); - result r (db->query<vfull> ( - "ORDER BY" + query::o1::id1 + "," + query::o2::id2)); - result::iterator i (r.begin ()); - - // SQL Server orders NULL values first. Got to be different. - // -#ifdef DATABASE_MSSQL - assert ( i != r.end () && i->id1.null () && *i->id2 == 3); - assert (++i != r.end () && *i->id1 == 1 && *i->id2 == 1); - assert (++i != r.end () && *i->id1 == 1 && *i->id2 == 2); - assert (++i != r.end () && *i->id1 == 2 && i->id2.null ()); -#else - assert ( i != r.end () && *i->id1 == 1 && *i->id2 == 1); - assert (++i != r.end () && *i->id1 == 1 && *i->id2 == 2); - assert (++i != r.end () && *i->id1 == 2 && i->id2.null ()); - assert (++i != r.end () && i->id1.null () && *i->id2 == 3); -#endif - assert (++i == r.end ()); - t.commit (); - } -#endif - - { - typedef odb::query<vinner> query; - typedef odb::result<vinner> result; - - transaction t (db->begin ()); - result r (db->query<vinner> ( - "ORDER BY" + query::o1::id1 + "," + query::o2::id2)); - result::iterator i (r.begin ()); - assert ( i != r.end () && i->id1 == 1 && i->id2 == 1); - assert (++i != r.end () && i->id1 == 1 && i->id2 == 2); - assert (++i == r.end ()); - t.commit (); - } - - { - typedef odb::query<vcross> query; - typedef odb::result<vcross> result; - - transaction t (db->begin ()); - result r (db->query<vcross> ( - "ORDER BY" + query::o1::id1 + "," + query::o2::id2)); - result::iterator i (r.begin ()); - assert ( i != r.end () && i->id1 == 1 && i->id2 == 1); - assert (++i != r.end () && i->id1 == 1 && i->id2 == 2); - assert (++i != r.end () && i->id1 == 1 && i->id2 == 3); - assert (++i != r.end () && i->id1 == 2 && i->id2 == 1); - assert (++i != r.end () && i->id1 == 2 && i->id2 == 2); - assert (++i != r.end () && i->id1 == 2 && i->id2 == 3); - assert (++i == r.end ()); - t.commit (); - } - - // Inner JOIN via relationship/container. - // - { - obj3 o31 (1, 1); - obj3 o32 (2, 2); - - obj4 o41 (1, 1); - obj4 o42 (2, 2); - o42.o3.push_back (&o32); - - transaction t (db->begin ()); - db->persist (o31); - db->persist (o32); - db->persist (o41); - db->persist (o42); - t.commit (); - } - - { - typedef odb::result<vrel> result; - - transaction t (db->begin ()); - result r (db->query<vrel> ()); - result::iterator i (r.begin ()); - assert ( i != r.end () && i->id4 == 2); - assert (++i == r.end ()); - t.commit (); - } - } - } - catch (const odb::exception& e) - { - cerr << e.what () << endl; - return 1; - } -} diff --git a/common/view/basics/test.hxx b/common/view/basics/test.hxx deleted file mode 100644 index 130bcd4..0000000 --- a/common/view/basics/test.hxx +++ /dev/null @@ -1,640 +0,0 @@ -// file : common/view/basics/test.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST_HXX -#define TEST_HXX - -#include <string> -#include <vector> -#include <cstddef> // std::size_t - -#include <odb/core.hxx> -#include <odb/nullable.hxx> - -struct employer; - -#pragma db object -struct country -{ - country (const std::string& c, const std::string& n) - : code (c), name (n) - { - } - - country () - { - } - - #pragma db id - std::string code; // ISO 2-letter country code. - - std::string name; -}; - -enum gender_type {male, female}; - -#pragma db value -struct measures -{ - measures (unsigned short w, unsigned short h) : weight (w), hight (h) {} - measures () {} - - unsigned short weight; - unsigned short hight; -}; - -#pragma db object -struct person -{ - typedef ::measures measures_type; - - person (unsigned long i, - const std::string& fn, - const std::string& ln, - unsigned short a, - gender_type g, - const measures_type m, - country* r, - country* n) - : id (i), - first_name_ (fn), - last_name_ (ln), - age (a), - gender (g), - measures (m), - residence (r), - nationality (n), - husband (0) - { - } - - person () - { - } - - #pragma db id - unsigned long id; - - #pragma db column("first") - std::string first_name_; - - #pragma db column("last") - std::string last_name_; - - unsigned short age; - - // #pragma db type("INT") - in MySQL test type pragma copying - gender_type gender; - - measures_type measures; - - #pragma db not_null - country* residence; - - #pragma db not_null - country* nationality; - - #pragma db inverse(employees) - employer* employed_by; - - // A non-pointer relationship. - // - odb::nullable<std::string> previous_employer; - - person* husband; // Self-reference. -}; - -#pragma db object -struct employer -{ - employer (const std::string& n) - : name (n) - { - } - - employer () - { - } - - #pragma db id - std::string name; - unsigned int head_count; - std::vector<person*> employees; -}; - -// -// General view with no associated objects. -// - -// Complete suffix query template. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view query("SELECT first, last, age FROM t_view_b_person") -#else -# pragma db view query("SELECT \"first\", \"last\", \"age\" " \ - "FROM \"t_view_b_person\"") -#endif -struct view1 -{ - std::string first; - std::string last; - unsigned short age; -}; - -// Complete query. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view query("SELECT first, last, age " \ - "FROM t_view_b_person " \ - "WHERE age < 31 ORDER BY age") -#else -# pragma db view query("SELECT \"first\", \"last\", \"age\" " \ - "FROM \"t_view_b_person\" " \ - "WHERE \"age\" < 31 ORDER BY \"age\"") -#endif -struct view1a -{ - std::string first; - std::string last; - unsigned short age; -}; - -// Complete placeholder query template. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view query("SELECT first, last, age " \ - "FROM t_view_b_person " \ - "WHERE age < 31 AND (?) ORDER BY age") -#else -# pragma db view query("SELECT \"first\", \"last\", \"age\" " \ - "FROM \"t_view_b_person\" " \ - "WHERE \"age\" < 31 AND (?) ORDER BY \"age\"") -#endif -struct view1b -{ - std::string first; - std::string last; - unsigned short age; -}; - -// Runtime query. -// -#pragma db view //query() -struct view1c -{ - std::string first; - std::string last; - unsigned short age; -}; - -// Assembled SELECT and FROM-lists. -// -#pragma db view table("t_view_b_person") -struct view1d -{ - #pragma db column("first") - std::string first; - - #pragma db column("last") - std::string last; - - #pragma db column("age") - unsigned short age; -}; - -// -// Count view plus associated object. -// - -// Complete suffix query. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view object(person) \ - query("SELECT count(id) FROM t_view_b_person") -#else -# pragma db view object(person) \ - query("SELECT count(\"id\") FROM \"t_view_b_person\"") -#endif -struct view2 -{ - std::size_t count; -}; - -// Generated query, literal column. -// -#pragma db view object(person) -struct view2a -{ -#ifndef ODB_DATABASE_ORACLE - #pragma db column("count(id)") -#else - #pragma db column("count(\"id\")") -#endif - std::size_t count; -}; - -// Generated query, qualified literal column. -// -#pragma db view object(person) -struct view2b -{ -#ifndef ODB_DATABASE_ORACLE - #pragma db column("count(t_view_b_person.id)") -#else - #pragma db column("count(\"t_view_b_person\".\"id\")") -#endif - std::size_t count; -}; - -// Generated query, expression column. -// -#pragma db view object(person) -struct view2c -{ - #pragma db column("count(" + person::id + ")") - std::size_t count; -}; - -// -// Aggregate view plus associated object with a custom alias. -// - -// Complete suffix query. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view object(person = test) \ - query("SELECT last, count(last) " \ - "FROM t_view_b_person " \ - "GROUP BY last") -#else -# pragma db view object(person = test) \ - query("SELECT \"last\", count(\"last\") " \ - "FROM \"t_view_b_person\" " \ - "GROUP BY \"last\"") -#endif -struct view3 -{ - std::string last_name; - std::size_t count; -}; - -// Generated query with integrated query condition and placeholder. -// -#pragma db view object(person = test) \ - query((?) + "GROUP BY" + test::last_name_) -struct view3a -{ - // Automatically resolved to test::last_name_. - // - std::string last_name; - - #pragma db column("count(" + test::last_name_ + ")") - std::size_t count; -}; - -// -// JOIN view plus associated objects, some with custom aliases. -// - -// Complete suffix query. -// -#ifndef ODB_DATABASE_ORACLE -# pragma db view object(person) object(country = residence) \ - query("SELECT first, last, residence.name " \ - "FROM t_view_b_person " \ - "LEFT JOIN t_view_b_country AS residence " \ - "ON t_view_b_person.residence = residence.code") -#else -# pragma db view object(person) object(country = residence) \ - query("SELECT \"first\", \"last\", \"residence\".\"name\" " \ - "FROM \"t_view_b_person\" " \ - "LEFT JOIN \"t_view_b_country\" \"residence\" " \ - "ON \"t_view_b_person\".\"residence\" = \"residence\".\"code\"") -#endif -struct view4 -{ - std::string first_name; - std::string last_name; - std::string name; -}; - -// Generated query. -// -#pragma db view object(person) \ - object(country = residence: person::residence) -struct view4a -{ - std::string first_name; - std::string last_name; - std::string name; -}; - -// -// JOIN the same object twice. -// -#pragma db view object(person) \ - object(country = residence: person::residence) \ - object(country = nationality: person::nationality) \ - query((?) + "ORDER BY" + person::age) -struct view5 -{ - std::string first_name; - std::string last_name; - - #pragma db column(residence::name) - std::string rname; - - #pragma db column(nationality::name) - std::string nname; -}; - -// -// JOIN via one(i)-to-many relationship. -// - -// Automatic relationship discovery. -// -#pragma db view object(person) object(employer) -struct view6 -{ - std::string first_name; - std::string last_name; - - #pragma db column(::employer::name) - std::string employer; -}; - -// Manual relationship specification, left side. -// -#pragma db view object(person) object(employer: person::employed_by) -struct view6a -{ - std::string first_name; - std::string last_name; - - #pragma db column(::employer::name) - std::string employer; -}; - -// Manual relationship specification, right side. -// -#pragma db view object(person) object(employer: employer::employees) -struct view6b -{ - std::string first_name; - std::string last_name; - - #pragma db column(::employer::name) - std::string employer; -}; - -// The same using tables. -// -#if defined(ODB_DATABASE_ORACLE) -#pragma db view table("t_view_b_person" = "p") \ - table("t_view_b_employer_employees" = "ee": "\"ee\".\"value\" = \"p\".\"id\"")\ - table("t_view_b_employer" = "e": "\"ee\".\"object_id\" = \"e\".\"name\"") -#elif defined(ODB_DATABASE_MSSQL) -#pragma db view table("t_view_b_person" = "p") \ - table("t_view_b_employer_employees" = "ee": "ee.value = p.id") \ - table("t_view_b_employer" = "e": "[ee].[object_id] = e.name") -#elif defined(ODB_DATABASE_MYSQL) -#pragma db view table("t_view_b_person" = "p") \ - table("t_view_b_employer_employees" = "ee": "ee.value = p.id") \ - table("t_view_b_employer" = "e": "`ee`.`object_id` = e.name") -#else -#pragma db view table("t_view_b_person" = "p") \ - table("t_view_b_employer_employees" = "ee": "ee.value = p.id") \ - table("t_view_b_employer" = "e": "\"ee\".\"object_id\" = e.name") -#endif -struct view6c -{ - #pragma db column("p.first") - std::string first_name; - - #pragma db column("p.last") - std::string last_name; - - #pragma db column("e"."name") - std::string employer; -}; - -// -// JOIN via a custom condition. -// -#pragma db view object(person) \ - object(employer: person::previous_employer == employer::name)\ - query((?) + "ORDER BY" + person::age) -struct view7 -{ - std::string first_name; - std::string last_name; - - odb::nullable<unsigned int> head_count; -}; - -// -// Self-JOIN. -// -#pragma db view object(person = wife) object(person = husb) \ - query (wife::husband.is_not_null ()) -struct view8 -{ - #pragma db column(wife::first_name_) - std::string wife_name; - - #pragma db column(husb::first_name_) - std::string husb_name; -}; - -// -// Enum mapping. -// -#pragma db view object(person) -struct view9 -{ - std::string first_name; - std::string last_name; - gender_type gender; -}; - -// -// Composite in view. -// -#pragma db view object(person) query((?) + "ORDER BY" + person::age) -struct view10 -{ - std::string last_name; - ::measures measures; -}; - -// -// Composite in object. -// -#pragma db view object(person) \ - query((person::measures.weight > 60 && person::measures.hight < 190 && (?)) \ - + "ORDER BY" + person::age) -struct view11 -{ - std::string last_name; - - #pragma db column(person::measures.hight) - unsigned short hight; -}; - -// -// Extract object pointer as object id. -// -#pragma db view object(person) -struct view12 -{ - std::string residence; -}; - -// -// Test 'distinct' result modifier. -// -#pragma db view object(employer) object(person) query(distinct) -struct view13 -{ - std::string name; -}; - -// -// Test 'for_update' result modifier. -// -#pragma db view object(employer) query((?), for_update) -struct view14 -{ - std::string name; -}; - -// Test join types. -// -#pragma db namespace table("t2_") -namespace test2 -{ - #pragma db object - struct obj1 - { - obj1 (int id = 0, int n_ = 0): id1 (id), n (n_) {} - - #pragma db id - int id1; - - int n; - }; - - #pragma db object no_id - struct obj2 - { - obj2 (int id = 0, int n_ = 0): id2 (id), n (n_) {} - - #pragma db id - int id2; - - int n; - }; - - #pragma db view object(obj1 = o1) object(obj2 = o2 left: o1::n == o2::n) - struct vleft - { - int id1; - odb::nullable<int> id2; - }; - - // @@ BUILD2 Also disable for ODB_DATABASE_MYSQL and ODB_DATABASE_PGSQL, - // otherwise we end up with the following error: - // - // test-odb-mysql.hxx:3202:20: error: invalid use of incomplete type ‘class odb::access::view_traits<test2::vright>’ - // 3202 | public access::view_traits< ::test2::vright > - // | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // -//#if !defined(ODB_DATABASE_SQLITE) && !defined(ODB_DATABASE_COMMON) -#if !defined(ODB_DATABASE_MYSQL) && \ - !defined(ODB_DATABASE_SQLITE) && \ - !defined(ODB_DATABASE_PGSQL) && \ - !defined(ODB_DATABASE_COMMON) - - #pragma db view object(obj2 = o2) object(obj1 = o1 right: o2::n == o1::n) - struct vright - { - int id1; - odb::nullable<int> id2; - }; - -#endif - - // @@ BUILD2 Also disable for ODB_DATABASE_PGSQL, otherwise we end up with the - // following error: - // - // test-odb-pgsql.hxx:3325:20: error: invalid use of incomplete type ‘class odb::access::view_traits<test2::vfull>’ - // 3325 | public access::view_traits< ::test2::vfull > - // | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // -/* -#if !defined(ODB_DATABASE_MYSQL) && \ - !defined(ODB_DATABASE_SQLITE) && \ - !defined(ODB_DATABASE_COMMON) -*/ -#if !defined(ODB_DATABASE_MYSQL) && \ - !defined(ODB_DATABASE_SQLITE) && \ - !defined(ODB_DATABASE_PGSQL) && \ - !defined(ODB_DATABASE_COMMON) - - #pragma db view object(obj1 = o1) object(obj2 = o2 full: o1::n == o2::n) - struct vfull - { - odb::nullable<int> id1; - odb::nullable<int> id2; - }; - -#endif - - #pragma db view object(obj1 = o1) object(obj2 = o2 inner: o1::n == o2::n) - struct vinner - { - int id1; - int id2; - }; - - #pragma db view object(obj1 = o1) object(obj2 = o2 cross) - struct vcross - { - int id1; - int id2; - }; - - // Inner JOIN via relationship/container. - // - #pragma db object - struct obj3 - { - obj3 (int id = 0, int n_ = 0): id3 (id), n (n_) {} - - #pragma db id - int id3; - - int n; - }; - - #pragma db object no_id - struct obj4 - { - obj4 (int id = 0, int n_ = 0): id4 (id), n (n_) {} - - #pragma db id - int id4; - - int n; - std::vector<obj3*> o3; - }; - - #pragma db view object(obj4) object(obj3 inner) - struct vrel - { - int id4; - }; -} - -#endif // TEST_HXX diff --git a/common/view/basics/testscript b/common/view/basics/testscript deleted file mode 100644 index faa8408..0000000 --- a/common/view/basics/testscript +++ /dev/null @@ -1,33 +0,0 @@ -# file : common/view/basics/testscript -# license : GNU GPL v2; see accompanying LICENSE file - -.include ../../../database-options.testscript - -: mysql -: -if $mysql -{ - .include ../../../mysql.testscript - - $create_schema; - $* -} - -: sqlite -: -if $sqlite -{ - .include ../../../sqlite.testscript - - $* -} - -: pgsql -: -if $pgsql -{ - .include ../../../pgsql.testscript - - $create_schema; - $* -} diff --git a/common/view/olv/.gitignore b/common/view/olv/.gitignore deleted file mode 100644 index 2b95165..0000000 --- a/common/view/olv/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# ODB-generated files. -# -test1-odb.?xx -test1-odb-*.?xx -test1.sql -test1-*.sql - -test2-odb.?xx -test2-odb-*.?xx -test2.sql -test2-*.sql - -test3-odb.?xx -test3-odb-*.?xx -test3.sql -test3-*.sql - -test4-odb.?xx -test4-odb-*.?xx -test4.sql -test4-*.sql - -test5-odb.?xx -test5-odb-*.?xx -test5.sql -test5-*.sql - -test6-odb.?xx -test6-odb-*.?xx -test6.sql -test6-*.sql - -test7-odb.?xx -test7-odb-*.?xx -test7.sql -test7-*.sql - -test8-odb.?xx -test8-odb-*.?xx -test8.sql -test8-*.sql - -test9-odb.?xx -test9-odb-*.?xx -test9.sql -test9-*.sql diff --git a/common/view/olv/buildfile b/common/view/olv/buildfile deleted file mode 100644 index 89ecbcf..0000000 --- a/common/view/olv/buildfile +++ /dev/null @@ -1,50 +0,0 @@ -# file : common/view/olv/buildfile -# license : GNU GPL v2; see accompanying LICENSE file - -import libodb = libodb%lib{odb} - -libs = - -for db: $databases - import libs += libodb-$db%lib{odb-$db} - -import libs += lib{common} - -hs = test1 test2 test3 test4 test5 test6 test7 test8 test9 - -exe{driver}: {hxx cxx}{* -*-odb -*-odb-*} testscript - -# Introduce the metadata library target to make sure the libodb library is -# resolved for the odb_compile ad hoc rule (see build/root.build for details). -# -libue{test-meta}: $libodb - -for h: $hs -{ - exe{driver}: {hxx ixx cxx}{$h-odb} - - <{hxx ixx cxx}{$h-odb}>: hxx{$h} libue{test-meta} - - for db: $databases - { - exe{driver}: {hxx ixx cxx}{$h-odb-$db}: include = $multi - <{hxx ixx cxx}{$h-odb-$db}>: hxx{$h} libue{test-meta} - } -} - -exe{driver}: libue{test-meta} $libs - -# Specify the ODB custom options to be used by the odb_compile ad hoc rule -# (see build/root.build for details). -# -odb_options = --table-prefix t_view_olv_ \ - --generate-schema \ - --generate-query - -cxx.poptions =+ "-I$out_base" "-I$src_base" - -# Testscript's run-time prerequisites. -# -exe{driver}: ../../../alias{database-client}: include = adhoc - -testscript@./: schemas = $hs diff --git a/common/view/olv/driver.cxx b/common/view/olv/driver.cxx deleted file mode 100644 index c08015e..0000000 --- a/common/view/olv/driver.cxx +++ /dev/null @@ -1,654 +0,0 @@ -// file : common/view/olv/driver.cxx -// license : GNU GPL v2; see accompanying LICENSE file - -// Test object loading views. -// - -#include <memory> // std::unique_ptr -#include <iostream> -#include <typeinfo> - -#include <odb/session.hxx> -#include <odb/database.hxx> -#include <odb/transaction.hxx> - -#include <libcommon/common.hxx> - -#include "test1.hxx" -#include "test2.hxx" -#include "test3.hxx" -#include "test4.hxx" -#include "test5.hxx" -#include "test6.hxx" -#include "test7.hxx" -#include "test8.hxx" -#include "test9.hxx" - -#include "test1-odb.hxx" -#include "test2-odb.hxx" -#include "test3-odb.hxx" -#include "test4-odb.hxx" -#include "test5-odb.hxx" -#include "test6-odb.hxx" -#include "test7-odb.hxx" -#include "test8-odb.hxx" -#include "test9-odb.hxx" - -#undef NDEBUG -#include <cassert> - -using namespace std; -using namespace odb::core; - -int -main (int argc, char* argv[]) -{ - try - { - unique_ptr<database> db (create_database (argc, argv)); - - // Test basic object loading functionality. - // - { - using namespace test1; - - { - object1 o1a (1, 123); - object2 o2 (1, "abc"); - - transaction t (db->begin ()); - db->persist (o1a); - db->persist (o2); - t.commit (); - } - - { - typedef odb::query<view1> query; - - transaction t (db->begin ()); - view1 v (db->query_value<view1> (query::object1::n == 123)); - assert (v.o2->s == "abc"); - t.commit (); - } - - { - transaction t (db->begin ()); - view2 v (db->query_value<view2> ()); - assert (v.o1->n == 123 && v.o2->s == "abc"); - t.commit (); - } - - { - transaction t (db->begin ()); - view3 v (db->query_value<view3> ()); - assert (v.o1->n == 123 && v.o2->s == "abc"); - t.commit (); - } - - { - transaction t (db->begin ()); - view4 v (db->query_value<view4> ()); - assert (v.s == "abc" && v.o2->s == "abc" && v.id == 1 && - v.o1->n == 123 && v.n == 123); - t.commit (); - } - - { - transaction t (db->begin ()); - view4 v (db->query_value<view4> ()); - assert (v.s == "abc" && v.o2->s == "abc" && v.id == 1 && - v.o1->n == 123 && v.n == 123); - t.commit (); - } - - { - typedef odb::query<view5> query; - - object1 o1b (123, 1); - - transaction t (db->begin ()); - db->persist (o1b); - view5 v (db->query_value<view5> (query::o1b::n == 1)); - assert (v.o1a->n == 123 && v.o2->s == "abc" && v.o1b->n == 1); - t.commit (); - } - } - - // Test loading of object pointers inside objects. - // - { - using namespace test2; - - shared_ptr<object1> o1 (new object1 (123)); - shared_ptr<object2> o2 (new object2 ("abc", o1)); - - { - - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - view1 v (db->query_value<view1> ()); - assert (v.o2->s == "abc" && v.o2->o1->n == 123); - t.commit (); - } - - { - // Check session interaction. - // - transaction t (db->begin ()); - session s; - shared_ptr<object2> o2a (db->load<object2> (o2->id)); - view1 v (db->query_value<view1> ()); - assert (v.o2 == o2a); - t.commit (); - } - - { - transaction t (db->begin ()); - session s; - view2 v (db->query_value<view2> ()); - assert (v.o1->n == 123 && v.o2->s == "abc" && v.o2->o1 == v.o1); - t.commit (); - } - - shared_ptr<object3> o3 (new object3 (o2)); - - { - transaction t (db->begin ()); - db->persist (o3); - t.commit (); - } - - { - transaction t (db->begin ()); - session s; - view3 v (db->query_value<view3> ()); - assert (v.o1->n == 123 && v.o3->o2->s == "abc" && - v.o3->o2->o1 == v.o1); - t.commit (); - } - - shared_ptr<object1> o1b (new object1 (234)); - shared_ptr<object2> o2b (new object2 ("bcd", o1b)); - shared_ptr<object4> o4 (new object4); - o4->o2.push_back (o2); - o4->o2.push_back (o2b); - - { - transaction t (db->begin ()); - db->persist (o1b); - db->persist (o2b); - db->persist (o4); - t.commit (); - } - - { - transaction t (db->begin ()); - view4 v (db->query_value<view4> ()); - assert (v.o4->o2[0]->s == "abc" && v.o4->o2[0]->o1->n == 123 && - v.o4->o2[1]->s == "bcd" && v.o4->o2[1]->o1->n == 234); - t.commit (); - } - - { - typedef odb::query<view5> query; - typedef odb::result<view5> result; - - transaction t (db->begin ()); - session s; - result r (db->query<view5> ("ORDER BY" + query::object1::id)); - result::iterator i (r.begin ()); - - assert (i != r.end ()); - { - const view5& v (*i); - - assert (v.o4->o2[0]->s == "abc" && v.o4->o2[0]->o1->n == 123 && - v.o4->o2[1]->s == "bcd" && v.o4->o2[1]->o1->n == 234 && - v.o4->o2[0]->o1 == v.o1); - } - assert (++i != r.end ()); - { - const view5& v (*i); - - assert (v.o4->o2[0]->s == "abc" && v.o4->o2[0]->o1->n == 123 && - v.o4->o2[1]->s == "bcd" && v.o4->o2[1]->o1->n == 234 && - v.o4->o2[1]->o1 == v.o1); - } - assert (++i == r.end ()); - t.commit (); - } - - shared_ptr<object5> o5 (new object5 (o1b, o2)); - - { - transaction t (db->begin ()); - db->persist (o5); - t.commit (); - } - - { - transaction t (db->begin ()); - view6 v (db->query_value<view6> ()); - assert (v.o1a->n == 123 && v.o1b->n == 234); - t.commit (); - } - } - - // Test JOINs for pointed-to objects, existing and automatically added. - // - { - using namespace test3; - - shared_ptr<object1> o1 (new object1 (123)); - shared_ptr<object2> o2 (new object2 ("abc")); - - o1->o2 = o2; - o2->o1 = o1; - - { - - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - view1a v (db->query_value<view1a> ()); - // VC11 - assert (v.o1->n == 123 && v.o1->o2.object_id<object2> () == o2->id); - t.commit (); - } - - { - transaction t (db->begin ()); - view1b v (db->query_value<view1b> ()); - // VC11 - assert (v.o1->n == 123 && v.o1->o2.object_id<object2> () == o2->id); - t.commit (); - } - - // Container case. - // - - shared_ptr<object3> o3 (new object3 (123)); - shared_ptr<object4> o4 (new object4 ("abc")); - - o3->o4 = o4; - o4->o3.push_back (o3); - - { - - transaction t (db->begin ()); - db->persist (o3); - db->persist (o4); - t.commit (); - } - - { - transaction t (db->begin ()); - view2a v (db->query_value<view2a> ()); - // VC11 - assert (v.o3->n == 123 && v.o3->o4.object_id<object4> () == o4->id); - t.commit (); - } - - { - transaction t (db->begin ()); - view2b v (db->query_value<view2b> ()); - // VC11 - assert (v.o3->n == 123 && v.o3->o4.object_id<object4> () == o4->id); - t.commit (); - } - } - - // Test by-value load. - // - { - using namespace test4; - - { - object1 o1 (1, 123); - object2 o2 (1, "abc", &o1); - - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - view1 v (db->query_value<view1> ()); - assert (v.o1.n == 123); - t.commit (); - } - - { - transaction t (db->begin ()); - view1a v (db->query_value<view1a> ()); - assert (!v.o1_null && v.o1.n == 123); - t.commit (); - } - - { - transaction t (db->begin ()); - view1b v (db->query_value<view1b> ()); - assert (/*v.o1_p == &v.o1 && */ v.o1.n == 123); // Copy ctor. - t.commit (); - } - - { - typedef odb::result<view1c> result; - - transaction t (db->begin ()); - result r (db->query<view1c> ()); - result::iterator i (r.begin ()); - assert (i != r.end ()); - - object1 o1; - view1c v (o1); - i.load (v); - - assert (v.o1_p == &o1 && o1.n == 123); - - assert (++i == r.end ()); - t.commit (); - } - - { - transaction t (db->begin ()); - session s; - view2 v (db->query_value<view2> ()); - - // @@ BUILD2 As of cl 19.29.30136 (VS 2019 16.11.5) v.o2.o1 points to - // the address of o1 member of the object being returned by - // query_value<view2>() which v is a copy of, and thus the - // original assertion fails. Note that changing `view2 v` to - // `const view2& v` doesn't help. - // - //assert (v.o1.n == 123 && v.o2.s == "abc" && v.o2.o1 == &v.o1); - assert (v.o1.n == 123 && v.o2.s == "abc"); - t.commit (); - } - - object1 o1b (2, 234); - - { - transaction t (db->begin ()); - db->persist (o1b); - t.commit (); - } - - { - typedef odb::query<view2a> query; - - transaction t (db->begin ()); - session s; - view2a v (db->query_value<view2a> (query::object1::id == 2)); - assert (v.o1.n == 234 && v.o2_null); - t.commit (); - } - - shared_ptr<object3> o3 (new object3 (1, 123)); - - { - transaction t (db->begin ()); - db->persist (o3); - t.commit (); - } - - { - transaction t (db->begin ()); - { - view3 v (db->query_value<view3> ()); - assert (v.o3_p == &v.o3 && v.o3.n == 123); // Load into value. - } - session s; // Load into cache. - shared_ptr<object3> o3a (db->load<object3> (o3->id)); - { - view3 v (db->query_value<view3> ()); - assert (v.o3_p == o3a.get ()); // Load from cache. - } - t.commit (); - } - } - - // Test NULL object pointers. - // - { - using namespace test5; - - shared_ptr<object1> o1a (new object1 (123)); - shared_ptr<object1> o1b (new object1 (234)); - shared_ptr<object2> o2 (new object2 ("abc", o1a)); - - { - transaction t (db->begin ()); - db->persist (o1a); - db->persist (o1b); - db->persist (o2); - t.commit (); - } - - { - typedef odb::query<view1> query; - typedef odb::result<view1> result; - - transaction t (db->begin ()); - session s; - result r (db->query<view1> ("ORDER BY" + query::object1::id)); - result::iterator i (r.begin ()); - - assert (i != r.end ()); - { - const view1& v (*i); - assert (v.o1->n == 123 && v.o2->s == "abc" && v.o2->o1 == v.o1); - } - assert (++i != r.end ()); - { - const view1& v (*i); - assert (v.o1->n == 234 && !v.o2); - } - assert (++i == r.end ()); - t.commit (); - } - - shared_ptr<object3> o3a (new object3 (make_pair (1, 1), 123)); - shared_ptr<object3> o3b (new object3 (make_pair (2, 2), 234)); - shared_ptr<object4> o4 (new object4 ("abc", o3a)); - - { - transaction t (db->begin ()); - db->persist (o3a); - db->persist (o3b); - db->persist (o4); - t.commit (); - } - - { - typedef odb::query<view2> query; - typedef odb::result<view2> result; - - transaction t (db->begin ()); - session s; - result r (db->query<view2> ("ORDER BY" + query::object3::n)); - result::iterator i (r.begin ()); - - assert (i != r.end ()); - { - const view2& v (*i); - assert (v.o3->n == 123 && v.o4->s == "abc" && v.o4->o3 == v.o3); - } - assert (++i != r.end ()); - { - const view2& v (*i); - assert (v.o3->n == 234 && !v.o4); - } - assert (++i == r.end ()); - t.commit (); - } - } - - // Test interaction with sections. - // - { - using namespace test6; - - shared_ptr<object1> o1 (new object1 (123)); - shared_ptr<object2> o2 (new object2 ("abc", o1)); - - { - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - view1 v (db->query_value<view1> ()); - - assert (v.o1->n == 123 && v.o2->s == "abc" && - !v.o2->r.loaded () && !v.o2->o1); - - db->load (*v.o2, v.o2->r); - assert (v.o2->r.loaded () && v.o2->o1 && v.o2->o1->n == 123); - - t.commit (); - } - } - - // Test explicit conversion to smart pointer member. - // - { - using namespace test7; - - object1 o1 (123); - object2 o2 ("abc", &o1); - - { - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - session s; - view1 v (db->query_value<view1> ()); - assert (v.o1->n == 123 && v.o2->s == "abc" && v.o2->o1 == v.o1.get ()); - t.commit (); - } - } - - // Test loading objects without id. - // - { - using namespace test8; - - object1 o1 (123); - object2 o2 ("abc", &o1); - - { - transaction t (db->begin ()); - db->persist (o1); - db->persist (o2); - t.commit (); - } - - { - transaction t (db->begin ()); - session s; - view1 v (db->query_value<view1> ()); - assert (v.o1->n == 123 && v.o2->s == "abc" && v.o2->o1 == v.o1.get ()); - t.commit (); - } - } - - // Test loading polymorphic objects. - // - { - using namespace test9; - - root r (1); - base b (2, "a"); - derived d (3, "b", true); - - { - transaction t (db->begin ()); - db->persist (r); - db->persist (b); - db->persist (d); - t.commit (); - } - - { - transaction t (db->begin ()); - - // Load via root. - // - { - view1r r (db->query_value<view1r> (query<view1r>::n == 1)); - auto& o (*r.o); - assert (r.n == 1 && r.o->n == 1 && typeid (o) == typeid (root)); - } - - { - view1r r (db->query_value<view1r> (query<view1r>::n == 2)); - auto& o (*r.o); - assert (r.n == 2 && r.o->n == 2 && typeid (o) == typeid (base)); - base& b (dynamic_cast<base&> (*r.o)); - assert (b.s == "a"); - } - - { - view1r r (db->query_value<view1r> (query<view1r>::n == 3)); - auto& o (*r.o); - assert (r.n == 3 && r.o->n == 3 && typeid (o) == typeid (derived)); - derived& d (dynamic_cast<derived&> (o)); - assert (d.s == "b" && d.b); - } - - // Load via base. - // - { - view1b r (db->query_value<view1b> (query<view1b>::n == 2)); - assert (r.s == "a" && r.n == 2 && r.o->n == 2 && b.s == "a"); - } - - { - view1b r (db->query_value<view1b> (query<view1b>::n == 3)); - auto& o (*r.o); - assert (r.s == "b" && r.n == 3 && r.o->n == 3 && - typeid (o) == typeid (derived)); - derived& d (dynamic_cast<derived&> (o)); - assert (d.s == "b" && d.b); - } - - // Load via derived. - // - { - view1d r (db->query_value<view1d> ()); - assert (r.s == "b" && r.n == 3 && - r.o->n == 3 && r.o->s == "b" && r.o->b); - } - - t.commit (); - } - } - } - catch (const odb::exception& e) - { - cerr << e.what () << endl; - return 1; - } -} diff --git a/common/view/olv/test1.hxx b/common/view/olv/test1.hxx deleted file mode 100644 index 0de9483..0000000 --- a/common/view/olv/test1.hxx +++ /dev/null @@ -1,116 +0,0 @@ -// file : common/view/olv/test1.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST1_HXX -#define TEST1_HXX - -#include <string> -#include <memory> // unique_ptr -#include <utility> // std::move - -#include <odb/core.hxx> - -// Test basic object loading functionality. -// -#pragma db namespace table("t1_") pointer(std::unique_ptr) -namespace test1 -{ - #pragma db object - struct object1 - { - object1 (int id_ = 0, int n_ = 0): id (id_), n (n_) {} - - #pragma db id - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 (int id_ = 0, const char* s_ = ""): id (id_), s (s_) {} - - #pragma db id - int id; - - std::string s; - }; - - #pragma db view object(object1) object(object2: object1::id == object2::id) - struct view1 - { - // VC12 workaround (no default move constructor generation). - // - view1 () {} - view1 (view1&& x): o2 (std::move (x.o2)) {} - - std::unique_ptr<object2> o2; - }; - - #pragma db view object(object1) object(object2: object1::id == object2::id) - struct view2 - { - // VC12 workaround (no default move constructor generation). - // - view2 () {} - view2 (view2&& x): o2 (std::move (x.o2)), o1 (std::move (x.o1)) {} - - std::unique_ptr<object2> o2; - std::unique_ptr<object1> o1; - }; - - #pragma db view object(object1 = o1) object(object2 = o2: o1::id == o2::id) - struct view3 - { - // VC12 workaround (no default move constructor generation). - // - view3 () {} - view3 (view3&& x): o1 (std::move (x.o1)), o2 (std::move (x.o2)) {} - - std::unique_ptr<object1> o1; - std::unique_ptr<object2> o2; - }; - - #pragma db view object(object1 = o1) object(object2 = o2: o1::id == o2::id) - struct view4 - { - // VC12 workaround (no default move constructor generation). - // - view4 () {} - view4 (view4&& x): s (std::move (x.s)), - o2 (std::move (x.o2)), - id (x.id), - o1 (std::move (x.o1)), - n (x.n) {} - - std::string s; - std::unique_ptr<object2> o2; - - #pragma db column(o1::id) - int id; - - std::unique_ptr<object1> o1; - int n; - }; - - #pragma db view \ - object(object1) \ - object(object2: object1::id == object2::id) \ - object(object1 = o1b: object1::id == o1b::n) - struct view5 - { - // VC12 workaround (no default move constructor generation). - // - view5 () {} - view5 (view5&& x): o1a (std::move (x.o1a)), - o2 (std::move (x.o2)), - o1b (std::move (x.o1b)) {} - - std::unique_ptr<object1> o1a; - std::unique_ptr<object2> o2; - std::unique_ptr<object1> o1b; - }; -} - -#endif // TEST1_HXX diff --git a/common/view/olv/test2.hxx b/common/view/olv/test2.hxx deleted file mode 100644 index a769daa..0000000 --- a/common/view/olv/test2.hxx +++ /dev/null @@ -1,122 +0,0 @@ -// file : common/view/olv/test2.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST2_HXX -#define TEST2_HXX - -#include <string> -#include <vector> -#include <memory> // shared_ptr - -#include <odb/core.hxx> - -// Test loading of object pointers inside objects. -// -#pragma db namespace table("t2_") pointer(std::shared_ptr) session -namespace test2 -{ - using std::shared_ptr; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 () {} - object2 (const char* s_, shared_ptr<object1> o1_): s (s_), o1 (o1_) {} - - #pragma db id auto - int id; - - std::string s; - shared_ptr<object1> o1; - }; - - #pragma db view object(object1) object(object2) - struct view1 - { - shared_ptr<object2> o2; - }; - - #pragma db view object(object1) object(object2) - struct view2 - { - shared_ptr<object2> o2; // "Unfortunate" order. - shared_ptr<object1> o1; - }; - - #pragma db object - struct object3 - { - object3 () {} - object3 (shared_ptr<object2> o2_): o2 (o2_) {} - - #pragma db id auto - int id; - - shared_ptr<object2> o2; - }; - - #pragma db view object(object1) object(object2) object(object3) - struct view3 - { - shared_ptr<object3> o3; // "Unfortunate" order. - shared_ptr<object1> o1; - }; - - #pragma db object - struct object4 - { - #pragma db id auto - int id; - - std::vector<shared_ptr<object2>> o2; - }; - - #pragma db view object(object4) - struct view4 - { - shared_ptr<object4> o4; - }; - - #pragma db view object(object4) object (object2) object(object1) - struct view5 - { - shared_ptr<object4> o4; // "Unfortunate" order. - shared_ptr<object1> o1; - }; - - #pragma db object - struct object5 - { - object5 () {} - object5 (shared_ptr<object1> o1_, shared_ptr<object2> o2_) - : o1 (o1_), o2 (o2_) {} - - #pragma db id auto - int id; - - shared_ptr<object1> o1; - shared_ptr<object2> o2; - }; - - #pragma db view object(object5) object (object2) \ - object(object1 = o1a: object2::o1) \ - object(object1 = o1b: object5::o1) - struct view6 - { - shared_ptr<object1> o1a; - shared_ptr<object1> o1b; - }; -} - -#endif // TEST2_HXX diff --git a/common/view/olv/test3.hxx b/common/view/olv/test3.hxx deleted file mode 100644 index 8cf4344..0000000 --- a/common/view/olv/test3.hxx +++ /dev/null @@ -1,106 +0,0 @@ -// file : common/view/olv/test3.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST3_HXX -#define TEST3_HXX - -#include <string> -#include <vector> -#include <memory> // shared_ptr - -#include <odb/core.hxx> -#include <odb/lazy-ptr.hxx> - -// Test JOINs for pointed-to objects, existing and automatically added. -// -#pragma db namespace table("t3_") pointer(std::shared_ptr) session -namespace test3 -{ - using std::shared_ptr; - - struct object2; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - - #pragma db inverse(o1) - odb::lazy_weak_ptr<object2> o2; - }; - - #pragma db object - struct object2 - { - object2 (const char* s_ = ""): s (s_) {} - - #pragma db id auto - int id; - - std::string s; - - shared_ptr<object1> o1; - }; - - #pragma db view object(object1) object(object2) - struct view1a // Existing JOIN. - { - shared_ptr<object1> o1; - }; - - #pragma db view object(object1) - struct view1b // Automatic JOIN. - { - shared_ptr<object1> o1; - }; - - // Container case. - // - struct object4; - - #pragma db object - struct object3 - { - object3 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - - #pragma db inverse(o3) - odb::lazy_weak_ptr<object4> o4; - }; - - #pragma db object - struct object4 - { - object4 (const char* s_ = ""): s (s_) {} - - #pragma db id auto - int id; - - std::string s; - - std::vector<shared_ptr<object3>> o3; - }; - - #pragma db view object(object3) object(object4 = o4) - struct view2a // Existing JOIN. - { - shared_ptr<object3> o3; - }; - - #pragma db view object(object3) - struct view2b // Automatic JOIN. - { - shared_ptr<object3> o3; - }; -} - -#endif // TEST3_HXX diff --git a/common/view/olv/test4.hxx b/common/view/olv/test4.hxx deleted file mode 100644 index f2af5fd..0000000 --- a/common/view/olv/test4.hxx +++ /dev/null @@ -1,151 +0,0 @@ -// file : common/view/olv/test4.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST4_HXX -#define TEST4_HXX - -#include <string> -#include <memory> // shared_ptr - -#include <odb/core.hxx> - -// Test by-value load. -// -#pragma db namespace table("t4_") session -namespace test4 -{ - #pragma db object - struct object1 - { - object1 (int id_ = 0, int n_ = 0): id (id_), n (n_) {} - - #pragma db id - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 (int id_ = 0, const char* s_ = "", object1* o1_ = 0) - : id (id_), s (s_), o1 (o1_) {} - - #pragma db id - int id; - - std::string s; - object1* o1; // Shallow copy. - }; - - typedef object1* object1_ptr; - typedef object2* object2_ptr; - - #pragma db view object(object1) - struct view1 - { - #pragma db member(o1_) virtual(object1_ptr) get(&this.o1) set() - - #pragma db transient - object1 o1; - }; - - #pragma db view object(object1) transient - struct view1a - { - view1a (): o1_null (true) {} - - #pragma db member(o1_) virtual(object1_ptr) get(&this.o1) \ - set(this.o1_null = !(?)) - - object1 o1; - bool o1_null; - }; - - #pragma db view object(object1) - struct view1b - { - view1b (): o1_p (0) {} - - #pragma db transient - object1 o1; - - #pragma db get(&this.o1) set(o1_p = (?)) - object1* o1_p; - }; - - #pragma db view object(object1) - struct view1c - { - view1c (object1& o1): o1_p (&o1) {} - - object1* o1_p; - }; - - #pragma db view object(object1) object(object2) transient - struct view2 - { - #pragma db member(o2_) virtual(object2_ptr) get(&this.o2) set() - #pragma db member(o1_) virtual(object1_ptr) get(&this.o1) set() - - object1 o1; - object2 o2; - }; - - #pragma db view object(object1) object(object2) transient - struct view2a - { - #pragma db member(o2_) virtual(object2_ptr) get(&this.o2) \ - set(o2_null = !(?)) - #pragma db member(o1_) virtual(object1_ptr) get(&this.o1) set() - - object1 o1; - object2 o2; - bool o2_null; - }; - - // Test loading into raw pointer with non-raw object pointer. - // - using std::shared_ptr; - - #pragma db object pointer(shared_ptr) - struct object3 - { - object3 (int id_ = 0, int n_ = 0): id (id_), n (n_) {} - - #pragma db id - int id; - - int n; - }; - - #pragma db view object(object3) - struct view3 - { - // This view implements the following slightly twisted logic: if the - // object is already in the cache, then set o3_p to that. Otherwise, - // load it into the by-value instance. We can also check whether o3_p - // points to o3 to distinguish between the two outcomes. - // - - // Since we may be getting the pointer as both smart and raw, we - // need to create a bit of support code to use in the modifier - // expression. - // - void set_o3 (object3* p) {o3_p = p;} // &o3 or NULL. - void set_o3 (shared_ptr<object3> p) {o3_p = p.get ();} // From cache. - - #pragma db get(&this.o3) set(set_o3(?)) - object3* o3_p; - - #pragma db transient - object3 o3; - - // Return-by-value support (query_value()). - // - view3 (): o3_p (0) {} - view3 (const view3& x): o3_p (x.o3_p == &x.o3 ? &o3 : x.o3_p), o3 (x.o3) {} - }; -} - -#endif // TEST4_HXX diff --git a/common/view/olv/test5.hxx b/common/view/olv/test5.hxx deleted file mode 100644 index e3a671b..0000000 --- a/common/view/olv/test5.hxx +++ /dev/null @@ -1,86 +0,0 @@ -// file : common/view/olv/test5.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST5_HXX -#define TEST5_HXX - -#include <string> -#include <memory> // shared_ptr -#include <utility> // pair - -#include <odb/core.hxx> - -// Test NULL object pointers. -// -#pragma db namespace table("t5_") pointer(std::shared_ptr) session -namespace test5 -{ - using std::shared_ptr; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 () {} - object2 (const char* s_, shared_ptr<object1> o1_): s (s_), o1 (o1_) {} - - #pragma db id auto - int id; - - std::string s; - shared_ptr<object1> o1; - }; - - #pragma db view object(object1) object(object2) - struct view1 - { - shared_ptr<object1> o1; - shared_ptr<object2> o2; - }; - - typedef std::pair<int, int> comp_id; - #pragma db value(comp_id) - - #pragma db object - struct object3 - { - object3 (comp_id id_ = comp_id (), int n_ = 0): id (id_), n (n_) {} - - #pragma db id - comp_id id; - - int n; - }; - - #pragma db object - struct object4 - { - object4 () {} - object4 (const char* s_, shared_ptr<object3> o3_): s (s_), o3 (o3_) {} - - #pragma db id auto - int id; - - std::string s; - shared_ptr<object3> o3; - }; - - #pragma db view object(object3) object(object4) - struct view2 - { - shared_ptr<object4> o4; - shared_ptr<object3> o3; - }; -} - -#endif // TEST5_HXX diff --git a/common/view/olv/test6.hxx b/common/view/olv/test6.hxx deleted file mode 100644 index 5336fa6..0000000 --- a/common/view/olv/test6.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// file : common/view/olv/test6.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST6_HXX -#define TEST6_HXX - -#include <string> -#include <memory> // shared_ptr - -#include <odb/core.hxx> -#include <odb/section.hxx> - -// Test interaction with sections. -// -#pragma db namespace table("t6_") pointer(std::shared_ptr) -namespace test6 -{ - using std::shared_ptr; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 () {} - object2 (const char* s_, shared_ptr<object1> o1_): s (s_), o1 (o1_) {} - - #pragma db id auto - int id; - - std::string s; - - #pragma db load(lazy) - odb::section r; - - #pragma db section(r) - shared_ptr<object1> o1; - }; - - #pragma db view object(object1) object(object2) - struct view1 - { - shared_ptr<object1> o1; - shared_ptr<object2> o2; - }; -} - -#endif // TEST6_HXX diff --git a/common/view/olv/test7.hxx b/common/view/olv/test7.hxx deleted file mode 100644 index dbdc663..0000000 --- a/common/view/olv/test7.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// file : common/view/olv/test7.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST7_HXX -#define TEST7_HXX - -#include <string> -#include <memory> // unique_ptr -#include <utility> // std::move - -#include <odb/core.hxx> - -// Test explicit conversion to smart pointer member. -// -#pragma db namespace table("t7_") pointer(*) session -namespace test7 -{ - using std::unique_ptr; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object - struct object2 - { - object2 () {} - object2 (const char* s_, object1* o1_): s (s_), o1 (o1_) {} - - #pragma db id auto - int id; - - std::string s; - object1* o1; // Shallow. - }; - - #pragma db view object(object1) object(object2) - struct view1 - { - // VC12 workaround (no default move constructor generation). - // - view1 () {} - view1 (view1&& x): o2 (std::move (x.o2)), o1 (std::move (x.o1)) {} - - unique_ptr<object2> o2; - unique_ptr<object1> o1; - }; -} - -#endif // TEST7_HXX diff --git a/common/view/olv/test8.hxx b/common/view/olv/test8.hxx deleted file mode 100644 index 607d222..0000000 --- a/common/view/olv/test8.hxx +++ /dev/null @@ -1,54 +0,0 @@ -// file : common/view/olv/test8.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST8_HXX -#define TEST8_HXX - -#include <string> -#include <memory> // unique_ptr -#include <utility> // std::move - -#include <odb/core.hxx> - -// Test loading objects without id. -// -#pragma db namespace table("t8_") pointer(*) session -namespace test8 -{ - using std::unique_ptr; - - #pragma db object - struct object1 - { - object1 (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object no_id - struct object2 - { - object2 () {} - object2 (const char* s_, object1* o1_): s (s_), o1 (o1_) {} - - std::string s; - object1* o1; // Shallow. - }; - - #pragma db view object(object1) object(object2) - struct view1 - { - // VC12 workaround (no default move constructor generation). - // - view1 () {} - view1 (view1&& x): o2 (std::move (x.o2)), o1 (std::move (x.o1)) {} - - unique_ptr<object2> o2; - unique_ptr<object1> o1; - }; -} - -#endif // TEST8_HXX diff --git a/common/view/olv/test9.hxx b/common/view/olv/test9.hxx deleted file mode 100644 index b109de3..0000000 --- a/common/view/olv/test9.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : common/view/olv/test9.hxx -// license : GNU GPL v2; see accompanying LICENSE file - -#ifndef TEST9_HXX -#define TEST9_HXX - -#include <string> -#include <memory> // shared_ptr - -#include <odb/core.hxx> - -// Test loading polymorphic objects. -// -#pragma db namespace table("t9_") session -namespace test9 -{ - using std::shared_ptr; - - #pragma db object polymorphic pointer(shared_ptr) - struct root - { - virtual ~root () {} - root (int n_ = 0): n (n_) {} - - #pragma db id auto - int id; - - int n; - }; - - #pragma db object - struct base: root - { - base (int n_ = 0, const char* s_ = ""): root (n_), s (s_) {} - - std::string s; - }; - - #pragma db object - struct derived: base - { - derived (int n_ = 0, const char* s_ = "", bool b_ = false) - : base (n_, s_), b (b_) {} - - bool b; - }; - - // Load via root. - // - #pragma db view object(root) - struct view1r - { - shared_ptr<root> o; - int n; - }; - - // Load via base. - // - #pragma db view object(base) - struct view1b - { - std::string s; - shared_ptr<base> o; - int n; - }; - - // Load via derived. - // - #pragma db view object(derived) - struct view1d - { - std::string s; - shared_ptr<derived> o; - int n; - }; -} - -#endif // TEST9_HXX diff --git a/common/view/olv/testscript b/common/view/olv/testscript deleted file mode 100644 index 160426d..0000000 --- a/common/view/olv/testscript +++ /dev/null @@ -1,39 +0,0 @@ -# file : common/view/olv/testscript -# license : GNU GPL v2; see accompanying LICENSE file - -.include ../../../database-options.testscript - -: mysql -: -if $mysql -{ - .include ../../../mysql-schema.testscript - - for s: $schemas - cat $out_base/"$s"($multi ? '-mysql' : '').sql | $create_schema_cmd - end; - - $* ($multi ? 'mysql' : ) $mysql_options -} - -: sqlite -: -if $sqlite -{ - .include ../../../sqlite.testscript - - $* -} - -: pgsql -: -if $pgsql -{ - .include ../../../pgsql-schema.testscript - - for s: $schemas - $create_schema_cmd -f $out_base/"$s"($multi ? '-pgsql' : '').sql - end; - - $* ($multi ? 'pgsql' : ) $pgsql_options -} |