summaryrefslogtreecommitdiff
path: root/odb/relational/model.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/relational/model.hxx')
-rw-r--r--odb/relational/model.hxx18
1 files changed, 12 insertions, 6 deletions
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<sema_rel::foreign_key> (
- id,
- table_name (c),
- true)); // deferred
+ bool deferred (m.get<bool> ("deferred", true));
+ foreign_key::action on_delete (
+ m.get<foreign_key::action> ("on-delete", foreign_key::no_action));
+
+ foreign_key& fk (
+ model_.new_node<foreign_key> (
+ id, table_name (c), deferred, on_delete));
fk.set ("cxx-node", static_cast<semantics::node*> (&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));