aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-06-22 15:55:34 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-06-22 15:55:34 +0200
commite783a1120b174bac40697000d218796ddf421dfe (patch)
tree452a73738b7298bfa0d8e5dc8bb47b7e620f868d
parentaf920242360734b5bedb63925067daa3c7404dc8 (diff)
Handle ON DELETE and DEFERRABLE in special SQLite migration code
-rw-r--r--odb/relational/sqlite/schema.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/odb/relational/sqlite/schema.cxx b/odb/relational/sqlite/schema.cxx
index 649f8e0..6d1885b 100644
--- a/odb/relational/sqlite/schema.cxx
+++ b/odb/relational/sqlite/schema.cxx
@@ -187,6 +187,21 @@ namespace relational
os << " CONSTRAINT " << quote_id (afk->name ()) << " REFERENCES " <<
quote_id (afk->referenced_table ().uname ()) << " (" <<
quote_id (afk->referenced_columns ()[0]) << ")";
+
+ bool del (afk->on_delete () != sema_rel::foreign_key::no_action);
+ bool def (!afk->not_deferrable ());
+
+ if (del || def)
+ {
+ instance<relational::create_foreign_key> cfk (*this);
+
+ if (del)
+ cfk->on_delete (afk->on_delete ());
+
+ if (def)
+ cfk->deferrable (afk->deferrable ());
+ }
+
afk->set ("sqlite-fk-defined", true); // Mark it as defined.
}