From d776aad4d4abb8eabd240621eb3d13b59a5b17d8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 14 Jun 2021 10:01:20 +0200 Subject: Add test for SQLite ATTACH DATABASE support --- sqlite/attach/driver.cxx | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 sqlite/attach/driver.cxx (limited to 'sqlite/attach/driver.cxx') diff --git a/sqlite/attach/driver.cxx b/sqlite/attach/driver.cxx new file mode 100644 index 0000000..8d0672f --- /dev/null +++ b/sqlite/attach/driver.cxx @@ -0,0 +1,107 @@ +// file : sqlite/attach/driver.cxx +// license : GNU GPL v2; see accompanying LICENSE file + +// Test attached database support. +// + +#include // std::auto_ptr +#include +#include + +#include + +#include +#include +#include + +#include + +#include "test.hxx" +#include "test-odb.hxx" + +using namespace std; +namespace sqlite = odb::sqlite; +using namespace sqlite; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr mdb (create_specific_database (argc, argv)); + + { + object o ("one"); + + connection_ptr c (mdb->connection ()); + + database adb (c, ":memory:", "adb"); + + // Create schema similar to create_database(). + // + { + c->execute ("PRAGMA foreign_keys=OFF"); + + transaction t (c->begin ()); + odb::schema_catalog::create_schema (adb); + t.commit (); + + c->execute ("PRAGMA foreign_keys=ON"); + } + + { + transaction t (c->begin ()); + mdb->persist (o); + adb.persist (o); + t.commit (); + } + + { + transaction t (c->begin ()); + auto_ptr p (adb.load (o.id)); + t.commit (); + + assert (p->str == o.str); + } + + { + o.str = "two"; + + transaction t (c->begin ()); + adb.update (o); + t.commit (); + } + + { + typedef sqlite::query query; + + transaction t (c->begin ()); + auto_ptr p (adb.query_one (query::str == "two")); + t.commit (); + + assert (p->str == o.str); + } + + { + transaction t (c->begin ()); + adb.erase (o); + t.commit (); + } + + { + transaction t (c->begin ()); + auto_ptr p (mdb->load (o.id)); + t.commit (); + + assert (p.get () != 0); + } + + adb.detach (); + } + } + catch (const odb::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} -- cgit v1.1