diff options
Diffstat (limited to 'odb-tests')
-rw-r--r-- | odb-tests/build/root.build | 18 | ||||
-rw-r--r-- | odb-tests/common/circular/buildfile | 9 | ||||
-rw-r--r-- | odb-tests/common/query/array/driver.cxx | 20 | ||||
-rw-r--r-- | odb-tests/common/view/basics/buildfile | 3 | ||||
-rw-r--r-- | odb-tests/common/view/basics/driver.cxx | 16 | ||||
-rw-r--r-- | odb-tests/common/view/basics/test.hxx | 30 | ||||
-rw-r--r-- | odb-tests/common/view/olv/driver.cxx | 10 | ||||
-rw-r--r-- | odb-tests/common/view/olv/test4.hxx | 23 |
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. |