[odb-users] Query only intermediate polymorphic objects
Boris Kolpackov
boris at codesynthesis.com
Thu Nov 9 10:29:53 EST 2017
Dieter Govaerts <dieter.govaerts at bricsys.com> writes:
> Base (abstract)
> |
> +- DerivedA
> |
> +- DerivedB
>
> How can I query (with and without view) only the objects of type "DerivedA"?
>
> For example, I would like to query all ids of objects of type DerivedA but
> not of type DerivedB:
>
> #pragma db view object(DerivedA)
> struct DerivedAIdView
> {
> unsigned id;
> };
>
> odb::result<DerivedAIdView> r(db()->query<DerivedAIdView>());
At the end of Section 8.2, "Polymorphism Inheritance" there is this
sentence:
"Currently, the discriminator column is always called typeid and
contains a namespace-qualified class name (for example, 'employee'
or 'hr::employee')."
This is undocumented, but that column is also available in the
query object and is called 'typeid_'. You can use this information
to restrict the types of objects you are getting, for example:
using DerivedAIdQuery = odb::query<DerivedAIdView>
odb::result<DerivedAIdView> r(
db()->query<DerivedAIdView>(
DerivedAIdQuery::typeid_ == "DerivedA"));
Boris
More information about the odb-users
mailing list