summaryrefslogtreecommitdiff
path: root/odb/relational/schema.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-04-03 11:22:42 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-04-10 18:46:44 +0200
commitb0391e168b489811708ca7ba5f71a0eb67b46ffe (patch)
treece15fb5ce0998ec27696152054609bb5dd4f45c3 /odb/relational/schema.cxx
parente356a9112750e836197a8545bcf6cedad0c1ebe1 (diff)
Generate add/drop table migration statements
Diffstat (limited to 'odb/relational/schema.cxx')
-rw-r--r--odb/relational/schema.cxx52
1 files changed, 52 insertions, 0 deletions
diff --git a/odb/relational/schema.cxx b/odb/relational/schema.cxx
index 492c3b7..e764790 100644
--- a/odb/relational/schema.cxx
+++ b/odb/relational/schema.cxx
@@ -86,5 +86,57 @@ namespace relational
model->traverse (*ctx.model);
}
}
+
+ void
+ generate_migrate_pre (sema_rel::changeset& cs)
+ {
+ context ctx;
+ instance<sql_emitter> em;
+ emitter_ostream emos (*em);
+
+ schema_format f (schema_format::sql);
+
+ instance<migrate_pre_changeset> changeset (*em, emos, f);
+ instance<create_table> ctable (*em, emos, f);
+ trav_rel::qnames names;
+
+ changeset >> names >> ctable;
+
+ // Pass 1 and 2.
+ //
+ for (unsigned short pass (1); pass < 3; ++pass)
+ {
+ changeset->pass (pass);
+ ctable->pass (pass);
+
+ changeset->traverse (cs);
+ }
+ }
+
+ void
+ generate_migrate_post (sema_rel::changeset& cs)
+ {
+ context ctx;
+ instance<sql_emitter> em;
+ emitter_ostream emos (*em);
+
+ schema_format f (schema_format::sql);
+
+ instance<migrate_post_changeset> changeset (*em, emos, f);
+ instance<drop_table> dtable (*em, emos, f);
+ trav_rel::qnames names;
+
+ changeset >> names >> dtable;
+
+ // Pass 1 and 2.
+ //
+ for (unsigned short pass (1); pass < 3; ++pass)
+ {
+ changeset->pass (pass);
+ dtable->pass (pass);
+
+ changeset->traverse (cs);
+ }
+ }
}
}