diff options
-rw-r--r-- | INSTALL | 1 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | m4/database.m4 | 7 | ||||
-rw-r--r-- | m4/libodb-oracle.m4 | 84 | ||||
-rw-r--r-- | m4/oracle.m4 | 245 | ||||
-rw-r--r-- | makefile | 2 | ||||
-rw-r--r-- | oracle-driver.bat | 43 | ||||
-rw-r--r-- | oracle.options | 9 | ||||
-rw-r--r-- | template/Makefile.am | 4 |
9 files changed, 397 insertions, 2 deletions
@@ -4,6 +4,7 @@ system you would like to use. Valid values for <database> are: 'mysql' - The MySQL database system 'sqlite' - The SQLite database system 'pgsql' - The PostgreSQL database system + 'oracle' - The Oracle database system Prerequisites ============= diff --git a/configure.ac b/configure.ac index ccbf96a..8f341ff 100644 --- a/configure.ac +++ b/configure.ac @@ -81,6 +81,10 @@ case $database in LIBODB_PGSQL([], [AC_MSG_ERROR([libodb-pgsql is not found; consider using --with-libodb-pgsql=DIR])]) PGSQL ;; + oracle) + LIBODB_ORACLE([], [AC_MSG_ERROR([libodb-oracle is not found; consider using --with-libodb-oracle=DIR])]) + ORACLE + ;; esac # Check for the ODB compiler. diff --git a/m4/database.m4 b/m4/database.m4 index 968f764..5f5a03e 100644 --- a/m4/database.m4 +++ b/m4/database.m4 @@ -13,7 +13,7 @@ AC_MSG_CHECKING([for database to use]) AC_ARG_WITH( [database], [AC_HELP_STRING([--with-database=db], - [database to use for tests; valid values are: 'mysql', 'sqlite', and 'pgsql'])], + [database to use for tests; valid values are: 'mysql', 'sqlite', 'pgsql', and 'oracle'])], [case $withval in no | yes) AC_MSG_RESULT([]) @@ -31,6 +31,10 @@ AC_ARG_WITH( database=pgsql AC_DEFINE([DATABASE_PGSQL], [1], [Using PostgreSQL.]) ;; + oracle) + database=oracle + AC_DEFINE([DATABASE_ORACLE], [1], [Using Oracle.]) + ;; *) AC_MSG_RESULT([]) AC_MSG_ERROR([unknown database $withval]) @@ -47,5 +51,6 @@ AC_SUBST([database]) AM_CONDITIONAL([DATABASE_MYSQL], [test x$database = xmysql]) AM_CONDITIONAL([DATABASE_SQLITE], [test x$database = xsqlite]) AM_CONDITIONAL([DATABASE_PGSQL], [test x$database = xpgsql]) +AM_CONDITIONAL([DATABASE_ORACLE], [test x$database = xoracle]) ])dnl diff --git a/m4/libodb-oracle.m4 b/m4/libodb-oracle.m4 new file mode 100644 index 0000000..319377f --- /dev/null +++ b/m4/libodb-oracle.m4 @@ -0,0 +1,84 @@ +dnl file : m4/libodb-oracle.m4 +dnl author : Boris Kolpackov <boris@codesynthesis.com> +dnl copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +dnl license : GNU GPL v2; see accompanying LICENSE file +dnl +dnl LIBODB_ORACLE([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +dnl +dnl +AC_DEFUN([LIBODB_ORACLE], [ +libodb_oracle_found=no + +AC_ARG_WITH( + [libodb-oracle], + [AC_HELP_STRING([--with-libodb-oracle=DIR],[location of libodb-oracle build directory])], + [libodb_oracle_dir=${withval}], + [libodb_oracle_dir=]) + +AC_MSG_CHECKING([for libodb-oracle]) + +# If libodb_oracle_dir was given, add the necessary preprocessor and +# linker flags. +# +if test x"$libodb_oracle_dir" != x; then + save_CPPFLAGS="$CPPFLAGS" + save_LDFLAGS="$LDFLAGS" + + AS_SET_CATFILE([abs_libodb_oracle_dir], [$ac_pwd], [$libodb_oracle_dir]) + + CPPFLAGS="$CPPFLAGS -I$abs_libodb_oracle_dir" + LDFLAGS="$LDFLAGS -L$abs_libodb_oracle_dir/odb/oracle" +fi + +save_LIBS="$LIBS" +LIBS="-lodb-oracle $LIBS" + +CXX_LIBTOOL_LINK_IFELSE( +AC_LANG_SOURCE([[ +#include <odb/oracle/exceptions.hxx> + +void +f () +{ +} + +const char* +g () +{ + try + { + f (); + } + catch (const odb::oracle::database_exception& e) + { + return e.what (); + } + return 0; +} + +int +main () +{ + const char* m (g ()); + return m != 0; +} +]]), +[libodb_oracle_found=yes]) +libodb_oracle_found=yes +if test x"$libodb_oracle_found" = xno; then + LIBS="$save_LIBS" + + if test x"$libodb_oracle_dir" != x; then + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + fi +fi + +if test x"$libodb_oracle_found" = xyes; then + AC_MSG_RESULT([yes]) + $1 +else + AC_MSG_RESULT([no]) + $2 +fi +])dnl diff --git a/m4/oracle.m4 b/m4/oracle.m4 new file mode 100644 index 0000000..321b50d --- /dev/null +++ b/m4/oracle.m4 @@ -0,0 +1,245 @@ +dnl file : m4/oracle.m4 +dnl author : Boris Kolpackov <boris@codesynthesis.com> +dnl copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +dnl license : GNU GPL v2; see accompanying LICENSE file +dnl +dnl ORACLE +dnl +AC_DEFUN([ORACLE], [ + +# Client. +# +AC_MSG_CHECKING([for oracle client program]) +AC_ARG_WITH( + [oracle-client], + [AC_HELP_STRING([--with-oracle-client=path], [Oracle client program path (sqlplus by default)])], + [case $withval in + yes) + oracle_client=sqlplus + ;; + no) + AC_MSG_RESULT([]) + AC_MSG_ERROR([need oracle client to run the tests]) + ;; + *) + oracle_client=$withval + ;; + esac], + [oracle_client=sqlplus]) + +$oracle_client -V 2>/dev/null 1>&2 + +if test x"$?" = x0; then + AC_MSG_RESULT([$oracle_client]) +else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([oracle client is not found; consider using --with-oracle-client=PATH]) +fi + +# User. +# +AC_MSG_CHECKING([for oracle database user]) +AC_ARG_WITH( + [oracle-user], + [AC_HELP_STRING([--with-oracle-user=login], [Oracle database user (odb_test by default)])], + [case $withval in + yes) + oracle_user=odb_test + oracle_user_set=yes + ;; + no) + oracle_user_set=no + ;; + *) + oracle_user=$withval + oracle_user_set=yes + ;; + esac], + [oracle_user=odb_test + oracle_user_set=yes]) + +if test x$oracle_user_set = xyes; then + AC_MSG_RESULT(['$oracle_user']) +else + AC_MSG_RESULT([none]) +fi + +# Password. +# +AC_MSG_CHECKING([for oracle database password]) +AC_ARG_WITH( + [oracle-password], + [AC_HELP_STRING([--with-oracle-password=login], [Oracle database password])], + [case $withval in + yes) + oracle_password= + oracle_password_set=yes + ;; + no) + oracle_password_set=no + ;; + *) + oracle_password=$withval + oracle_password_set=yes + ;; + esac], + [oracle_password_set=no]) + +if test x$oracle_password_set = xyes; then + AC_MSG_RESULT(['$oracle_password']) +elif test x$oracle_user = xodb_test; then + oracle_password=odb_test + oracle_password_set=yes + AC_MSG_RESULT(['$oracle_password']) +else + AC_MSG_RESULT([none]) + AC_MSG_ERROR([password not specfied; Oracle requires a password]) +fi + +# Service name. +# +AC_MSG_CHECKING([for oracle service name]) +AC_ARG_WITH( + [oracle-service], + [AC_HELP_STRING([--with-oracle-service=name], [Oracle service name (default service if left empty). Note that all data in the database associated with the test user on this service WILL BE LOST!])], + [case $withval in + yes) + oracle_service= + oracle_service_set=yes + ;; + no) + oracle_service_set=no + ;; + *) + oracle_service=$withval + oracle_service_set=yes + ;; + esac], + [oracle_service= + oracle_service_set=yes]) + +if test x$oracle_service_set = xyes; then + AC_MSG_RESULT(['$oracle_service']) +else + AC_MSG_RESULT([none]) +fi + +# Host. +# +AC_MSG_CHECKING([for oracle database host]) +AC_ARG_WITH( + [oracle-host], + [AC_HELP_STRING([--with-oracle-host=host], [Oracle database host (localhost by default)])], + [case $withval in + yes) + oracle_host= + oracle_host_set=yes + ;; + no) + oracle_host_set=no + ;; + *) + oracle_host=$withval + oracle_host_set=yes + ;; + esac], + [oracle_host=localhost + oracle_host_set=yes]) + +if test x$oracle_host_set = xyes; then + AC_MSG_RESULT(['$oracle_host']) +else + AC_MSG_RESULT([localhost]) +fi + +# Port. +# +AC_MSG_CHECKING([for oracle database port]) +AC_ARG_WITH( + [oracle-port], + [AC_HELP_STRING([--with-oracle-port=port], [Oracle database port (standard Oracle port by default)])], + [case $withval in + yes) + oracle_port=0 + oracle_port_set=yes + ;; + no) + oracle_port_set=no + ;; + *) + oracle_port=$withval + oracle_port_set=yes + ;; + esac], + [oracle_port_set=no]) + +if test x$oracle_port_set = xyes; then + AC_MSG_RESULT(['$oracle_port']) +else + AC_MSG_RESULT([default]) +fi + +# Create options file. +# +AC_CONFIG_COMMANDS([oracle.options], + [ + rm -f db.options + echo '#! /bin/sh' >db-driver + + if test x$oracle_user_set = xyes; then + echo "--user '$oracle_user'" >>db.options + echo 'conn_str="'"$oracle_user"'"' >>db-driver + fi + + if test x$oracle_password_set = xyes; then + echo "--password '$oracle_password'" >>db.options + echo 'conn_str="$conn_str/'"$oracle_password"'"' >>db-driver + fi + + if test x$oracle_host_set = xyes; then + echo "--host '$oracle_host'" >>db.options + echo 'conn_str="$conn_str@//'"$oracle_host"'"' >>db-driver + + if test x$oracle_port_set = xyes; then + echo "--port '$oracle_port'" >>db.options + echo 'conn_str="$conn_str:'"$oracle_port"'"' >>db-driver + fi + fi + + if test x$oracle_service != x; then + if test x$oracle_host_set = xno; then + echo 'conn_str="$conn_str@"' >>db-driver + fi + + echo "--service '$oracle_service'" >>db.options + echo 'conn_str="$conn_str/'"$oracle_service"'"' >>db-driver + fi + + echo 'if test x$[]1 != x; then' >>db-driver + echo " exec $oracle_client -L -S "'$conn_str <$[]1' >>db-driver + echo "else" >>db-driver + echo " exec $oracle_client -L -S "'$conn_str' >>db-driver + echo "fi" >>db-driver + + chmod +x db-driver + ], + [ + oracle_client="$oracle_client" + + oracle_user="$oracle_user" + oracle_user_set="$oracle_user_set" + + oracle_password="$oracle_password" + oracle_password_set="$oracle_password_set" + + oracle_service="$oracle_service" + oracle_service_set="$oracle_service_set" + + oracle_host="$oracle_host" + oracle_host_set="$oracle_host_set" + + oracle_port="$oracle_port" + oracle_port_set="$oracle_port_set" + ]) + +])dnl @@ -36,7 +36,7 @@ $(dist): export boost_dirs := $(boost_dirs) $(dist): export qt_dirs := $(qt_dirs) $(dist): data_dist := GPLv2 LICENSE README NEWS INSTALL version tester.bat \ mysql-driver.bat mysql.options sqlite-driver.bat sqlite.options \ -pgsql-driver.bat pgsql.options +pgsql-driver.bat pgsql.options oracle-driver.bat oracle.options $(dist): exec_dist := bootstrap tester $(dist): export extra_dist := $(data_dist) $(exec_dist) test.bat \ $(call vc9slns,$(name)) $(call vc10slns,$(name)) diff --git a/oracle-driver.bat b/oracle-driver.bat new file mode 100644 index 0000000..83662bf --- /dev/null +++ b/oracle-driver.bat @@ -0,0 +1,43 @@ +@echo off +rem file : oracle-driver.bat +rem author : Boris Kolpackov <boris@codesynthesis.com> +rem copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +rem license : GNU GPL v2; see accompanying LICENSE file + +rem +rem oracle-driver.bat sql-file +rem +rem Run the oracle client on the SQL file specified. Adjust the +rem option below to match your Oracle setup. +rem + +setlocal + +set "options=%ORACLE_OPTIONS%" +set "options=%options% odb_test/odb_test" + +set "oracle=%ORACLE_CLIENT%" + +if "_%oracle%_" == "__" set "oracle=sqlplus" + +if "_%1_" == "__" ( + echo no sql file specified + goto usage +) + +%oracle% %options% < %1 + +if errorlevel 1 goto error +goto end + +:usage +echo. +echo usage: oracle-driver.bat sql-file +echo. + +:error +endlocal +exit /b 1 + +:end +endlocal diff --git a/oracle.options b/oracle.options new file mode 100644 index 0000000..3f4f77f --- /dev/null +++ b/oracle.options @@ -0,0 +1,9 @@ +# Sample Oracle options file used to run the tests. Adjust to +# match your Oracle setup. +# + +--user odb_test +--password odb_test +# --service +# --host +# --port diff --git a/template/Makefile.am b/template/Makefile.am index 9a83bfa..154dedf 100644 --- a/template/Makefile.am +++ b/template/Makefile.am @@ -21,6 +21,10 @@ if DATABASE_PGSQL AM_CPPFLAGS += -DDATABASE_PGSQL endif +if DATABASE_ORACLE +AM_CPPFLAGS += -DDATABASE_ORACLE +endif + TESTS=$(top_builddir)/tester TESTS_ENVIRONMENT=top_builddir=$(top_builddir); export top_builddir; |