aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-03-27 15:38:42 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-03-27 15:38:42 +0200
commitcd1deec2f13b6976fb3aac0e5e8d42a79875aef1 (patch)
treee56e97b86e800f4173ba433b9ba76480d0f18d5b
parent2b3b6f26e5125bdc23d07c88c369b5c6ce070a61 (diff)
Build infrastructure for SQLite
-rw-r--r--build/bootstrap.make4
-rwxr-xr-xbuild/configure3
-rw-r--r--build/import/libodb-sqlite/LICENSE12
-rw-r--r--build/import/libodb-sqlite/configuration-rules.make15
-rwxr-xr-xbuild/import/libodb-sqlite/configure55
-rw-r--r--build/import/libodb-sqlite/stub.make30
-rwxr-xr-xbuild/sqlite/configure23
-rw-r--r--libcommon/common/common.cxx46
-rw-r--r--libcommon/common/makefile3
-rw-r--r--makefile2
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 */' >>$@
diff --git a/makefile b/makefile
index 038aec2..896f788 100644
--- a/makefile
+++ b/makefile
@@ -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)))