diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-27 15:38:42 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-27 15:38:42 +0200 |
commit | cd1deec2f13b6976fb3aac0e5e8d42a79875aef1 (patch) | |
tree | e56e97b86e800f4173ba433b9ba76480d0f18d5b | |
parent | 2b3b6f26e5125bdc23d07c88c369b5c6ce070a61 (diff) |
Build infrastructure for SQLite
-rw-r--r-- | build/bootstrap.make | 4 | ||||
-rwxr-xr-x | build/configure | 3 | ||||
-rw-r--r-- | build/import/libodb-sqlite/LICENSE | 12 | ||||
-rw-r--r-- | build/import/libodb-sqlite/configuration-rules.make | 15 | ||||
-rwxr-xr-x | build/import/libodb-sqlite/configure | 55 | ||||
-rw-r--r-- | build/import/libodb-sqlite/stub.make | 30 | ||||
-rwxr-xr-x | build/sqlite/configure | 23 | ||||
-rw-r--r-- | libcommon/common/common.cxx | 46 | ||||
-rw-r--r-- | libcommon/common/makefile | 3 | ||||
-rw-r--r-- | makefile | 2 |
10 files changed, 184 insertions, 9 deletions
diff --git a/build/bootstrap.make b/build/bootstrap.make index 8ec887b..07296c3 100644 --- a/build/bootstrap.make +++ b/build/bootstrap.make @@ -47,8 +47,10 @@ endif # Database schema creation. # +ifeq ($(filter $(db_id),sqlite),) $(out_base)/.test: schema = \ $(call message,sql $$1,$(dcf_root)/db-driver $$1,$(out_base)/test.sql) +endif # Dist setup. # @@ -60,7 +62,7 @@ ifeq ($(dist_prefix),) $(error dist_prefix is not set) endif -databases := mysql +databases := mysql sqlite $(dist): databases := $(databases) # $1 project template without the -vcN.vc[x]proj suffix. diff --git a/build/configure b/build/configure index bc57e61..2fc7846 100755 --- a/build/configure +++ b/build/configure @@ -23,9 +23,10 @@ $echo $echo "Please select the database you would like to use:" $echo $echo "(1) MySQL" +$echo "(2) SQLite" $echo -db_id=`read_option "mysql" "mysql"` +db_id=`read_option "mysql sqlite"` echo "db_id := $db_id" >$1 diff --git a/build/import/libodb-sqlite/LICENSE b/build/import/libodb-sqlite/LICENSE new file mode 100644 index 0000000..ed9c55c --- /dev/null +++ b/build/import/libodb-sqlite/LICENSE @@ -0,0 +1,12 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/build/import/libodb-sqlite/configuration-rules.make b/build/import/libodb-sqlite/configuration-rules.make new file mode 100644 index 0000000..420f1ef --- /dev/null +++ b/build/import/libodb-sqlite/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libodb-sqlite/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libodb-sqlite/configuration-dynamic.make: | $(dcf_root)/import/libodb-sqlite/. + $(call message,,$(scf_root)/import/libodb-sqlite/configure $@) + +ifndef %foreign% + +$(dcf_root)/.disfigure:: + $(call message,rm $(dcf_root)/import/libodb-sqlite/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libodb-sqlite/configuration-dynamic.make) + +endif diff --git a/build/import/libodb-sqlite/configure b/build/import/libodb-sqlite/configure new file mode 100755 index 0000000..ee067ca --- /dev/null +++ b/build/import/libodb-sqlite/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libodb-sqlite/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libodb-sqlite' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libodb-sqlite' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libodb-sqlite'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libodb-sqlite'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libodb_sqlite_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/build/import/libodb-sqlite/stub.make b/build/import/libodb-sqlite/stub.make new file mode 100644 index 0000000..43f0e11 --- /dev/null +++ b/build/import/libodb-sqlite/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libodb-sqlite/stub.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libodb-sqlite/configuration-rules.make,$(dcf_root)) + +libodb_sqlite_installed := + +$(call -include,$(dcf_root)/import/libodb-sqlite/configuration-dynamic.make) + +ifdef libodb_sqlite_installed + +ifeq ($(libodb_sqlite_installed),y) + +$(call export,l: -lodb-sqlite -lodb -lsqlite3,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libodb-sqlite/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/build/sqlite/configure b/build/sqlite/configure new file mode 100755 index 0000000..621d582 --- /dev/null +++ b/build/sqlite/configure @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +# file : build/sqlite/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# +# dcf_root - dynamic configuration root +# + +$echo +$echo "Please enter the SQLite database file name. Note that it WILL" +$echo "BE MODIFIED by the tests. If you do not specify a name, then a" +$echo "temporary on-disk database will be created. You can also specify" +$echo "':memory:' as a file name to use a temporary in-memory database." +$echo + +db=`read_value` + +opt=$dcf_root/db.options + +echo "--database '$db'" >$opt diff --git a/libcommon/common/common.cxx b/libcommon/common/common.cxx index bffc0fc..4ad169c 100644 --- a/libcommon/common/common.cxx +++ b/libcommon/common/common.cxx @@ -11,6 +11,11 @@ #if defined(DATABASE_MYSQL) # include <odb/mysql/database.hxx> # include <odb/mysql/connection-factory.hxx> +#elif defined(DATABASE_SQLITE) +# include <odb/transaction.hxx> +# include <odb/schema-catalog.hxx> +# include <odb/sqlite/database.hxx> +# include <odb/sqlite/connection-factory.hxx> #else # error unknown database #endif @@ -18,12 +23,15 @@ #include <common/common.hxx> using namespace std; +using namespace odb::core; #if defined(DATABASE_MYSQL) -using namespace odb::mysql; +namespace mysql = odb::mysql; +#elif defined(DATABASE_SQLITE) +namespace sqlite = odb::sqlite; #endif -auto_ptr<odb::database> +auto_ptr<database> create_database (int& argc, char* argv[], size_t max_connections) { if (argc > 1 && argv[1] == string ("--help")) @@ -31,16 +39,42 @@ create_database (int& argc, char* argv[], size_t max_connections) cerr << "Usage: " << argv[0] << " [options]" << endl << "Options:" << endl; - database::print_usage (cerr); +#if defined(DATABASE_MYSQL) + mysql::database::print_usage (cerr); +#elif defined(DATABASE_SQLITE) + sqlite::database::print_usage (cerr); +#endif + exit (0); } + auto_ptr<database> db; + #if defined(DATABASE_MYSQL) - auto_ptr<connection_factory> f; + auto_ptr<mysql::connection_factory> f; if (max_connections != 0) - f.reset (new connection_pool_factory (max_connections)); + f.reset (new mysql::connection_pool_factory (max_connections)); + + db.reset (new mysql::database (argc, argv, false, 0, f)); +#elif defined(DATABASE_SQLITE) + auto_ptr<sqlite::connection_factory> f; - return auto_ptr<odb::database> (new database (argc, argv, false, 0, f)); + if (max_connections != 0) + f.reset (new sqlite::connection_pool_factory (max_connections)); + + db.reset ( + new sqlite::database ( + argc, argv, false, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, f)); + + // Create the database schema. + // + { + transaction t (db->begin ()); + schema_catalog::create_schema (*db); + t.commit (); + } #endif + + return db; } diff --git a/libcommon/common/makefile b/libcommon/common/makefile index 1d78786..ae7d2ce 100644 --- a/libcommon/common/makefile +++ b/libcommon/common/makefile @@ -52,6 +52,9 @@ $(out_base)/config.h: $(dcf_root)/configuration-dynamic.make ifeq ($(db_id),mysql) @echo '#define DATABASE_MYSQL 1' >>$@ endif +ifeq ($(db_id),sqlite) + @echo '#define DATABASE_SQLITE 1' >>$@ +endif @echo '#define HAVE_TR1_MEMORY 1' >>$@ @echo '' >>$@ @echo '#endif /* LIBCOMMON_COMMON_CONFIG_H */' >>$@ @@ -31,7 +31,7 @@ $(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_dirs))) $(call dist-dir,m4) $(call meta-vctest,tracer/tracer-vc10.sln,build.bat) $(call meta-automake) - $(call meta-autoconf) + $(call meta-autoconf) $(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(dirs))) $(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(all_dirs))) |