diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-22 10:47:30 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-22 10:47:30 +0200 |
commit | 5bca7cdc208dd5c9261e47e7350e37ea9692d6ed (patch) | |
tree | 797bf3151c060a98059ee343f8e0a1ca040930ad /hello/database.hxx | |
parent | 0da4b5d62dc10993db4d55236cb175e891a9c62b (diff) |
Enable foreign key constraints checking in SQLite
Due to bugs in SQLite DDL foreign key support, we have to temporarily
disable foreign keys when re-creating the schema. New manual section:
12.5.3, "Foreign Key Constraints".
Diffstat (limited to 'hello/database.hxx')
-rw-r--r-- | hello/database.hxx | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/hello/database.hxx b/hello/database.hxx index 398f014..b56851d 100644 --- a/hello/database.hxx +++ b/hello/database.hxx @@ -19,6 +19,7 @@ #if defined(DATABASE_MYSQL) # include <odb/mysql/database.hxx> #elif defined(DATABASE_SQLITE) +# include <odb/connection.hxx> # include <odb/transaction.hxx> # include <odb/schema-catalog.hxx> # include <odb/sqlite/database.hxx> @@ -55,12 +56,20 @@ create_database (int& argc, char* argv[]) new odb::sqlite::database ( argc, argv, false, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)); - // Create the database schema. + // Create the database schema. Due to bugs in SQLite foreign key + // support for DDL statements, we need to temporarily disable + // foreign keys. // { - transaction t (db->begin ()); + connection_ptr c (db->connection ()); + + c->execute ("PRAGMA foreign_keys=OFF"); + + transaction t (c->begin ()); schema_catalog::create_schema (*db); t.commit (); + + c->execute ("PRAGMA foreign_keys=ON"); } #elif defined(DATABASE_PGSQL) auto_ptr<database> db (new odb::pgsql::database (argc, argv)); |