From 32f09571e564c42c04acdba2cf139a507aa4b0da Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 15 Dec 2014 13:52:26 +0200 Subject: Fix bug in id-based custom view join of polymorphic objects See email from Mikhail.Tomilov@infotecs.ru/12-Dec-2014. --- common/inheritance/polymorphism/driver.cxx | 16 ++++++++++++++++ common/inheritance/polymorphism/test4.hxx | 9 +++++++++ 2 files changed, 25 insertions(+) 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 result; + + transaction t (db->begin ()); + + { + result qr (db->query ()); + 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 -- cgit v1.1