aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-01-16 09:50:11 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-16 09:50:11 +0200
commit7d74507aacb63f77b763c940ef6fb6c82cb2445a (patch)
tree9d92e44fd3a5de7a5463b170e5e0a9831d46abeb
parent24f87489a4d315cc01ca9d49a3f0209522fe6729 (diff)
Add SQL Server support
-rw-r--r--boost/database.hxx9
-rw-r--r--build/bootstrap.make2
-rw-r--r--build/configuration.make14
-rwxr-xr-xbuild/configure3
-rw-r--r--build/import/libodb-mssql/LICENSE12
-rw-r--r--build/import/libodb-mssql/configuration-rules.make15
-rwxr-xr-xbuild/import/libodb-mssql/configure55
-rw-r--r--build/import/libodb-mssql/stub.make30
-rwxr-xr-xbuild/mssql/configure54
-rwxr-xr-xbuild/mssql/mssql53
-rw-r--r--composite/database.hxx9
-rw-r--r--container/database.hxx9
-rw-r--r--hello/database.hxx9
-rw-r--r--inheritance/database.hxx9
-rw-r--r--inverse/database.hxx9
-rw-r--r--mapping/database.hxx9
-rw-r--r--mapping/traits-mssql.hxx86
-rw-r--r--mapping/traits.hxx2
-rw-r--r--optimistic/database.hxx9
-rw-r--r--qt/database.hxx9
-rw-r--r--query/database.hxx9
-rw-r--r--relationship/database.hxx9
-rw-r--r--schema/custom/database.hxx9
-rw-r--r--schema/custom/driver.cxx12
-rw-r--r--schema/embedded/database.hxx9
-rw-r--r--template/database.hxx9
-rw-r--r--view/database.hxx9
27 files changed, 427 insertions, 46 deletions
diff --git a/boost/database.hxx b/boost/database.hxx
index 0831364..db7064e 100644
--- a/boost/database.hxx
+++ b/boost/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/build/bootstrap.make b/build/bootstrap.make
index dae84fc..044c6a6 100644
--- a/build/bootstrap.make
+++ b/build/bootstrap.make
@@ -64,7 +64,7 @@ ifeq ($(dist_prefix),)
$(error dist_prefix is not set)
endif
-databases := mysql sqlite pgsql oracle
+databases := mysql sqlite pgsql oracle mssql
$(dist): databases := $(databases)
# $1 project template without the -vcN.vc[x]proj suffix.
diff --git a/build/configuration.make b/build/configuration.make
index e2d0077..d217dd6 100644
--- a/build/configuration.make
+++ b/build/configuration.make
@@ -15,18 +15,14 @@ ifdef db_id
ifeq ($(db_id),mysql)
db_macro := DATABASE_MYSQL
-endif
-
-ifeq ($(db_id),sqlite)
+else ifeq ($(db_id),sqlite)
db_macro := DATABASE_SQLITE
-endif
-
-ifeq ($(db_id),pgsql)
+else ifeq ($(db_id),pgsql)
db_macro := DATABASE_PGSQL
-endif
-
-ifeq ($(db_id),oracle)
+else ifeq ($(db_id),oracle)
db_macro := DATABASE_ORACLE
+else ifeq ($(db_id),mssql)
+db_macro := DATABASE_MSSQL
endif
$(out_root)/%: db_id := $(db_id)
diff --git a/build/configure b/build/configure
index 9aee64a..c4fb620 100755
--- a/build/configure
+++ b/build/configure
@@ -26,9 +26,10 @@ $echo "(1) MySQL"
$echo "(2) SQLite"
$echo "(3) PostgreSQL"
$echo "(4) Oracle"
+$echo "(5) Microsoft SQL Server"
$echo
-db_id=`read_option "mysql sqlite pgsql oracle"`
+db_id=`read_option "mysql sqlite pgsql oracle mssql"`
echo "db_id := $db_id" >$1
diff --git a/build/import/libodb-mssql/LICENSE b/build/import/libodb-mssql/LICENSE
new file mode 100644
index 0000000..ed9c55c
--- /dev/null
+++ b/build/import/libodb-mssql/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-mssql/configuration-rules.make b/build/import/libodb-mssql/configuration-rules.make
new file mode 100644
index 0000000..6c74f64
--- /dev/null
+++ b/build/import/libodb-mssql/configuration-rules.make
@@ -0,0 +1,15 @@
+# file : build/import/libodb-mssql/configuration-rules.make
+# author : Constantin Michael <constantin@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : ODB NCUEL; see accompanying LICENSE file
+
+$(dcf_root)/import/libodb-mssql/configuration-dynamic.make: | $(dcf_root)/import/libodb-mssql/.
+ $(call message,,$(scf_root)/import/libodb-mssql/configure $@)
+
+ifndef %foreign%
+
+$(dcf_root)/.disfigure::
+ $(call message,rm $(dcf_root)/import/libodb-mssql/configuration-dynamic.make,\
+rm -f $(dcf_root)/import/libodb-mssql/configuration-dynamic.make)
+
+endif
diff --git a/build/import/libodb-mssql/configure b/build/import/libodb-mssql/configure
new file mode 100755
index 0000000..dabc42a
--- /dev/null
+++ b/build/import/libodb-mssql/configure
@@ -0,0 +1,55 @@
+#! /usr/bin/env bash
+
+# file : build/import/libodb-mssql/configure
+# author : Constantin Michael <constantin@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : ODB NCUEL; 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-mssql' for '$project_name'."
+$echo
+
+$echo
+$echo "Would you like to configure dependency on the installed version"
+$echo "of 'libodb-mssql' 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-mssql'."
+$echo
+
+src_root=`read_path --directory --exist`
+
+$echo
+$echo "Please enter the out_root for 'libodb-mssql'."
+$echo
+
+out_root=`read_path --directory $src_root`
+
+fi
+
+echo libodb_mssql_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-mssql/stub.make b/build/import/libodb-mssql/stub.make
new file mode 100644
index 0000000..a7aa2dd
--- /dev/null
+++ b/build/import/libodb-mssql/stub.make
@@ -0,0 +1,30 @@
+# file : build/import/libodb-mssql/stub.make
+# author : Constantin Michael <constantin@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : ODB NCUEL; see accompanying LICENSE file
+
+$(call include-once,$(scf_root)/import/libodb-mssql/configuration-rules.make,$(dcf_root))
+
+libodb_mssql_installed :=
+
+$(call -include,$(dcf_root)/import/libodb-mssql/configuration-dynamic.make)
+
+ifdef libodb_mssql_installed
+
+ifeq ($(libodb_mssql_installed),y)
+
+$(call export,l: -lodb-mssql -lodb -lodbc,cpp-options: )
+
+else
+
+# Include export stub.
+#
+$(call include,$(scf_root)/export/libodb-mssql/stub.make)
+
+endif
+
+else
+
+.NOTPARALLEL:
+
+endif
diff --git a/build/mssql/configure b/build/mssql/configure
new file mode 100755
index 0000000..5013609
--- /dev/null
+++ b/build/mssql/configure
@@ -0,0 +1,54 @@
+#! /usr/bin/env bash
+
+# file : build/mssql/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 SQL Server client program path."
+$echo
+
+driver=`read_path --command sqlcmd`
+
+$echo
+$echo "Please enter the SQL Server database user."
+$echo
+
+user=`read_value "odb_test"`
+
+$echo
+$echo "Please enter the SQL Server database password."
+$echo
+
+passwd=`read_value "odb_test"`
+
+$echo
+$echo "Please enter the SQL Server database name. Note that it WILL BE"
+$echo "MODIFIED by the tests."
+$echo
+
+db=`read_value "odb_test"`
+
+$echo
+$echo "Please enter the SQL Server instance address."
+$echo
+
+server=`read_value ""`
+
+opt=$dcf_root/db.options
+drv=$dcf_root/db-driver
+
+echo "--user '$user'" >$opt
+echo "--password '$passwd'" >>$opt
+echo "--database '$db'" >>$opt
+echo "--server '$server'" >>$opt
+
+echo "#!/bin/sh" >$drv
+echo "opt=\`cat $opt\`" >>$drv
+echo "eval $scf_root/mssql/mssql --driver $driver \$opt \$*" >>$drv
+chmod 755 $drv
diff --git a/build/mssql/mssql b/build/mssql/mssql
new file mode 100755
index 0000000..d451ee6
--- /dev/null
+++ b/build/mssql/mssql
@@ -0,0 +1,53 @@
+#! /usr/bin/env bash
+
+# file : build/mssql/mssql
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : GNU GPL v2; see accompanying LICENSE file
+
+#
+# SQL Server driver wrapper.
+#
+
+opt=
+driver=
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ --driver)
+ driver=$2
+ shift 2
+ ;;
+ --user)
+ opt="$opt -U $2"
+ shift 2
+ ;;
+ --password)
+ opt="$opt -P $2"
+ shift 2
+ ;;
+ --database)
+ opt="$opt -d $2"
+ shift 2
+ ;;
+ --server)
+ opt="$opt -S $2"
+ shift 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+if [ -z "$driver" ]; then
+ driver=sqlcmd
+fi
+
+opt="-x -r -b $opt"
+
+if [ -n "$1" ]; then
+ exec $driver $opt -i $1
+else
+ exec $driver $opt
+fi
diff --git a/composite/database.hxx b/composite/database.hxx
index 58e1e46..0fc9fce 100644
--- a/composite/database.hxx
+++ b/composite/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/container/database.hxx b/container/database.hxx
index 9bfe1e5..e71a225 100644
--- a/container/database.hxx
+++ b/container/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/hello/database.hxx b/hello/database.hxx
index 532d602..7872297 100644
--- a/hello/database.hxx
+++ b/hello/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/inheritance/database.hxx b/inheritance/database.hxx
index f1753c4..c5eae71 100644
--- a/inheritance/database.hxx
+++ b/inheritance/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/inverse/database.hxx b/inverse/database.hxx
index 3a20d4b..69a04b2 100644
--- a/inverse/database.hxx
+++ b/inverse/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/mapping/database.hxx b/mapping/database.hxx
index 36a9cb7..a3ab8f9 100644
--- a/mapping/database.hxx
+++ b/mapping/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/mapping/traits-mssql.hxx b/mapping/traits-mssql.hxx
new file mode 100644
index 0000000..264a657
--- /dev/null
+++ b/mapping/traits-mssql.hxx
@@ -0,0 +1,86 @@
+// file : mapping/traits-mssql.hxx
+// author : Constantin Michael <constantin@codesynthesis.com>
+// copyright : not copyrighted - public domain
+
+#ifndef TRAITS_MSSQL_HXX
+#define TRAITS_MSSQL_HXX
+
+//
+// SQL Server implementation.
+//
+
+#include <cstddef> // std::size_t
+#include <cstring> // std::strncmp, std::memcpy
+#include <cassert>
+
+#include <odb/mssql/traits.hxx>
+
+#include "person.hxx" // date
+
+namespace odb
+{
+ namespace mssql
+ {
+ template <>
+ class value_traits<bool, id_string>
+ {
+ public:
+ typedef bool value_type;
+ typedef bool query_type;
+ typedef char* image_type;
+
+ static void
+ set_value (bool& v,
+ const char* b,
+ std::size_t n,
+ bool is_null)
+ {
+ v = (!is_null && n == 4 && std::strncmp ("true", b, n) == 0);
+ }
+
+ static void
+ set_image (char* b,
+ std::size_t c,
+ std::size_t& n,
+ bool& is_null,
+ bool v)
+ {
+ is_null = false;
+ n = v ? 4 : 5;
+
+ assert (n <= c);
+
+ std::memcpy (b, (v ? "true" : "false"), n);
+ }
+ };
+
+ template <>
+ class value_traits< ::date, id_date>
+ {
+ public:
+ typedef ::date value_type;
+ typedef ::date query_type;
+ typedef mssql::date image_type;
+
+ static void
+ set_value (value_type& v, const image_type& i, bool is_null)
+ {
+ if (!is_null)
+ v = value_type (static_cast<unsigned int> (i.year), i.month, i.day);
+ else
+ v = value_type (0, 0, 0);
+ }
+
+ static void
+ set_image (image_type& i, bool& is_null, const value_type& v)
+ {
+ is_null = false;
+ i.year = static_cast<SQLSMALLINT> (v.year ());
+ i.month = static_cast<SQLUSMALLINT> (v.month ());
+ i.day = static_cast<SQLUSMALLINT> (v.day ());
+ }
+ };
+ }
+}
+
+#endif // TRAITS_MSSQL_HXX
diff --git a/mapping/traits.hxx b/mapping/traits.hxx
index 1ef2858..c2bec55 100644
--- a/mapping/traits.hxx
+++ b/mapping/traits.hxx
@@ -15,6 +15,8 @@
# include "traits-pgsql.hxx"
#elif defined(DATABASE_ORACLE)
# include "traits-oracle.hxx"
+#elif defined(DATABASE_MSSQL)
+# include "traits-mssql.hxx"
#endif
#endif // TRAITS_HXX
diff --git a/optimistic/database.hxx b/optimistic/database.hxx
index 52bac6e..b014f73 100644
--- a/optimistic/database.hxx
+++ b/optimistic/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/qt/database.hxx b/qt/database.hxx
index e610b3e..22eb459 100644
--- a/qt/database.hxx
+++ b/qt/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ createDatabase (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ createDatabase (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/query/database.hxx b/query/database.hxx
index 685a77c..e01b284 100644
--- a/query/database.hxx
+++ b/query/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/relationship/database.hxx b/relationship/database.hxx
index 1617709..2f64e06 100644
--- a/relationship/database.hxx
+++ b/relationship/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/schema/custom/database.hxx b/schema/custom/database.hxx
index 6f56224..9bb411d 100644
--- a/schema/custom/database.hxx
+++ b/schema/custom/database.hxx
@@ -24,6 +24,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -45,6 +47,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -59,8 +63,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/schema/custom/driver.cxx b/schema/custom/driver.cxx
index a140ee1..cc1f3ea 100644
--- a/schema/custom/driver.cxx
+++ b/schema/custom/driver.cxx
@@ -27,7 +27,9 @@ main (int argc, char* argv[])
// Create the database schema.
//
-#if defined(DATABASE_MYSQL) || defined(DATABASE_SQLITE)
+#if defined(DATABASE_MYSQL) || \
+ defined(DATABASE_SQLITE) || \
+ defined(DATABASE_MSSQL)
{
// Due to bugs in SQLite foreign key support for DDL statements,
@@ -46,9 +48,9 @@ main (int argc, char* argv[])
//
try
{
- db->execute ("DROP TABLE Employer");
- db->execute ("DROP TABLE Employee");
db->execute ("DROP TABLE EmployeeDegree");
+ db->execute ("DROP TABLE Employee");
+ db->execute ("DROP TABLE Employer");
}
catch (const odb::exception&)
{
@@ -60,14 +62,14 @@ main (int argc, char* argv[])
db->execute (
"CREATE TABLE Employee ("
- "ssn INTEGER UNSIGNED NOT NULL PRIMARY KEY,"
+ "ssn INTEGER NOT NULL PRIMARY KEY,"
"first_name VARCHAR (255) NOT NULL,"
"last_name VARCHAR (255) NOT NULL,"
"employer VARCHAR (255) NOT NULL REFERENCES Employer (name))");
db->execute (
"CREATE TABLE EmployeeDegree ("
- "ssn INTEGER UNSIGNED NOT NULL REFERENCES Employee (ssn),"
+ "ssn INTEGER NOT NULL REFERENCES Employee (ssn),"
"degree VARCHAR (255) NOT NULL)");
t.commit ();
diff --git a/schema/embedded/database.hxx b/schema/embedded/database.hxx
index 4291521..a79cc4d 100644
--- a/schema/embedded/database.hxx
+++ b/schema/embedded/database.hxx
@@ -24,6 +24,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -45,6 +47,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -59,8 +63,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/template/database.hxx b/template/database.hxx
index 4d40696..c3088d2 100644
--- a/template/database.hxx
+++ b/template/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
diff --git a/view/database.hxx b/view/database.hxx
index ee97a20..016bfa7 100644
--- a/view/database.hxx
+++ b/view/database.hxx
@@ -27,6 +27,8 @@
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
+#elif defined(DATABASE_MSSQL)
+# include <odb/mssql/database.hxx>
#endif
inline std::auto_ptr<odb::database>
@@ -48,6 +50,8 @@ create_database (int& argc, char* argv[])
odb::pgsql::database::print_usage (cerr);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cerr);
+#elif defined(DATABASE_MSSQL)
+ odb::mssql::database::print_usage (cerr);
#endif
exit (0);
@@ -78,8 +82,9 @@ create_database (int& argc, char* argv[])
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
- auto_ptr<database> db (
- new odb::oracle::database (argc, argv));
+ auto_ptr<database> db (new odb::oracle::database (argc, argv));
+#elif defined(DATABASE_MSSQL)
+ auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;