From b0e61f10f4cf1b90a4fa2252f111137ebbcd3e66 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 25 Apr 2013 07:26:40 +0200 Subject: Add schema_catalog::drop_schema(), control schema dropping in create_schema() --- NEWS | 11 ++++++++++- doc/manual.xhtml | 27 ++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index ccd7a42..9bb30a1 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,15 @@ Version 2.3.0 queries. For more information, refer to Section 4.1, "ODB Query Language" in the ODB manual. + * The schema_catalog::create_schema() function now has a third argument + which indicates whether to drop the schema prior to creating the new one. + The default is true which is backwards-compatible. The schema_catalog + class now also provides the drop_schema() function which allows you to + drop the schema without creating the new one. Finally, the exists() + function now has the schema name argument default to the empty string + (the default schema name). For more information, refer to Section 3.4, + "Database" in the ODB manual. + * New option, --fkeys-deferrable-mode, specifies the alternative deferrable mode for foreign keys. By default, the ODB compiler generates deferred foreign keys for databases that support them (SQLite, PostgreSQL, and @@ -14,7 +23,7 @@ Version 2.3.0 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is thrown if SQLite forces a transaction to roll back. For more information, - refer to Section 16.5.6, "Forced Rollback". + refer to Section 16.5.6, "Forced Rollback" in the ODB manual. * The --output-name option has been renamed to --input-name, which is more semantically correct. diff --git a/doc/manual.xhtml b/doc/manual.xhtml index 2f68865..dfdca31 100644 --- a/doc/manual.xhtml +++ b/doc/manual.xhtml @@ -2852,13 +2852,18 @@ namespace odb { public: static void - create_schema (database&, const std::string& name = ""); + create_schema (database&, + const std::string& name = "", + bool drop = true); + + static void + drop_schema (database&, const std::string& name = ""); static bool - exists (database_id, const std::string& name); + exists (database_id, const std::string& name = ""); static bool - exists (const database&, const std::string& name) + exists (const database&, const std::string& name = "") }; } @@ -2871,13 +2876,21 @@ namespace odb have several separate schemas, you can use the --schema-name ODB compiler option to assign custom schema names and then use these names as a second argument - to create_schema(). If the schema is not found, - create_schema() throws the + to create_schema(). By default, create_schema() + will also delete all the database objects (tables, indexes, etc.) if + they exist prior to creating the new ones. You can change this + behavior by passing false as the third argument. The + drop_schema() function allows you to delete all the + database objects without creating the new ones.

+ +

If the schema is not found, the create_schema() and + drop_schema() functions throw the odb::unknown_schema exception. You can use the exists() function to check whether a schema for the specified database and with the specified name exists in the - catalog. Note also that the create_schema() function - should be called within a transaction.

+ catalog. Note also that the create_schema() and + drop_schema() functions should be called within a + transaction.

Finally, we can also use a custom database schema with ODB. This approach can work similarly to the standalone SQL file described above except that -- cgit v1.1