From 7d74507aacb63f77b763c940ef6fb6c82cb2445a Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 16 Jan 2012 09:50:11 +0200 Subject: Add SQL Server support --- boost/database.hxx | 9 ++- build/bootstrap.make | 2 +- build/configuration.make | 14 ++-- build/configure | 3 +- build/import/libodb-mssql/LICENSE | 12 +++ build/import/libodb-mssql/configuration-rules.make | 15 ++++ build/import/libodb-mssql/configure | 55 ++++++++++++++ build/import/libodb-mssql/stub.make | 30 ++++++++ build/mssql/configure | 54 ++++++++++++++ build/mssql/mssql | 53 +++++++++++++ composite/database.hxx | 9 ++- container/database.hxx | 9 ++- hello/database.hxx | 9 ++- inheritance/database.hxx | 9 ++- inverse/database.hxx | 9 ++- mapping/database.hxx | 9 ++- mapping/traits-mssql.hxx | 86 ++++++++++++++++++++++ mapping/traits.hxx | 2 + optimistic/database.hxx | 9 ++- qt/database.hxx | 9 ++- query/database.hxx | 9 ++- relationship/database.hxx | 9 ++- schema/custom/database.hxx | 9 ++- schema/custom/driver.cxx | 12 +-- schema/embedded/database.hxx | 9 ++- template/database.hxx | 9 ++- view/database.hxx | 9 ++- 27 files changed, 427 insertions(+), 46 deletions(-) create mode 100644 build/import/libodb-mssql/LICENSE create mode 100644 build/import/libodb-mssql/configuration-rules.make create mode 100755 build/import/libodb-mssql/configure create mode 100644 build/import/libodb-mssql/stub.make create mode 100755 build/mssql/configure create mode 100755 build/mssql/mssql create mode 100644 mapping/traits-mssql.hxx 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 +# 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 +# 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 +# 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 +# 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 +# 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 +// copyright : not copyrighted - public domain + +#ifndef TRAITS_MSSQL_HXX +#define TRAITS_MSSQL_HXX + +// +// SQL Server implementation. +// + +#include // std::size_t +#include // std::strncmp, std::memcpy +#include + +#include + +#include "person.hxx" // date + +namespace odb +{ + namespace mssql + { + template <> + class value_traits + { + 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 (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 (v.year ()); + i.month = static_cast (v.month ()); + i.day = static_cast (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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr 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 #elif defined(DATABASE_ORACLE) # include +#elif defined(DATABASE_MSSQL) +# include #endif inline std::auto_ptr @@ -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 db (new odb::pgsql::database (argc, argv)); #elif defined(DATABASE_ORACLE) - auto_ptr db ( - new odb::oracle::database (argc, argv)); + auto_ptr db (new odb::oracle::database (argc, argv)); +#elif defined(DATABASE_MSSQL) + auto_ptr db (new odb::mssql::database (argc, argv)); #endif return db; -- cgit v1.1