From 8d89bf37dd4ef3cb7373e1841ff57a53916fff0d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 21 Mar 2012 08:36:21 +0200 Subject: Polymorphic inheritance support --- odb/relational/model.hxx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'odb/relational/model.hxx') diff --git a/odb/relational/model.hxx b/odb/relational/model.hxx index 66db3d6..afaa90d 100644 --- a/odb/relational/model.hxx +++ b/odb/relational/model.hxx @@ -218,6 +218,7 @@ namespace relational traverse_pointer (semantics::data_member& m, semantics::class_& c) { using sema_rel::column; + using sema_rel::foreign_key; // Ignore inverse object pointers. // @@ -227,11 +228,13 @@ namespace relational string id (id_prefix_ + (key_prefix_.empty () ? m.name () : key_prefix_)); - sema_rel::foreign_key& fk ( - model_.new_node ( - id, - table_name (c), - true)); // deferred + bool deferred (m.get ("deferred", true)); + foreign_key::action on_delete ( + m.get ("on-delete", foreign_key::no_action)); + + foreign_key& fk ( + model_.new_node ( + id, table_name (c), deferred, on_delete)); fk.set ("cxx-node", static_cast (&m)); @@ -529,7 +532,10 @@ namespace relational if (class_file (c) != unit.file ()) return; - if (!object (c) || abstract (c)) + if (!object (c)) + return; + + if (abstract (c) && !polymorphic (c)) return; qname const& name (table_name (c)); -- cgit v1.1