From 635d11d74cd873e6f53d05b1d9f091ae112402a5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 23 Apr 2012 16:48:03 +0200 Subject: Polymorphic inheritance support --- common/inheritance/driver.cxx | 17 +++++++++++++++++ common/inheritance/test.hxx | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'common/inheritance') diff --git a/common/inheritance/driver.cxx b/common/inheritance/driver.cxx index a0e3725..466ed33 100644 --- a/common/inheritance/driver.cxx +++ b/common/inheritance/driver.cxx @@ -161,6 +161,23 @@ main (int argc, char* argv[]) t.commit (); } + + // views + // + { + typedef odb::query query; + typedef odb::result result; + + transaction t (db->begin ()); + + result r (db->query (query::num == o2.num_)); + result::iterator i (r.begin ()); + assert (i != r.end () && + i->num == o2.num_ && i->id == o2.id_ && i->str == o2.str_); + assert (++i == r.end ()); + + t.commit (); + } } catch (const odb::exception& e) { diff --git a/common/inheritance/test.hxx b/common/inheritance/test.hxx index d679c46..6059337 100644 --- a/common/inheritance/test.hxx +++ b/common/inheritance/test.hxx @@ -90,7 +90,7 @@ struct object1: base #pragma db object struct object2: base { - #pragma db column ("derived_str") + #pragma db column("derived_str") std::string str_; bool @@ -145,4 +145,14 @@ struct empty: base { }; +// View based on the derived object. +// +#pragma db view object(object2) +struct object2_view +{ + unsigned int num; // from abstract_base + unsigned long id; // from base + std::string str; // from object2, hides one from abstract_base +}; + #endif // TEST_HXX -- cgit v1.1