From d1ad30f7a517e69bc87d1347224f1c9ab38493b3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 25 Oct 2012 10:35:36 +0200 Subject: Static multi-database support Add new options (--multi-database, --default-database). Generate common code to -odb.?xx files and database-specific to -odb-.?xx. --- odb/option-functions.cxx | 61 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) (limited to 'odb/option-functions.cxx') diff --git a/odb/option-functions.cxx b/odb/option-functions.cxx index 6b7442e..aca4943 100644 --- a/odb/option-functions.cxx +++ b/odb/option-functions.cxx @@ -3,6 +3,7 @@ // license : GNU GPL v3; see accompanying LICENSE file #include +#include // std::make_pair() #include @@ -11,6 +12,8 @@ using namespace std; void process_options (options& o) { + database db (o.database ()[0]); + // If --generate-schema-only was specified, then set --generate-schema // as well. // @@ -23,8 +26,12 @@ process_options (options& o) { set f; - switch (o.database ()) + switch (db) { + case database::common: + { + break; // No schema for common. + } case database::mssql: case database::mysql: case database::oracle: @@ -42,4 +49,56 @@ process_options (options& o) o.schema_format (f); } + + // Set default --*--file-suffix values. + // + { + database cm (database::common); + + o.odb_file_suffix ().insert (make_pair (cm, string ("-odb"))); + o.sql_file_suffix ().insert (make_pair (cm, string (""))); + o.schema_file_suffix ().insert (make_pair (cm, string ("-schema"))); + } + + if (o.multi_database () == multi_database::disabled) + { + o.odb_file_suffix ().insert (make_pair (db, string ("-odb"))); + o.sql_file_suffix ().insert (make_pair (db, string (""))); + o.schema_file_suffix ().insert (make_pair (db, string ("-schema"))); + } + else + { + o.odb_file_suffix ().insert ( + make_pair (db, string ("-odb-") + db.string ())); + o.sql_file_suffix ().insert ( + make_pair (db, string ("-") + db.string ())); + o.schema_file_suffix ().insert ( + make_pair (db, string ("-schema-") + db.string ())); + } + + // Set default --default-database value. + // + if (!o.default_database_specified ()) + { + switch (o.multi_database ()) + { + case multi_database::disabled: + { + o.default_database (db); + o.default_database_specified (true); + break; + } + case multi_database::dynamic: + { + o.default_database (database::common); + o.default_database_specified (true); + break; + } + case multi_database::static_: + { + // No default database unless explicitly specified. + break; + } + } + } } -- cgit v1.1