summaryrefslogtreecommitdiff
path: root/odb/odb/option-functions.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/odb/option-functions.cxx')
-rw-r--r--odb/odb/option-functions.cxx132
1 files changed, 132 insertions, 0 deletions
diff --git a/odb/odb/option-functions.cxx b/odb/odb/option-functions.cxx
new file mode 100644
index 0000000..7eda934
--- /dev/null
+++ b/odb/odb/option-functions.cxx
@@ -0,0 +1,132 @@
+// file : odb/option-functions.cxx
+// license : GNU GPL v3; see accompanying LICENSE file
+
+#include <set>
+#include <utility> // std::make_pair()
+
+#include <odb/option-functions.hxx>
+
+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.
+ //
+ if (o.generate_schema_only ())
+ o.generate_schema (true);
+
+ // If --warn-hard was specified, then set both --warn-hard-{add,delete}.
+ //
+ if (o.warn_hard ())
+ {
+ o.warn_hard_add (true);
+ o.warn_hard_delete (true);
+ }
+
+ // Set the default schema format depending on the database.
+ //
+ if (o.generate_schema () && o.schema_format ()[db].empty ())
+ {
+ set<schema_format>& f (o.schema_format ()[db]);
+
+ switch (db)
+ {
+ case database::common:
+ {
+ break; // No schema for common.
+ }
+ case database::mssql:
+ case database::mysql:
+ case database::oracle:
+ case database::pgsql:
+ {
+ f.insert (schema_format::sql);
+ break;
+ }
+ case database::sqlite:
+ {
+ f.insert (schema_format::embedded);
+ break;
+ }
+ }
+ }
+
+ // Set default --schema-version-table value.
+ //
+ if (o.schema_version_table ().count (db) == 0)
+ o.schema_version_table ()[db] = "schema_version";
+
+ // Set default --schema-name value.
+ //
+ if (o.schema_name ().count (db) == 0)
+ o.schema_name ()[db] = "";
+
+ // Set default --fkeys-deferrable-mode value.
+ //
+ if (o.fkeys_deferrable_mode ().count (db) == 0)
+ o.fkeys_deferrable_mode ()[db] = deferrable::deferred;
+
+ // Set default --{export,extern}-symbol values.
+ //
+ if (o.export_symbol ().count (db) == 0)
+ o.export_symbol ()[db] = "";
+
+ if (o.extern_symbol ().count (db) == 0)
+ o.extern_symbol ()[db] = "";
+
+ // 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")));
+ o.changelog_file_suffix ().insert (make_pair (cm, string ("")));
+ }
+
+ 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")));
+ o.changelog_file_suffix ().insert (make_pair (db, string ("")));
+ }
+ else
+ {
+ o.odb_file_suffix ().insert (make_pair (db, "-odb-" + db.string ()));
+ o.sql_file_suffix ().insert (make_pair (db, "-" + db.string ()));
+ o.schema_file_suffix ().insert (make_pair (db, "-schema-" + db.string ()));
+ o.changelog_file_suffix ().insert (make_pair (db, '-' + 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;
+ }
+ }
+ }
+}