summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2007-06-12 11:07:34 +0000
committerMagnus Hagander <magnus@hagander.net>2007-06-12 11:07:34 +0000
commit09922597c5f460ab02882716c371b2a5c47e742e (patch)
tree50c02e13bf202463570cf107fbcda70b42812bcc /src/interfaces/ecpg/test
parente514740e699d306b744849e43bcd2ef9728d464b (diff)
Rewrite ECPG regression test driver in C, by splitting the standard
regression driver into two parts and reusing half of it. Required to run ECPG tests without a shell on MSVC builds. Fix ECPG thread tests for MSVC build (incl output files). Joachim Wieland and Magnus Hagander
Diffstat (limited to 'src/interfaces/ecpg/test')
-rw-r--r--src/interfaces/ecpg/test/Makefile48
-rw-r--r--src/interfaces/ecpg/test/ecpg_schedule40
-rw-r--r--src/interfaces/ecpg/test/expected/thread-thread.c26
-rw-r--r--src/interfaces/ecpg/test/expected/thread-thread_2.stdout (renamed from src/interfaces/ecpg/test/expected/thread-thread-thread.stdout)0
-rw-r--r--src/interfaces/ecpg/test/expected/thread-thread_implicit.c26
-rw-r--r--src/interfaces/ecpg/test/expected/thread-thread_implicit_2.stdout (renamed from src/interfaces/ecpg/test/expected/thread-thread_implicit-thread.stdout)0
-rw-r--r--src/interfaces/ecpg/test/pg_regress.sh811
-rw-r--r--src/interfaces/ecpg/test/pg_regress_ecpg.c177
-rw-r--r--src/interfaces/ecpg/test/resultmap3
-rw-r--r--src/interfaces/ecpg/test/thread/thread.pgc4
-rw-r--r--src/interfaces/ecpg/test/thread/thread_implicit.pgc4
11 files changed, 287 insertions, 852 deletions
diff --git a/src/interfaces/ecpg/test/Makefile b/src/interfaces/ecpg/test/Makefile
index f68ae926da8..4b9da21481c 100644
--- a/src/interfaces/ecpg/test/Makefile
+++ b/src/interfaces/ecpg/test/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/src/interfaces/ecpg/test/Makefile,v 1.67 2007/03/29 12:02:24 meskes Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/test/Makefile,v 1.68 2007/06/12 11:07:30 mha Exp $
subdir = src/interfaces/ecpg/test
top_builddir = ../../../..
@@ -8,12 +8,12 @@ include $(top_builddir)/src/Makefile.global
# this is also defined in test/connect/Makefile
TEMP_PORT = 5$(DEF_PGPORT)
+# where to find psql for testing an existing installation
+PSQLDIR = $(bindir)
+
# default encoding
MULTIBYTE = SQL_ASCII
-# threading
-THREAD := $(shell grep -q "define ENABLE_THREAD_SAFETY" ../include/ecpg_config.h && echo "--enable-threading")
-
# locale
NOLOCALE =
ifdef NO_LOCALE
@@ -26,6 +26,15 @@ else
abs_builddir := $(shell pwd -W)
endif
+# stuff to pass into build of pg_regress
+EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
+ '-DMAKEPROG="$(MAKE)"' \
+ '-DSHELLPROG="$(SHELL)"' \
+ '-DDLSUFFIX="$(DLSUFFIX)"'
+
+REGRESSINCLUDES = "-I$(top_builddir)/src/test/regress"
+REGRESSDRIVER = "$(top_builddir)/src/test/regress/pg_regress.o"
+
all install installdirs uninstall distprep:
$(MAKE) -C connect $@
$(MAKE) -C expected $@
@@ -45,20 +54,21 @@ clean distclean maintainer-clean:
$(MAKE) -C compat_informix $@
$(MAKE) -C thread $@
rm -rf tmp_check results log
- rm -f pg_regress regression.diffs
+ rm -f pg_regress regression.diffs pg_regress_ecpg.o
+
+# Build regression test driver
+
+all: pg_regress$(X)
+
+pg_regress$(X): pg_regress_ecpg.o
+ $(CC) $(CFLAGS) $^ $(REGRESSDRIVER) $(LDFLAGS) $(LIBS) -o $@
-all: pg_regress
+# dependencies ensure that path changes propagate
+pg_regress_ecpg.o: pg_regress_ecpg.c $(top_builddir)/src/port/pg_config_paths.h
+ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(top_builddir)/src/port $(REGRESSINCLUDES) $(EXTRADEFS) -c -o $@ $<
-pg_regress: pg_regress.sh $(top_builddir)/src/Makefile.global
- sed -e 's,@bindir@,$(bindir),g' \
- -e 's,@libdir@,$(libdir),g' \
- -e 's,@pkglibdir@,$(pkglibdir),g' \
- -e 's,@datadir@,$(datadir),g' \
- -e 's/@VERSION@/$(VERSION)/g' \
- -e 's/@host_tuple@/$(host_tuple)/g' \
- -e 's,@GMAKE@,$(MAKE),g' \
- -e 's/@enable_shared@/$(enable_shared)/g' \
- $< >$@
+$(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/Makefile.global
+ $(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
# When doing a VPATH build, copy over the .pgc, .stdout and .stderr
# files so that the driver script can find them. We have to use an
@@ -78,11 +88,11 @@ endif
check: all
- sh ./pg_regress --dbname=regress1 --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) $(THREAD)
+ ./pg_regress --dbname=regress1,connectdb --top-builddir=$(top_builddir) --temp-install=./tmp_check --temp-port=$(TEMP_PORT) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) $(THREAD) --schedule=$(srcdir)/ecpg_schedule --create-role=connectuser,connectdb
# the same options, but with --listen-on-tcp
checktcp: all
- sh ./pg_regress --dbname=regress1 --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) --listen-on-tcp $(THREAD)
+ ./pg_regress --dbname=regress1,connectdb --top-builddir=$(top_builddir) --temp-install=./tmp_check --temp-port=$(TEMP_PORT) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) $(THREAD) --schedule=$(srcdir)/ecpg_schedule_tcp --create-role=connectuser,connectdb --host=localhost
installcheck: all
- sh ./pg_regress --dbname=regress1 --top-builddir=$(top_builddir) --load-language=plpgsql $(NOLOCALE)
+ ./pg_regress --psqldir=$(PSQLDIR) --dbname=regress1,connectdb --top-builddir=$(top_builddir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) $(THREAD) --schedule=$(srcdir)/ecpg_schedule --create-role=connectuser,connectdb
diff --git a/src/interfaces/ecpg/test/ecpg_schedule b/src/interfaces/ecpg/test/ecpg_schedule
new file mode 100644
index 00000000000..108881c49e9
--- /dev/null
+++ b/src/interfaces/ecpg/test/ecpg_schedule
@@ -0,0 +1,40 @@
+test: compat_informix/dec_test
+test: compat_informix/charfuncs
+test: compat_informix/rfmtdate
+test: compat_informix/rfmtlong
+test: compat_informix/rnull
+test: compat_informix/test_informix
+test: compat_informix/test_informix2
+test: connect/test2
+test: connect/test3
+test: connect/test4
+test: connect/test5
+test: pgtypeslib/dt_test
+test: pgtypeslib/dt_test2
+test: pgtypeslib/num_test
+test: pgtypeslib/num_test2
+test: preproc/comment
+test: preproc/define
+test: preproc/init
+test: preproc/type
+test: preproc/variable
+test: preproc/whenever
+test: sql/array
+test: sql/binary
+test: sql/code100
+test: sql/copystdout
+test: sql/define
+test: sql/desc
+test: sql/dynalloc
+test: sql/dynalloc2
+test: sql/dyntest
+test: sql/execute
+test: sql/fetch
+test: sql/func
+test: sql/indicators
+test: sql/quote
+test: sql/show
+test: sql/insupd
+test: sql/parser
+test: thread/thread
+test: thread/thread_implicit
diff --git a/src/interfaces/ecpg/test/expected/thread-thread.c b/src/interfaces/ecpg/test/expected/thread-thread.c
index 9555a79bfa5..36d920eb3cf 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread.c
+++ b/src/interfaces/ecpg/test/expected/thread-thread.c
@@ -153,15 +153,19 @@ void *test_thread(void *arg)
/* build up connection name, and connect to database */
+#ifndef WIN32_ONLY_COMPILER
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#else
+ _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#endif
/* exec sql whenever sqlerror sqlprint ; */
-#line 107 "thread.pgc"
+#line 111 "thread.pgc"
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , l_connection, 0);
-#line 108 "thread.pgc"
+#line 112 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 108 "thread.pgc"
+#line 112 "thread.pgc"
if( sqlca.sqlcode != 0 )
{
@@ -169,10 +173,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return( NULL );
}
{ ECPGtrans(__LINE__, l_connection, "begin transaction ");
-#line 114 "thread.pgc"
+#line 118 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 114 "thread.pgc"
+#line 118 "thread.pgc"
/* insert into test_thread table */
@@ -183,10 +187,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
-#line 119 "thread.pgc"
+#line 123 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 119 "thread.pgc"
+#line 123 "thread.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
@@ -194,16 +198,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */
{ ECPGtrans(__LINE__, l_connection, "commit");
-#line 125 "thread.pgc"
+#line 129 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 125 "thread.pgc"
+#line 129 "thread.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
-#line 126 "thread.pgc"
+#line 130 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 126 "thread.pgc"
+#line 130 "thread.pgc"
return( NULL );
}
diff --git a/src/interfaces/ecpg/test/expected/thread-thread-thread.stdout b/src/interfaces/ecpg/test/expected/thread-thread_2.stdout
index a9d787cc55c..a9d787cc55c 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread-thread.stdout
+++ b/src/interfaces/ecpg/test/expected/thread-thread_2.stdout
diff --git a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
index f48db90559a..bf20c51bb56 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
+++ b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
@@ -154,15 +154,19 @@ void *test_thread(void *arg)
/* build up connection name, and connect to database */
+#ifndef WIN32_ONLY_COMPILER
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#else
+ _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#endif
/* exec sql whenever sqlerror sqlprint ; */
-#line 108 "thread_implicit.pgc"
+#line 112 "thread_implicit.pgc"
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , l_connection, 0);
-#line 109 "thread_implicit.pgc"
+#line 113 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 109 "thread_implicit.pgc"
+#line 113 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
{
@@ -170,10 +174,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return( NULL );
}
{ ECPGtrans(__LINE__, NULL, "begin transaction ");
-#line 115 "thread_implicit.pgc"
+#line 119 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 115 "thread_implicit.pgc"
+#line 119 "thread_implicit.pgc"
/* insert into test_thread table */
@@ -184,10 +188,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
-#line 120 "thread_implicit.pgc"
+#line 124 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 120 "thread_implicit.pgc"
+#line 124 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
@@ -195,16 +199,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */
{ ECPGtrans(__LINE__, NULL, "commit");
-#line 126 "thread_implicit.pgc"
+#line 130 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 126 "thread_implicit.pgc"
+#line 130 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
-#line 127 "thread_implicit.pgc"
+#line 131 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
-#line 127 "thread_implicit.pgc"
+#line 131 "thread_implicit.pgc"
return( NULL );
}
diff --git a/src/interfaces/ecpg/test/expected/thread-thread_implicit-thread.stdout b/src/interfaces/ecpg/test/expected/thread-thread_implicit_2.stdout
index a9d787cc55c..a9d787cc55c 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread_implicit-thread.stdout
+++ b/src/interfaces/ecpg/test/expected/thread-thread_implicit_2.stdout
diff --git a/src/interfaces/ecpg/test/pg_regress.sh b/src/interfaces/ecpg/test/pg_regress.sh
deleted file mode 100644
index a164953ed8c..00000000000
--- a/src/interfaces/ecpg/test/pg_regress.sh
+++ /dev/null
@@ -1,811 +0,0 @@
-#! /bin/sh
-# $PostgreSQL: pgsql/src/interfaces/ecpg/test/pg_regress.sh,v 1.19 2007/03/29 12:02:24 meskes Exp $
-
-me=`basename $0`
-
-message(){
- _dashes='==============' # 14
- _spaces=' ' # 38
- _msg=`echo "$1$_spaces" | cut -c 1-38`
- echo "$_dashes $_msg $_dashes"
-}
-
-build_help(){
-help="\
-PostgreSQL regression test driver
-
-Usage: $me [options...] [extra tests...]
-
-Options:
- --dbname=DB use database DB (default \`regression')
- --debug turn on debug mode in programs that are run
- --inputdir=DIR take input files from DIR (default \`.')
- --load-language=lang load the named language before running the
- tests; can appear multiple times
- --max-connections=N maximum number of concurrent connections
- (default is 0 meaning unlimited)
- --multibyte=ENCODING use ENCODING as the multibyte encoding, and
- also run a test by the same name
- --outputdir=DIR place output files in DIR (default \`.')
- --temp-install[=DIR] create a temporary installation (in DIR)
- --no-locale use C locale
-$1
-Options for \`temp-install' mode:
- --top-builddir=DIR (relative) path to top level build directory
- --temp-port=PORT port number to start temp postmaster on
- --listen-on-tcp listen on the tcp port as well
- --enable-threading expect threading to be enabled
-
-Options for using an existing installation:
- --host=HOST use postmaster running on HOST
- --port=PORT use postmaster running at PORT
- --user=USER connect as USER
-
-The exit status is 0 if all tests passed, 1 if some tests failed, and 2
-if the tests could not be run for some reason.
-
-Report bugs to <pgsql-bugs@postgresql.org>."
-}
-
-init_vars(){
- : ${TMPDIR=/tmp}
- TMPFILE=$TMPDIR/pg_regress.$$
-
- # ----------
- # Initialize default settings
- # ----------
-
- : ${inputdir=.}
- : ${outputdir=.}
-
- libdir='@libdir@'
- bindir='@bindir@'
- datadir='@datadir@'
- host_platform='@host_tuple@'
- enable_shared='@enable_shared@'
- VERSION=@VERSION@
-
- unset mode
- unset schedule
- unset debug
- unset nolocale
- unset top_builddir
- unset temp_install
- unset multibyte
-
- dbname=regression
- hostname=localhost
- maxconnections=0
- temp_port=65432
- load_langs=""
- listen_on_tcp=no
- enable_threading=no
-
- : ${GMAKE='@GMAKE@'}
-}
-
-parse_general_options(){
-# ----------
-# Parse command line options
-# ----------
-
-while [ "$#" -gt 0 ]
-do
- case $1 in
- --help|-\?)
- echo "$help"
- exit 0;;
- --version)
- echo "pg_regress (PostgreSQL $VERSION)"
- exit 0;;
- --dbname=*)
- dbname=`expr "x$1" : "x--dbname=\(.*\)"`
- shift;;
- --debug)
- debug=yes
- shift;;
- --inputdir=*)
- inputdir=`expr "x$1" : "x--inputdir=\(.*\)"`
- shift;;
- --listen-on-tcp)
- listen_on_tcp=yes
- shift;;
- --enable-threading)
- enable_threading=yes
- shift;;
- --load-language=*)
- lang=`expr "x$1" : "x--load-language=\(.*\)"`
- load_langs="$load_langs $lang"
- unset lang
- shift;;
- --multibyte=*)
- multibyte=`expr "x$1" : "x--multibyte=\(.*\)"`
- shift;;
- --no-locale)
- nolocale=yes
- shift;;
- --temp-install)
- temp_install=./tmp_check
- shift;;
- --temp-install=*)
- temp_install=`expr "x$1" : "x--temp-install=\(.*\)"`
- shift;;
- --max-connections=*)
- maxconnections=`expr "x$1" : "x--max-connections=\(.*\)"`
- shift;;
- --outputdir=*)
- outputdir=`expr "x$1" : "x--outputdir=\(.*\)"`
- shift;;
- --top-builddir=*)
- top_builddir=`expr "x$1" : "x--top-builddir=\(.*\)"`
- shift;;
- --temp-port=*)
- temp_port=`expr "x$1" : "x--temp-port=\(.*\)"`
- shift;;
- --host=*)
- PGHOST=`expr "x$1" : "x--host=\(.*\)"`
- export PGHOST
- unset PGHOSTADDR
- shift;;
- --port=*)
- PGPORT=`expr "x$1" : "x--port=\(.*\)"`
- export PGPORT
- shift;;
- --user=*)
- PGUSER=`expr "x$1" : "x--user=\(.*\)"`
- export PGUSER
- shift;;
- -*)
- # on error, this will not return but exit
- parse_special_options "$1"
- shift;;
- *)
- extra_tests="$extra_tests $1"
- shift;;
- esac
-done
-}
-
-
-
-setup_environment_variables(){
-
- # This function has two parts. Part 1 sets/unsets environment variables
- # independently of what options the script receives.
- # Part 2 later sets environment variables with respect to the
- # options given.
-
- # =======
- # PART 1: Options independent stuff goes here
- # =======
-
-
- # ----------
- # Unset locale settings
- # ----------
-
- unset LC_COLLATE LC_CTYPE LC_MONETARY LC_MESSAGES LC_NUMERIC LC_TIME LC_ALL LANG LANGUAGE
-
- # On Windows the default locale may not be English, so force it
- case $host_platform in
- *-*-cygwin*|*-*-mingw32*)
- LANG=en
- export LANG
- ;;
- esac
-
- # ----------
- # On some platforms we can't use Unix sockets.
- # ----------
-
- case $host_platform in
- *-*-cygwin* | *-*-mingw32*)
- listen_on_tcp=yes
- esac
-
- # ----------
- # Set up diff to ignore horizontal white space differences.
- # ----------
-
- case $host_platform in
- *-*-sco3.2v5*)
- DIFFFLAGS=-b;;
- *)
- DIFFFLAGS=-w;;
- esac
-
- # ----------
- # Check for echo -n vs echo \c
- # ----------
-
- if echo '\c' | grep c >/dev/null 2>&1; then
- ECHO_N='echo -n'
- ECHO_C=''
- else
- ECHO_N='echo'
- ECHO_C='\c'
- fi
-
- # ----------
- # Set backend timezone and datestyle explicitly
- #
- # To pass the horology test in its current form, the postmaster must be
- # started with PGDATESTYLE=ISO, while the frontend must be started with
- # PGDATESTYLE=Postgres. We set the postmaster values here and change
- # to the frontend settings after the postmaster has been started.
- # ----------
-
- PGTZ='PST8PDT'; export PGTZ
- PGDATESTYLE='ISO, MDY'; export PGDATESTYLE
-
- # ----------
- # Set up SQL shell for the test.
- # ----------
-
- psql_test_options="-a -q -X $psql_options"
-
-
-
- # =======
- # PART 2: Options dependent stuff goes here
- # =======
-
- LOGDIR=$outputdir/log
-
- # ----------
- # warn of Cygwin likely failure if maxconnections = 0
- # and we are running parallel tests
- # ----------
-
- case $host_platform in
- *-*-cygwin*)
- case "$schedule" in
- *parallel_schedule*)
- if [ $maxconnections -eq 0 ] ; then
- echo Using unlimited parallel connections is likely to fail or hang on Cygwin.
- echo Try \"$me --max-connections=n\" or \"gmake MAX_CONNECTIONS=n check\"
- echo with n = 5 or 10 if this happens.
- echo
- fi
- ;;
- esac
- ;;
- esac
-
- # ----------
- # Set up multibyte environment
- # ----------
-
- if [ -n "$multibyte" ]; then
- PGCLIENTENCODING=$multibyte
- export PGCLIENTENCODING
- encoding_opt="-E $multibyte"
- else
- unset PGCLIENTENCODING
- fi
-}
-
-do_temp_install(){
- if echo x"$temp_install" | grep -v '^x/' >/dev/null 2>&1; then
- temp_install="`pwd`/$temp_install"
- fi
-
- bindir=$temp_install/install/$bindir
- libdir=$temp_install/install/$libdir
- datadir=$temp_install/install/$datadir
- PGDATA=$temp_install/data
-
- if [ "$unix_sockets" = no ]; then
- PGHOST=$hostname
- export PGHOST
- unset PGHOSTADDR
- else
- unset PGHOST
- unset PGHOSTADDR
- fi
-
- # since Makefile isn't very bright, check for out-of-range temp_port
- if [ "$temp_port" -ge 1024 -a "$temp_port" -le 65535 ] ; then
- PGPORT=$temp_port
- else
- PGPORT=65432
- fi
- export PGPORT
-
- # Get rid of environment stuff that might cause psql to misbehave
- # while contacting our temp installation
- unset PGDATABASE PGUSER PGSERVICE PGSSLMODE PGREQUIRESSL PGCONNECT_TIMEOUT
-
- # ----------
- # Set up shared library paths, needed by psql and pg_encoding
- # (if you run multibyte). LD_LIBRARY_PATH covers many platforms.
- # DYLD_LIBRARY_PATH works on Darwin, and maybe other Mach-based systems.
- # LIBPATH is for AIX.
- # Feel free to account for others as well.
- # ----------
-
- if [ -n "$LD_LIBRARY_PATH" ]; then
- LD_LIBRARY_PATH="$libdir:$LD_LIBRARY_PATH"
- else
- LD_LIBRARY_PATH=$libdir
- fi
- export LD_LIBRARY_PATH
-
- if [ -n "$DYLD_LIBRARY_PATH" ]; then
- DYLD_LIBRARY_PATH="$libdir:$DYLD_LIBRARY_PATH"
- else
- DYLD_LIBRARY_PATH=$libdir
- fi
- export DYLD_LIBRARY_PATH
-
- if [ -n "$LIBPATH" ]; then
- LIBPATH="$libdir:$LIBPATH"
- else
- LIBPATH=$libdir
- fi
- export LIBPATH
-
- # ----------
- # Windows needs shared libraries in PATH. (Only those linked into
- # executables, not dlopen'ed ones)
- # ----------
- case $host_platform in
- *-*-cygwin*|*-*-mingw32*)
- PATH=$libdir:$PATH
- export PATH
- ;;
- esac
-
- if [ -d "$temp_install" ]; then
- message "removing existing temp installation"
- rm -rf "$temp_install"
- fi
-
- message "creating temporary installation"
- if [ ! -d "$LOGDIR" ]; then
- mkdir -p "$LOGDIR" || { (exit 2); exit; }
- fi
- $GMAKE -C "$top_builddir" DESTDIR="$temp_install/install" install with_perl=no with_python=no >"$LOGDIR/install.log" 2>&1
-
- if [ $? -ne 0 ]
- then
- echo
- echo "$me: installation failed"
- echo "Examine $LOGDIR/install.log for the reason."
- echo
- (exit 2); exit
- fi
-
- message "initializing database system"
- [ "$debug" = yes ] && initdb_options="--debug"
- [ "$nolocale" = yes ] && initdb_options="$initdb_options --no-locale"
- "$bindir/initdb" -D "$PGDATA" -L "$datadir" --noclean $initdb_options >"$LOGDIR/initdb.log" 2>&1
-
- if [ $? -ne 0 ]
- then
- echo
- echo "$me: initdb failed"
- echo "Examine $LOGDIR/initdb.log for the reason."
- echo
- (exit 2); exit
- fi
-
-
- # ----------
- # Start postmaster
- # ----------
-
- message "starting postmaster"
- [ "$debug" = yes ] && postmaster_options="$postmaster_options -d 5"
- if [ "$listen_on_tcp" = yes ]; then
- postmaster_options="$postmaster_options -c listen_addresses=$hostname"
- else
- postmaster_options="$postmaster_options -c listen_addresses="
- fi
- "$bindir/postmaster" -D "$PGDATA" -F $postmaster_options >"$LOGDIR/postmaster.log" 2>&1 &
- postmaster_pid=$!
-
- # Wait till postmaster is able to accept connections (normally only
- # a second or so, but Cygwin is reportedly *much* slower). Don't
- # wait forever, however.
- i=0
- max=60
- until "$bindir/psql" -X $psql_options postgres </dev/null 2>/dev/null
- do
- i=`expr $i + 1`
- if [ $i -ge $max ]
- then
- break
- fi
- if kill -0 $postmaster_pid >/dev/null 2>&1
- then
- : still starting up
- else
- break
- fi
- sleep 1
- done
-
- if kill -0 $postmaster_pid >/dev/null 2>&1
- then
- echo "running on port $PGPORT with pid $postmaster_pid"
- else
- echo
- echo "$me: postmaster did not start"
- echo "Examine $LOGDIR/postmaster.log for the reason."
- echo
- (exit 2); exit
- fi
-}
-
-dont_temp_install(){
- # ----------
- # Windows needs shared libraries in PATH. (Only those linked into
- # executables, not dlopen'ed ones)
- # ----------
- case $host_platform in
- *-*-cygwin*|*-*-mingw32*)
- PATH=$libdir:$PATH
- export PATH
- ;;
- esac
-
- if [ -n "$PGPORT" ]; then
- port_info="port $PGPORT"
- else
- port_info="default port"
- fi
-
- if [ -n "$PGHOST" ]; then
- echo "(using postmaster on $PGHOST, $port_info)"
- else
- if [ "$unix_sockets" = no ]; then
- echo "(using postmaster on localhost, $port_info)"
- else
- echo "(using postmaster on Unix socket, $port_info)"
- fi
- fi
-}
-
-setup_client_environment_variables(){
- PGDATESTYLE='Postgres'
- export PGDATESTYLE
-}
-
-# ----------
-# Exit trap to remove temp file and shut down postmaster
-# ----------
-
-# Note: There are some stupid shells (even among recent ones) that
-# ignore the argument to exit (as in `exit 1') if there is an exit
-# trap. The trap (and thus the shell script) will then always exit
-# with the result of the last shell command before the `exit'. Hence
-# we have to write `(exit x); exit' below this point.
-
-exit_trap(){
- savestatus=$1
- if [ -n "$postmaster_pid" ]; then
- kill -2 "$postmaster_pid"
- wait "$postmaster_pid"
- unset postmaster_pid
- fi
- rm -f "$TMPFILE" && exit $savestatus
-}
-
-sig_trap() {
- savestatus=$1
- echo; echo "caught signal"
- if [ -n "$postmaster_pid" ]; then
- echo "signalling fast shutdown to postmaster with pid $postmaster_pid"
- kill -2 "$postmaster_pid"
- wait "$postmaster_pid"
- unset postmaster_pid
- fi
- (exit $savestatus); exit
-}
-
-setup_database(){
- # this receives the name of the database to set up as its argument
- "$bindir/psql" -q -X $psql_options -c "\
- alter database \"$1\" set lc_messages to 'C';
- alter database \"$1\" set lc_monetary to 'C';
- alter database \"$1\" set lc_numeric to 'C';
- alter database \"$1\" set lc_time to 'C';" "$1"
- if [ $? -ne 0 ]; then
- echo "$me: could not set database default locales"
- (exit 2); exit
- fi
-
- # ----------
- # Install any requested PL languages
- # ----------
-
- if [ "$enable_shared" = yes ]; then
- for lang in xyzzy $load_langs ; do
- if [ "$lang" != "xyzzy" ]; then
- message "installing $lang"
- "$bindir/createlang" $psql_options $lang "$1"
- if [ $? -ne 0 ] && [ $? -ne 2 ]; then
- echo "$me: createlang $lang failed"
- (exit 2); exit
- fi
- fi
- done
- fi
-}
-
-drop_database(){
- message "dropping database \"$1\""
- "$bindir/dropdb" $psql_options "$1"
-}
-
-create_database(){
- # ----------
- # We use template0 so that any installation-local cruft in template1
- # will not mess up the tests.
- # ----------
-
- message "creating database \"$1\""
- "$bindir/createdb" $encoding_opt $psql_options --template template0 "$1"
- if [ $? -ne 0 ]; then
- echo "$me: createdb failed"
- (exit 2); exit
- fi
-
- setup_database "$1"
-}
-
-database_cleanup(){
- # ----------
- # Remove regressuser* and regressgroup* user accounts.
- # ----------
-
- message "dropping regression test user accounts"
- "$bindir/psql" -q -X $psql_options -c 'DROP GROUP regressgroup1; DROP GROUP regressgroup2; DROP USER regressuser1, regressuser2, regressuser3, regressuser4;' $dbname 2>/dev/null
- if [ $? -eq 2 ]; then
- echo "$me: could not drop user accounts"
- (exit 2); exit
- fi
-}
-
-postmaster_shutdown(){
- # ----------
- # Server shutdown
- # ----------
-
- if [ -n "$postmaster_pid" ]; then
- message "shutting down postmaster"
- "$bindir/pg_ctl" -s -D "$PGDATA" stop
- wait "$postmaster_pid"
- unset postmaster_pid
- fi
-}
-
-evaluate(){
- # ----------
- # Evaluation
- # ----------
-
- count_total=`cat "$result_summary_file" | grep '\.\.\.' | wc -l | sed 's/ //g'`
- count_ok=`cat "$result_summary_file" | grep '\.\.\. ok' | wc -l | sed 's/ //g'`
- count_failed=`cat "$result_summary_file" | grep '\.\.\. FAILED' | wc -l | sed 's/ //g'`
- count_ignored=`cat "$result_summary_file" | grep '\.\.\. failed (ignored)' | wc -l | sed 's/ //g'`
-
- echo
- if [ $count_total -eq $count_ok ]; then
- msg="All $count_total tests passed."
- result=0
- elif [ $count_failed -eq 0 ]; then
- msg="$count_ok of $count_total tests passed, $count_ignored failed test(s) ignored."
- result=0
- elif [ $count_ignored -eq 0 ]; then
- msg="$count_failed of $count_total tests failed."
- result=1
- else
- msg="`expr $count_failed + $count_ignored` of $count_total tests failed, $count_ignored of these failures ignored."
- result=1
- fi
-
- dashes=`echo " $msg " | sed 's/./=/g'`
- echo "$dashes"
- echo " $msg "
- echo "$dashes"
- echo
-
- if [ -s "$diff_file" ]; then
- echo "The differences that caused some tests to fail can be viewed in the"
- echo "file \`$diff_file'. A copy of the test summary that you see"
- echo "above is saved in the file \`$result_summary_file'."
- echo
- else
- rm -f "$diff_file" "$result_summary_file"
- fi
-}
-
-additional_regress_options=""
-
-build_help "$additional_regress_options"
-init_vars
-
-parse_special_options(){
-# no special options so far
- case $1 in
- -*)
- echo "$me: invalid argument $1" 1>&2
- exit 2;;
- esac
-}
-
-# this will call parse_special_options from above
-parse_general_options $*
-
-# ----------
-# Set up the environment variables (some of them depend on the parameters)
-# ----------
-setup_environment_variables
-
-trap 'exit_trap $?' 0
-trap 'sig_trap $?' 1 2 13 15
-
-if [ x"$temp_install" != x"" ]
-then
- do_temp_install
- #PGPORT=$temp_port; export PGPORT
-else # not temp-install
- dont_temp_install
-fi
-
-# ----------
-# Postmaster is started, now we can change some environment variables for the
-# client
-# ----------
-
-setup_client_environment_variables
-
-# set up the dbs we use for ecpg regression tests
-drop_database "$dbname"
-create_database "$dbname"
-drop_database connectdb
-create_database connectdb
-
-# ----------
-# Let's go
-# ----------
-
-message "running regression test queries"
-
-outputdir="results"
-
-if [ ! -d "$outputdir" ]; then
- mkdir -p "$outputdir" || { (exit 2); exit; }
-fi
-#result_summary_file=$outputdir/regression.out
-#diff_file=$outputdir/regression.diffs
-
-#cat /dev/null >"$result_summary_file"
-#cat /dev/null >"$diff_file"
-
-# we also have different users for ecpg regression diffs (need them for testing
-# connects)
-echo "$bindir/createuser" $psql_options -R -S -D -q regressuser1
-"$bindir/createuser" $psql_options -R -S -D -q regressuser1
-if [ $? -ne 0 ]; then
- echo Could not create user regressuser1
-fi
-echo "$bindir/createuser" $psql_options -R -S -D -q connectuser
-"$bindir/createuser" $psql_options -R -S -D -q connectuser
-if [ $? -ne 0 ]; then
- echo Could not create user connectuser
-fi
-# to test username = dbname
-echo "$bindir/createuser" $psql_options -R -S -D -q connectdb
-"$bindir/createuser" $psql_options -R -S -D -q connectdb
-if [ $? -ne 0 ]; then
- echo Could not create user connectdb
-fi
-
-# this variable prevents that the PID gets included in the logfiles
-#ECPG_REGRESSION=1; export ECPG_REGRESSION
-LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
-
-DIFFPRETTYFLAGS="$DIFFFLAGS -C3"
-FAILNUM=""
-
-rm -f regression.diffs
-
-for i in \
- connect/*.pgc \
- compat_informix/*.pgc \
- preproc/*.pgc \
- pgtypeslib/*.pgc \
- sql/*.pgc \
- thread/*.pgc; do
-
- formatted=`echo $i | awk '{printf "%-38.38s", $1;}'`
- $ECHO_N "testing $formatted ... $ECHO_C"
-
- # connect/test1.pgc uses tcp to connect to the server. We run this test
- # only if called with --listen-on-tcp
- if [ $listen_on_tcp = no ] && [ "$i" = "connect/test1.pgc" ]; then
- echo skipped
- continue;
- fi
-
- runprg=`echo $i | sed -e 's,\.pgc$,,'`
- outprg=`echo $runprg | sed -e's/\//-/'`
-
- case $host_platform in
- *-*-mingw32*)
- PLATFORM_TAG="-MinGW32"
- ;;
- *-*-openbsd3.8)
- # OpenBSD 3.8 is buggy:
- # http://archives.postgresql.org/pgsql-hackers/2006-09/msg00593.php
- PLATFORM_TAG="-OpenBSD3.8.broken"
- ;;
- esac
-
- outfile_stderr="$outputdir/$outprg.stderr"
- outfile_stdout="$outputdir/$outprg.stdout"
- outfile_source="$outputdir/$outprg.c"
- cp $runprg.c "$outfile_source"
- # echo "$runprg > $outfile_stdout 2> $outfile_stderr"
- $runprg > "$outfile_stdout" 2> "$outfile_stderr"
-
- mv "$outfile_source" "$outfile_source.tmp"
- cat "$outfile_source.tmp" | sed -e 's,^\(#line [0-9]*\) ".*/\([^/]*\)",\1 "\2",' > "$outfile_source"
- rm "$outfile_source.tmp"
-
- if [ "$enable_threading" = yes ] && [ "${i%%/*}" = "thread" ]; then
- expectedoutprg="expected/$outprg-thread"
- else
- expectedoutprg="expected/$outprg"
- fi
-
- expected_stdout="$expectedoutprg$PLATFORM_TAG.stdout"
- if [ ! -f "$expected_stdout" ]; then
- expected_stdout="$expectedoutprg.stdout"
- fi
- # threading has log output disabled
- expected_stderr="expected/$outprg$PLATFORM_TAG.stderr"
- if [ ! -f "$expected_stderr" ]; then
- expected_stderr="expected/$outprg.stderr"
- fi
- # the source should be identical on all platforms
- expected_source="expected/$outprg.c"
-
- DIFFER=""
- diff $DIFFFLAGS "$expected_stderr" "$outfile_stderr" > /dev/null 2>&1
- if [ $? != 0 ]; then
- DIFFER="$DIFFER, log"
- diff $DIFFPRETTYFLAGS "$expected_stderr" "$outfile_stderr" >> regression.diffs 2>&1
- fi
-
- diff $DIFFFLAGS "$expected_stdout" "$outfile_stdout" > /dev/null 2>&1
- if [ $? != 0 ]; then
- DIFFER="$DIFFER, output"
- diff $DIFFPRETTYFLAGS "$expected_stdout" "$outfile_stdout" >> regression.diffs 2>&1
- fi
-
- diff $DIFFFLAGS "$expected_source" "$outputdir"/$outprg.c > /dev/null 2>&1
- if [ $? != 0 ]; then
- DIFFER="$DIFFER, source"
- diff $DIFFPRETTYFLAGS "$expected_source" "$outputdir"/$outprg.c >> regression.diffs 2>&1
- fi
-
- DIFFER=`echo $DIFFER | sed -e 's/^, //'`
- if [ "x$DIFFER" = "x" ]; then
- echo ok
- else
- echo "FAILED ($DIFFER)"
- # some sh's don't know about $((x+1))
- FAILNUM=x$FAILNUM
- fi
-done
-
-postmaster_shutdown
-
-# FAILNUM is empty if no test has failed
-[ x"$FAILNUM" = x"" ] && exit 0
-(exit 1); exit
-
diff --git a/src/interfaces/ecpg/test/pg_regress_ecpg.c b/src/interfaces/ecpg/test/pg_regress_ecpg.c
new file mode 100644
index 00000000000..c829653f520
--- /dev/null
+++ b/src/interfaces/ecpg/test/pg_regress_ecpg.c
@@ -0,0 +1,177 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_regress_ecpg --- regression test driver for ecpg
+ *
+ * This is a C implementation of the previous shell script for running
+ * the regression tests, and should be mostly compatible with it.
+ * Initial author of C translation: Magnus Hagander
+ *
+ * This code is released under the terms of the PostgreSQL License.
+ *
+ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/test/pg_regress_ecpg.c,v 1.1 2007/06/12 11:07:30 mha Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "pg_regress.h"
+
+#define LINEBUFSIZE 300
+static void
+ecpg_filter(const char *sourcefile, const char *outfile)
+{
+ /*
+ * Create a filtered copy of sourcefile, replacing
+ * #line x "./../bla/foo.h"
+ * with
+ * #line x "foo.h"
+ */
+ FILE *s, *t;
+ char linebuf[LINEBUFSIZE];
+
+ s = fopen(sourcefile, "r");
+ if (!s)
+ {
+ fprintf(stderr, "Could not open file %s for reading\n", sourcefile);
+ exit_nicely(2);
+ }
+ t = fopen(outfile, "w");
+ if (!t)
+ {
+ fprintf(stderr, "Could not open file %s for writing\n", outfile);
+ exit_nicely(2);
+ }
+
+ while (fgets(linebuf, LINEBUFSIZE, s))
+ {
+ /* check for "#line " in the beginning */
+ if (strstr(linebuf, "#line ") == linebuf)
+ {
+ char *p = strchr(linebuf, '"');
+ char *n;
+ int plen = 1;
+ while (*p && (*(p + plen) == '.' || strchr(p + plen, '/') != NULL))
+ {
+ plen++;
+ }
+ /* plen is one more than the number of . and / characters */
+ if (plen > 1)
+ {
+ n = (char *) malloc(plen);
+ strncpy(n, p+1, plen - 1);
+ n[plen-1] = '\0';
+ replace_string(linebuf, n, "");
+ }
+ }
+ fputs(linebuf, t);
+ }
+ fclose(s);
+ fclose(t);
+}
+
+/*
+ * start an ecpg test process for specified file (including redirection),
+ * and return process ID
+ */
+
+static PID_TYPE
+ecpg_start_test(const char *testname,
+ _stringlist **resultfiles,
+ _stringlist **expectfiles,
+ _stringlist **tags)
+{
+ PID_TYPE pid;
+ char inprg[MAXPGPATH];
+ char insource[MAXPGPATH];
+ char *outfile_stdout, expectfile_stdout[MAXPGPATH];
+ char *outfile_stderr, expectfile_stderr[MAXPGPATH];
+ char *outfile_source, expectfile_source[MAXPGPATH];
+ char cmd[MAXPGPATH * 3];
+ char *testname_dash;
+
+ snprintf(inprg, sizeof(inprg), "%s/%s", inputdir, testname);
+
+ testname_dash = strdup(testname);
+ replace_string(testname_dash, "/", "-");
+ snprintf(expectfile_stdout, sizeof(expectfile_stdout),
+ "%s/expected/%s.stdout",
+ outputdir, testname_dash);
+ snprintf(expectfile_stderr, sizeof(expectfile_stderr),
+ "%s/expected/%s.stderr",
+ outputdir, testname_dash);
+ snprintf(expectfile_source, sizeof(expectfile_source),
+ "%s/expected/%s.c",
+ outputdir, testname_dash);
+
+ /*
+ * We can use replace_string() here because the replacement string does
+ * not occupy more space than the replaced one.
+ */
+ outfile_stdout = strdup(expectfile_stdout);
+ replace_string(outfile_stdout, "/expected/", "/results/");
+ outfile_stderr = strdup(expectfile_stderr);
+ replace_string(outfile_stderr, "/expected/", "/results/");
+ outfile_source = strdup(expectfile_source);
+ replace_string(outfile_source, "/expected/", "/results/");
+
+ add_stringlist_item(resultfiles, outfile_stdout);
+ add_stringlist_item(expectfiles, expectfile_stdout);
+ add_stringlist_item(tags, "stdout");
+
+ add_stringlist_item(resultfiles, outfile_stderr);
+ add_stringlist_item(expectfiles, expectfile_stderr);
+ add_stringlist_item(tags, "stderr");
+
+ add_stringlist_item(resultfiles, outfile_source);
+ add_stringlist_item(expectfiles, expectfile_source);
+ add_stringlist_item(tags, "source");
+
+ snprintf(insource, sizeof(insource), "%s.c", testname);
+ ecpg_filter(insource, outfile_source);
+
+ snprintf(inprg, sizeof(inprg), "%s/%s", inputdir, testname);
+
+ snprintf(cmd, sizeof(cmd),
+ SYSTEMQUOTE "\"%s\" >\"%s\" 2>\"%s\"" SYSTEMQUOTE,
+ inprg,
+ outfile_stdout,
+ outfile_stderr);
+
+ pid = spawn_process(cmd);
+
+ if (pid == INVALID_PID)
+ {
+ fprintf(stderr, _("could not start process for test %s\n"),
+ testname);
+ exit_nicely(2);
+ }
+
+ free(outfile_stdout);
+ free(outfile_stderr);
+ free(outfile_source);
+
+ return pid;
+}
+
+static void
+ecpg_init(void)
+{
+ /* no reason to set -w for ecpg checks, except for when on windows */
+ if (strstr(host_platform, "-win32"))
+ basic_diff_opts = "-w";
+ else
+ basic_diff_opts = "";
+ if (strstr(host_platform, "-win32"))
+ pretty_diff_opts = "-C3 -w";
+ else
+ pretty_diff_opts = "-C3";
+}
+
+int
+main(int argc, char *argv[])
+{
+ return regression_main(argc, argv, ecpg_init, ecpg_start_test);
+}
+
diff --git a/src/interfaces/ecpg/test/resultmap b/src/interfaces/ecpg/test/resultmap
new file mode 100644
index 00000000000..b308fc9a3ed
--- /dev/null
+++ b/src/interfaces/ecpg/test/resultmap
@@ -0,0 +1,3 @@
+compat_informix/dec_test:stdout:i.86-pc-win32vc=compat_informix-dec_test-MinGW32.stdout
+pgtypeslib/num_test:stdout:i.86-pc-win32vc=pgtypeslib-num_test-MinGW32.stdout
+pgtypeslib/num_test2:stdout:i.86-pc-win32vc=pgtypeslib-num_test2-MinGW32.stdout
diff --git a/src/interfaces/ecpg/test/thread/thread.pgc b/src/interfaces/ecpg/test/thread/thread.pgc
index 726121d2ca2..dd3a5d33ae4 100644
--- a/src/interfaces/ecpg/test/thread/thread.pgc
+++ b/src/interfaces/ecpg/test/thread/thread.pgc
@@ -103,7 +103,11 @@ void *test_thread(void *arg)
EXEC SQL END DECLARE SECTION;
/* build up connection name, and connect to database */
+#ifndef WIN32_ONLY_COMPILER
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#else
+ _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#endif
EXEC SQL WHENEVER sqlerror sqlprint;
EXEC SQL CONNECT TO REGRESSDB1 AS :l_connection;
if( sqlca.sqlcode != 0 )
diff --git a/src/interfaces/ecpg/test/thread/thread_implicit.pgc b/src/interfaces/ecpg/test/thread/thread_implicit.pgc
index 010a8e52051..299f8e61186 100644
--- a/src/interfaces/ecpg/test/thread/thread_implicit.pgc
+++ b/src/interfaces/ecpg/test/thread/thread_implicit.pgc
@@ -104,7 +104,11 @@ void *test_thread(void *arg)
EXEC SQL END DECLARE SECTION;
/* build up connection name, and connect to database */
+#ifndef WIN32_ONLY_COMPILER
snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#else
+ _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
+#endif
EXEC SQL WHENEVER sqlerror sqlprint;
EXEC SQL CONNECT TO REGRESSDB1 AS :l_connection;
if( sqlca.sqlcode != 0 )