summaryrefslogtreecommitdiff
path: root/common/view
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2024-01-25 20:32:06 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2024-01-25 20:32:06 +0300
commit0d49ea1fe08cf1eab41a00149393a291c65a59d7 (patch)
tree0391eb09309ca95282e200516937e64d89f3e1bb /common/view
parentfc3fb39c90ab7fe5fccbe3f3bc0eb2645157bb96 (diff)
Turn odb-tests repository into package for muti-package repositoryodb-tests
Diffstat (limited to 'common/view')
-rw-r--r--common/view/basics/buildfile42
-rw-r--r--common/view/basics/driver.cxx846
-rw-r--r--common/view/basics/test.hxx640
-rw-r--r--common/view/basics/testscript33
-rw-r--r--common/view/olv/.gitignore46
-rw-r--r--common/view/olv/buildfile50
-rw-r--r--common/view/olv/driver.cxx654
-rw-r--r--common/view/olv/test1.hxx116
-rw-r--r--common/view/olv/test2.hxx122
-rw-r--r--common/view/olv/test3.hxx106
-rw-r--r--common/view/olv/test4.hxx151
-rw-r--r--common/view/olv/test5.hxx86
-rw-r--r--common/view/olv/test6.hxx57
-rw-r--r--common/view/olv/test7.hxx57
-rw-r--r--common/view/olv/test8.hxx54
-rw-r--r--common/view/olv/test9.hxx78
-rw-r--r--common/view/olv/testscript39
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
-}