summaryrefslogtreecommitdiff
path: root/odb-tests
diff options
context:
space:
mode:
Diffstat (limited to 'odb-tests')
-rw-r--r--odb-tests/build/root.build18
-rw-r--r--odb-tests/common/circular/buildfile9
-rw-r--r--odb-tests/common/query/array/driver.cxx20
-rw-r--r--odb-tests/common/view/basics/buildfile3
-rw-r--r--odb-tests/common/view/basics/driver.cxx16
-rw-r--r--odb-tests/common/view/basics/test.hxx30
-rw-r--r--odb-tests/common/view/olv/driver.cxx10
-rw-r--r--odb-tests/common/view/olv/test4.hxx23
8 files changed, 43 insertions, 86 deletions
diff --git a/odb-tests/build/root.build b/odb-tests/build/root.build
index 27552ac..41f0556 100644
--- a/odb-tests/build/root.build
+++ b/odb-tests/build/root.build
@@ -176,24 +176,6 @@ if! $skeleton
}
}
- # @@ BUILD2 Clang issues the following warnings while compile the
- # odb-generated headers:
- #
- # In file included from odb-tests/common/view/olv/test1-odb-sqlite.cxx:10:
- # odb-tests/common/view/olv/test1-odb-sqlite.hxx:68:80: warning: instantiation of variable 'odb::query_columns<test1::object1, odb::id_common, odb::access::object_traits_impl< ::test1::object1, id_common>>::id' required here, but no definition is available [-Wundefined-var-template]
- # 68 | id (query_columns< ::test1::object1, id_common, typename A::common_traits >::id,
- # | ^
- # odb-tests/common/view/olv/test1-odb.hxx:91:21: note: forward declaration of template entity is here
- # 91 | static id_type_ id;
- # | ^
- # odb-tests/common/view/olv/test1-odb-sqlite.hxx:68:80: note: add an explicit instantiation declaration to suppress this warning if 'odb::query_columns<test1::object1, odb::id_common, odb::access::object_traits_impl< ::test1::object1, id_common>>::id' is explicitly instantiated in another translation unit
- # 68 | id (query_columns< ::test1::object1, id_common, typename A::common_traits >::id,
- #
- # Note: -Wno-undefined-var-template is temporarily added to suppress them.
- #
- if ($cxx.id.type == 'clang')
- cxx.coptions += -Wno-undefined-var-template
-
# Import odb that we are testing.
#
import! [metadata] odb = odb%exe{odb}
diff --git a/odb-tests/common/circular/buildfile b/odb-tests/common/circular/buildfile
new file mode 100644
index 0000000..2e793b9
--- /dev/null
+++ b/odb-tests/common/circular/buildfile
@@ -0,0 +1,9 @@
+# file : common/circular/buildfile
+# license : GNU GPL v2; see accompanying LICENSE file
+
+./: {*/ -multiple/}
+
+# We cannot support this case in multi-database support since we need to
+# generate extern template involving classes that participate in the cycle.
+#
+./: multiple/: include = (!$multi)
diff --git a/odb-tests/common/query/array/driver.cxx b/odb-tests/common/query/array/driver.cxx
index 9327751..43d91f2 100644
--- a/odb-tests/common/query/array/driver.cxx
+++ b/odb-tests/common/query/array/driver.cxx
@@ -143,27 +143,7 @@ main (int argc, char* argv[])
assert (size (db->query<object> ("s = " + query::_ref (s))) == 1);
#endif
- // @@ BUILD2 Ends up with the following warning, but strangely only in the
- // multi-database mode:
- //
- // In file included from odb/odb-tests/common/query/array/test-odb.hxx:31,
- // from odb/odb-tests/common/query/array/driver.cxx:20:
- // odb/libodb/odb/query-dynamic.hxx: In instantiation of ‘odb::query_base odb::query_column<T>::operator==(const odb::query_column<T2>&) const [with T2 = char [17]; T = char [17]]’:
- // odb/odb-tests/common/query/array/driver.cxx:144:7: required from here
- // odb/libodb/odb/query-dynamic.hxx:895:43: error: comparison between two arrays is deprecated in C++20 [-Werror=array-compare]
- // 895 | (void) (sizeof (type_instance<T> () == type_instance<T2> ()));
- // | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
- // odb/libodb/odb/query-dynamic.hxx:895:43: note: use unary ‘+’ which decays operands to pointers or ‘&‘indirect_ref’ not supported by dump_decl<declaration error>[0] == &‘indirect_ref’ not supported by dump_decl<declaration error>[0]’ to compare the addresses
- //
- // Looks like compile-time assertion. Doesn't make much sense for
- // arrays since compares pointers to objects rather than objects.
- // Should we somehow suppress the assertion for arrays or similar?
- //
- // Note: temporarily ifndef-ed.
- //
-#ifndef MULTI_DATABASE
assert (size (db->query<object> (query::s == query::s1)) == 3);
-#endif
// std::array
//
diff --git a/odb-tests/common/view/basics/buildfile b/odb-tests/common/view/basics/buildfile
index d9738a4..2cccab2 100644
--- a/odb-tests/common/view/basics/buildfile
+++ b/odb-tests/common/view/basics/buildfile
@@ -35,6 +35,9 @@ odb_options = --table-prefix t_view_b_ \
--generate-query \
--generate-prepared
+if $multi
+ odb_options += -DMULTI_DATABASE
+
cxx.poptions =+ "-I$out_base" "-I$src_base"
# Testscript's run-time prerequisites.
diff --git a/odb-tests/common/view/basics/driver.cxx b/odb-tests/common/view/basics/driver.cxx
index e2f611a..419b29d 100644
--- a/odb-tests/common/view/basics/driver.cxx
+++ b/odb-tests/common/view/basics/driver.cxx
@@ -721,12 +721,7 @@ main (int argc, char* argv[])
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)
+#if !defined(DATABASE_SQLITE) && !defined(MULTI_DATABASE)
{
typedef odb::query<vright> query;
typedef odb::result<vright> result;
@@ -743,12 +738,9 @@ main (int argc, char* argv[])
}
#endif
- // @@ BUILD2 Also disable for DATABASE_PGSQL (see vfull definition for
- // details).
- //
-#if !defined(DATABASE_MYSQL) && \
- !defined(DATABASE_SQLITE) && \
- !defined(DATABASE_PGSQL)
+#if !defined(DATABASE_SQLITE) && \
+ !defined(DATABASE_MYSQL) && \
+ !defined(MULTI_DATABASE)
{
typedef odb::query<vfull> query;
typedef odb::result<vfull> result;
diff --git a/odb-tests/common/view/basics/test.hxx b/odb-tests/common/view/basics/test.hxx
index 130bcd4..25c502b 100644
--- a/odb-tests/common/view/basics/test.hxx
+++ b/odb-tests/common/view/basics/test.hxx
@@ -543,18 +543,7 @@ namespace test2
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)
+#if !defined(ODB_DATABASE_SQLITE) && !defined(MULTI_DATABASE)
#pragma db view object(obj2 = o2) object(obj1 = o1 right: o2::n == o1::n)
struct vright
@@ -565,22 +554,9 @@ namespace test2
#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) && \
+#if !defined(ODB_DATABASE_MYSQL) && \
!defined(ODB_DATABASE_SQLITE) && \
- !defined(ODB_DATABASE_PGSQL) && \
- !defined(ODB_DATABASE_COMMON)
+ !defined(MULTI_DATABASE)
#pragma db view object(obj1 = o1) object(obj2 = o2 full: o1::n == o2::n)
struct vfull
diff --git a/odb-tests/common/view/olv/driver.cxx b/odb-tests/common/view/olv/driver.cxx
index c08015e..77cf76e 100644
--- a/odb-tests/common/view/olv/driver.cxx
+++ b/odb-tests/common/view/olv/driver.cxx
@@ -367,15 +367,7 @@ main (int argc, char* argv[])
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");
+ assert (v.o1.n == 123 && v.o2.s == "abc" && v.o2.o1 == &v.o1);
t.commit ();
}
diff --git a/odb-tests/common/view/olv/test4.hxx b/odb-tests/common/view/olv/test4.hxx
index f2af5fd..4d8b804 100644
--- a/odb-tests/common/view/olv/test4.hxx
+++ b/odb-tests/common/view/olv/test4.hxx
@@ -6,6 +6,7 @@
#include <string>
#include <memory> // shared_ptr
+#include <cassert>
#include <odb/core.hxx>
@@ -90,6 +91,17 @@ namespace test4
object1 o1;
object2 o2;
+
+ view2 () {}
+ view2 (const view2& v)
+ : o1 (v.o1), o2 (v.o2)
+ {
+ if (v.o2.o1 != 0)
+ {
+ assert (v.o2.o1 == &v.o1);
+ o2.o1 = &o1;
+ }
+ }
};
#pragma db view object(object1) object(object2) transient
@@ -102,6 +114,17 @@ namespace test4
object1 o1;
object2 o2;
bool o2_null;
+
+ view2a () {}
+ view2a (const view2a& v)
+ : o1 (v.o1), o2 (v.o2)
+ {
+ if (v.o2.o1 != 0)
+ {
+ assert (v.o2.o1 == &v.o1);
+ o2.o1 = &o1;
+ }
+ }
};
// Test loading into raw pointer with non-raw object pointer.