From b0c2c30dd0b83ea67fb2c8375ae2061dad0d1770 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 9 Apr 2013 16:17:27 +0200 Subject: Add support for embedded schema migration --- evolution/alter-column/driver.cxx | 32 +++++++++++++++++++++++++++++++- evolution/alter-column/makefile | 9 +++++---- evolution/alter-column/model.hxx | 6 ++++++ 3 files changed, 42 insertions(+), 5 deletions(-) (limited to 'evolution/alter-column') diff --git a/evolution/alter-column/driver.cxx b/evolution/alter-column/driver.cxx index 193289f..976f539 100644 --- a/evolution/alter-column/driver.cxx +++ b/evolution/alter-column/driver.cxx @@ -11,6 +11,7 @@ #include #include +#include #include @@ -27,7 +28,12 @@ main (int argc, char* argv[]) { try { - auto_ptr db (create_database (argc, argv)); + auto_ptr db (create_database (argc, argv, false)); + + // SQLite doesn't support altering of columns. + // +#ifndef DATABASE_SQLITE + bool embedded (schema_catalog::exists (*db, "test2")); // 1 - base version // 2 - migration @@ -41,6 +47,15 @@ main (int argc, char* argv[]) { using namespace v2; + if (embedded) + { + transaction t (db->begin ()); + schema_catalog::create_schema (*db, "test2"); + schema_catalog::create_schema (*db, "test1"); + schema_catalog::migrate_schema (*db, 2, "test2"); + t.commit (); + } + object o (1); o.num = 123; @@ -55,6 +70,13 @@ main (int argc, char* argv[]) { using namespace v3; + if (embedded) + { + transaction t (db->begin ()); + schema_catalog::migrate_schema_pre (*db, 3, "test2"); + t.commit (); + } + // NULL is already in effect; NOT NULL is not yet. // { @@ -74,6 +96,13 @@ main (int argc, char* argv[]) t.commit (); } + + if (embedded) + { + transaction t (db->begin ()); + schema_catalog::migrate_schema_post (*db, 3, "test2"); + t.commit (); + } break; } case 3: @@ -122,6 +151,7 @@ main (int argc, char* argv[]) return 1; } } +#endif // DATABASE_SQLITE } catch (const odb::exception& e) { diff --git a/evolution/alter-column/makefile b/evolution/alter-column/makefile index fffbef8..de0d3e0 100644 --- a/evolution/alter-column/makefile +++ b/evolution/alter-column/makefile @@ -29,15 +29,16 @@ $(driver): $(cxx_obj) $(common.l) $(cxx_obj) $(cxx_od): cpp_options := -I$(out_base) -I$(src_base) $(cxx_obj) $(cxx_od): $(common.l.cpp-options) -genf1 := test1-odb.hxx test1-odb.ixx test1-odb.cxx test1.sql model.xml +genf1 := test1-odb.hxx test1-odb.ixx test1-odb.cxx model.xml gen1 := $(addprefix $(out_base)/,$(genf1)) -genf2 := test2-odb.hxx test2-odb.ixx test2-odb.cxx test2.sql \ -test2-002-pre.sql test2-002-post.sql test2-003-pre.sql test2-003-post.sql +genf2 := test2-odb.hxx test2-odb.ixx test2-odb.cxx gen2 := $(addprefix $(out_base)/,$(genf2)) genf := $(genf1) $(genf2) gen := $(gen1) $(gen2) +gens := test1.sql test2.sql test2-002-pre.sql test2-002-post.sql \ +test2-003-pre.sql test2-003-post.sql $(gen): $(odb) $(gen): odb := $(odb) @@ -113,7 +114,7 @@ $(clean): \ ifeq ($(out_base),$(src_base)) $(driver): | $(out_base)/.gitignore -$(out_base)/.gitignore: files := driver $(genf) +$(out_base)/.gitignore: files := driver $(genf) $(gens) $(clean): $(out_base)/.gitignore.clean $(call include,$(bld_root)/git/gitignore.make) diff --git a/evolution/alter-column/model.hxx b/evolution/alter-column/model.hxx index 0b31e1c..a9a3aeb 100644 --- a/evolution/alter-column/model.hxx +++ b/evolution/alter-column/model.hxx @@ -11,6 +11,8 @@ #include #include +#include // DATABASE_XXX + #pragma db model version(1, MODEL_VERSION) #define MODEL_NAMESPACE_IMPL(V) v##V @@ -26,6 +28,9 @@ namespace MODEL_NAMESPACE(MODEL_VERSION) #pragma db id unsigned long id_; + // SQLite doesn't support altering of columns. + // +#ifndef DATABASE_SQLITE #if MODEL_VERSION == 2 odb::nullable str; @@ -44,6 +49,7 @@ namespace MODEL_NAMESPACE(MODEL_VERSION) #pragma db not_null odb::nullable num1; #endif +#endif }; } -- cgit v1.1