aboutsummaryrefslogtreecommitdiff
path: root/common/inheritance/polymorphism
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-12-15 13:52:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-12-15 13:52:26 +0200
commit32f09571e564c42c04acdba2cf139a507aa4b0da (patch)
tree557a104cf5098512fec7e9e8ac9b355cc0237fab /common/inheritance/polymorphism
parent59e3ebcafb1dc4d54484143fc926ef8377bdb154 (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.cxx16
-rw-r--r--common/inheritance/polymorphism/test4.hxx9
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