diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2014-12-15 13:52:26 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2014-12-15 13:52:26 +0200 |
commit | 32f09571e564c42c04acdba2cf139a507aa4b0da (patch) | |
tree | 557a104cf5098512fec7e9e8ac9b355cc0237fab /common/inheritance/polymorphism | |
parent | 59e3ebcafb1dc4d54484143fc926ef8377bdb154 (diff) |
Fix bug in id-based custom view join of polymorphic objects
See email from Mikhail.Tomilov@infotecs.ru/12-Dec-2014.
Diffstat (limited to 'common/inheritance/polymorphism')
-rw-r--r-- | common/inheritance/polymorphism/driver.cxx | 16 | ||||
-rw-r--r-- | common/inheritance/polymorphism/test4.hxx | 9 |
2 files changed, 25 insertions, 0 deletions
diff --git a/common/inheritance/polymorphism/driver.cxx b/common/inheritance/polymorphism/driver.cxx index 672473c..d4509a4 100644 --- a/common/inheritance/polymorphism/driver.cxx +++ b/common/inheritance/polymorphism/driver.cxx @@ -968,6 +968,22 @@ main (int argc, char* argv[]) t.commit (); } + + { + typedef odb::result<view3> result; + + transaction t (db->begin ()); + + { + result qr (db->query<view3> ()); + result::iterator i (qr.begin ()), e (qr.end ()); + + assert (i != e && i->str == "abc"); + assert (++i == e); + } + + t.commit (); + } } // Test 5: polymorphism and optimistic concurrency. diff --git a/common/inheritance/polymorphism/test4.hxx b/common/inheritance/polymorphism/test4.hxx index 0bd53bd..5c4ae2f 100644 --- a/common/inheritance/polymorphism/test4.hxx +++ b/common/inheritance/polymorphism/test4.hxx @@ -71,6 +71,15 @@ namespace test4 #pragma db column("min(" + base2::num + ")") unsigned long min_num; }; + + // Test custom join condition that uses object id. It cannot come + // from the base since the base table hasn't been join'ed yet. + // + #pragma db view object(base1) object(base2: base2::id == base1::id) + struct view3 + { + std::string str; + }; } #endif // TEST4_HXX |