From 7e616b1050e4aaa4b8468d82ddf5b85d46412a3c Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 30 Dec 1998 23:30:49 +0000 Subject: [PATCH] Guess what: ODBC updates and build fixes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1288 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- configure | 600 ++++--- include/wx/db.h | 99 +- include/wx/dbtable.h | 4 +- samples/db/dbtest.cpp | 4 + samples/db/listdb.h | 5 - src/common/db.cpp | 90 +- src/common/dbtable.cpp | 22 +- src/gtk.inc | 3 +- src/iodbc/Changes.log | 104 +- src/iodbc/Makefile | 56 +- src/iodbc/README | 276 +-- src/iodbc/catalog.c | 1954 ++++++++++---------- src/iodbc/config.h | 123 +- src/iodbc/connect.c | 2398 +++++++++++++------------ src/iodbc/dlf.c | 864 +++++---- src/iodbc/dlf.h | 35 +- src/iodbc/dlproc.c | 115 +- src/iodbc/dlproc.h | 44 +- src/iodbc/execute.c | 1418 +++++++-------- src/iodbc/fetch.c | 1250 ++++++------- src/iodbc/hdbc.c | 1466 +++++++-------- src/iodbc/hdbc.h | 78 +- src/iodbc/henv.c | 60 +- src/iodbc/henv.ci | 139 +- src/iodbc/henv.h | 178 +- src/iodbc/herr.c | 606 +++---- src/iodbc/herr.ci | 188 +- src/iodbc/herr.h | 224 +-- src/iodbc/hstmt.c | 1028 +++++------ src/iodbc/hstmt.h | 74 +- src/iodbc/info.c | 662 +++---- src/iodbc/isql.h | 239 ++- src/iodbc/isqlext.h | 459 ++--- src/iodbc/itrace.c | 128 +- src/iodbc/itrace.h | 100 +- src/iodbc/main.c | 6 +- src/iodbc/misc.c | 694 +++---- src/iodbc/{postgres => }/odbc_funcs.h | 0 src/iodbc/{postgres => }/odbc_types.h | 211 +-- src/iodbc/postgres/isql.h | 188 -- src/iodbc/postgres/isqlext.h | 321 ---- src/iodbc/prepare.c | 921 +++++----- src/iodbc/result.c | 1000 +++++------ src/iodbc/shrsub.exp | 2 +- 44 files changed, 9169 insertions(+), 9267 deletions(-) rename src/iodbc/{postgres => }/odbc_funcs.h (100%) rename src/iodbc/{postgres => }/odbc_types.h (72%) delete mode 100644 src/iodbc/postgres/isql.h delete mode 100644 src/iodbc/postgres/isqlext.h diff --git a/configure b/configure index 19d5a956c2..41a42f653a 100755 --- a/configure +++ b/configure @@ -648,6 +648,7 @@ WXBASEDIR=`pwd` SEARCH_INCLUDE="\ /usr/Motif1.2/include \ + /usr/dt/include/Xm \ \ /usr/X11R6/include \ /usr/X11R5/include \ @@ -700,6 +701,7 @@ SEARCH_INCLUDE="\ " SEARCH_LIB="`echo "$SEARCH_INCLUDE" | sed s/include/lib/g` \ + /usr/dt/lib \ " @@ -707,7 +709,7 @@ SEARCH_LIB="`echo "$SEARCH_INCLUDE" | sed s/include/lib/g` \ # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:711: checking for $ac_word" >&5 +echo "configure:713: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -736,7 +738,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:740: checking for $ac_word" >&5 +echo "configure:742: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -784,7 +786,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:788: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:790: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -794,11 +796,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -818,12 +820,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:822: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:824: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:827: checking whether we are using GNU C" >&5 +echo "configure:829: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -832,7 +834,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -847,7 +849,7 @@ if test $ac_cv_prog_gcc = yes; then ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:851: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:853: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -879,10 +881,10 @@ CFLAGS=`echo "$CFLAGS" | sed 's/-g//g'` if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:883: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:885: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:886: checking whether cc understands -c and -o together" >&5 +echo "configure:888: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -894,16 +896,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:900: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:901: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:908: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:909: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -930,7 +932,7 @@ EOF fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:934: checking how to run the C preprocessor" >&5 +echo "configure:936: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -945,13 +947,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:955: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -962,13 +964,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:974: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -992,13 +994,13 @@ echo "$ac_t""$CPP" 1>&6 if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:996: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:998: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -1016,7 +1018,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -1045,7 +1047,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1049: checking for $ac_word" >&5 +echo "configure:1051: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1076,7 +1078,7 @@ test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1080: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 +echo "configure:1082: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1086,11 +1088,11 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cxx_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1116,12 +1118,12 @@ if test $ac_cv_prog_cxx_works = no; then { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1120: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1122: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 cross_compiling=$ac_cv_prog_cxx_cross echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 -echo "configure:1125: checking whether we are using GNU C++" >&5 +echo "configure:1127: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1130,7 +1132,7 @@ else yes; #endif EOF -if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no @@ -1145,7 +1147,7 @@ if test $ac_cv_prog_gxx = yes; then ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -echo "configure:1149: checking whether ${CXX-g++} accepts -g" >&5 +echo "configure:1151: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1173,7 +1175,7 @@ else fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 -echo "configure:1177: checking how to run the C++ preprocessor" >&5 +echo "configure:1179: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1186,12 +1188,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1197: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1223,7 +1225,7 @@ CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-g//g'` # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1227: checking for $ac_word" >&5 +echo "configure:1229: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1253,7 +1255,7 @@ fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1257: checking for $ac_word" >&5 +echo "configure:1259: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1310,7 +1312,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1314: checking for a BSD compatible install" >&5 +echo "configure:1316: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1361,7 +1363,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1365: checking whether ln -s works" >&5 +echo "configure:1367: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1387,7 +1389,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1391: checking for $ac_word" >&5 +echo "configure:1393: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1417,7 +1419,7 @@ done echo $ac_n "checking "make for VPATH support"""... $ac_c" 1>&6 -echo "configure:1421: checking "make for VPATH support"" >&5 +echo "configure:1423: checking "make for VPATH support"" >&5 cat - << EOF > confMake check : file cp \$? \$@ @@ -1447,7 +1449,7 @@ fi # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:1451: checking for X" >&5 +echo "configure:1453: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -1509,12 +1511,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -1583,14 +1585,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -1696,17 +1698,17 @@ else case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:1700: checking whether -R must be followed by a space" >&5 +echo "configure:1702: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_R_nospace=yes else @@ -1722,14 +1724,14 @@ rm -f conftest* else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_R_space=yes else @@ -1761,7 +1763,7 @@ rm -f conftest* # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:1765: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:1767: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1769,7 +1771,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1802,7 +1804,7 @@ fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:1806: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:1808: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1810,7 +1812,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1850,12 +1852,12 @@ fi # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:1854: checking for gethostbyname" >&5 +echo "configure:1856: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -1899,7 +1901,7 @@ fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:1903: checking for gethostbyname in -lnsl" >&5 +echo "configure:1905: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1907,7 +1909,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1948,12 +1950,12 @@ fi # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:1952: checking for connect" >&5 +echo "configure:1954: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -1997,7 +1999,7 @@ fi if test $ac_cv_func_connect = no; then echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:2001: checking for connect in -lsocket" >&5 +echo "configure:2003: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2005,7 +2007,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2040,12 +2042,12 @@ fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:2044: checking for remove" >&5 +echo "configure:2046: checking for remove" >&5 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_remove=yes" else @@ -2089,7 +2091,7 @@ fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:2093: checking for remove in -lposix" >&5 +echo "configure:2095: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2097,7 +2099,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2132,12 +2134,12 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:2136: checking for shmat" >&5 +echo "configure:2138: checking for shmat" >&5 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else @@ -2181,7 +2183,7 @@ fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:2185: checking for shmat in -lipc" >&5 +echo "configure:2187: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2189,7 +2191,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lipc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2233,7 +2235,7 @@ fi # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 -echo "configure:2237: checking for IceConnectionNumber in -lICE" >&5 +echo "configure:2239: checking for IceConnectionNumber in -lICE" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2241,7 +2243,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lICE $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2282,12 +2284,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:2286: checking for $ac_hdr that defines DIR" >&5 +echo "configure:2288: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -2295,7 +2297,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2320,7 +2322,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2324: checking for opendir in -ldir" >&5 +echo "configure:2326: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2328,7 +2330,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2361,7 +2363,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2365: checking for opendir in -lx" >&5 +echo "configure:2367: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2369,7 +2371,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2403,12 +2405,12 @@ fi fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:2407: checking for ANSI C header files" >&5 +echo "configure:2409: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2416,7 +2418,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2420: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2422: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2433,7 +2435,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2451,7 +2453,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2472,7 +2474,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -2483,7 +2485,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -2507,12 +2509,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2511: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2513: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2528,7 +2530,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2552,17 +2554,17 @@ for ac_hdr in fcntl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2556: checking for $ac_hdr" >&5 +echo "configure:2558: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2592,17 +2594,17 @@ for ac_hdr in limits.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2596: checking for $ac_hdr" >&5 +echo "configure:2598: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2632,17 +2634,17 @@ for ac_hdr in sys/file.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2636: checking for $ac_hdr" >&5 +echo "configure:2638: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2672,17 +2674,17 @@ for ac_hdr in sys/time.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2676: checking for $ac_hdr" >&5 +echo "configure:2678: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2686: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2688: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2712,17 +2714,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2716: checking for $ac_hdr" >&5 +echo "configure:2718: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2726: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2728: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2752,17 +2754,17 @@ for ac_hdr in fnmatch.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2756: checking for $ac_hdr" >&5 +echo "configure:2758: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2768: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2792,17 +2794,17 @@ for ac_hdr in linux/joystick.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2796: checking for $ac_hdr" >&5 +echo "configure:2798: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2808: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2835,12 +2837,12 @@ fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:2839: checking for vprintf" >&5 +echo "configure:2841: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else @@ -2887,12 +2889,12 @@ fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:2891: checking for _doprnt" >&5 +echo "configure:2893: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else @@ -2940,12 +2942,12 @@ fi fi echo $ac_n "checking for vsnprintf""... $ac_c" 1>&6 -echo "configure:2944: checking for vsnprintf" >&5 +echo "configure:2946: checking for vsnprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vsnprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_vsnprintf=yes" else @@ -3000,17 +3002,17 @@ for ac_hdr in iostream do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3004: checking for $ac_hdr" >&5 +echo "configure:3006: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3014: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3016: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3051,12 +3053,12 @@ cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3055: checking for uid_t in sys/types.h" >&5 +echo "configure:3057: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3085,7 +3087,7 @@ EOF fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 -echo "configure:3089: checking type of array argument to getgroups" >&5 +echo "configure:3091: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3093,7 +3095,7 @@ else ac_cv_type_getgroups=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else @@ -3132,7 +3134,7 @@ fi if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext < EOF @@ -3156,12 +3158,12 @@ EOF echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3160: checking for mode_t" >&5 +echo "configure:3162: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3189,12 +3191,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3193: checking for off_t" >&5 +echo "configure:3195: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3222,12 +3224,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3226: checking for pid_t" >&5 +echo "configure:3228: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3255,12 +3257,12 @@ EOF fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3259: checking return type of signal handlers" >&5 +echo "configure:3261: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3277,7 +3279,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3296,12 +3298,12 @@ EOF echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3300: checking for size_t" >&5 +echo "configure:3302: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3329,12 +3331,12 @@ EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3333: checking for uid_t in sys/types.h" >&5 +echo "configure:3335: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3365,12 +3367,12 @@ fi echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 -echo "configure:3369: checking whether stat file-mode macros are broken" >&5 +echo "configure:3371: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3421,12 +3423,12 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:3425: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:3427: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3435,7 +3437,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:3439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -3456,12 +3458,12 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:3460: checking for st_blksize in struct stat" >&5 +echo "configure:3462: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3469,7 +3471,7 @@ int main() { struct stat s; s.st_blksize; ; return 0; } EOF -if { (eval echo configure:3473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3475: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else @@ -3490,12 +3492,12 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:3494: checking for st_blocks in struct stat" >&5 +echo "configure:3496: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3503,7 +3505,7 @@ int main() { struct stat s; s.st_blocks; ; return 0; } EOF -if { (eval echo configure:3507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else @@ -3526,12 +3528,12 @@ else fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3530: checking for st_rdev in struct stat" >&5 +echo "configure:3532: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3539,7 +3541,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3560,12 +3562,12 @@ EOF fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:3564: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:3566: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3573,7 +3575,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:3577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3579: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -3594,12 +3596,12 @@ EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:3598: checking for tm_zone in struct tm" >&5 +echo "configure:3600: checking for tm_zone in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> @@ -3607,7 +3609,7 @@ int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF -if { (eval echo configure:3611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3613: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else @@ -3627,12 +3629,12 @@ EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:3631: checking for tzname" >&5 +echo "configure:3633: checking for tzname" >&5 if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ @@ -3642,7 +3644,7 @@ int main() { atoi(*tzname); ; return 0; } EOF -if { (eval echo configure:3646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_var_tzname=yes else @@ -3666,12 +3668,12 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3670: checking for working const" >&5 +echo "configure:3672: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3726: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3741,21 +3743,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3745: checking for inline" >&5 +echo "configure:3747: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3781,14 +3783,14 @@ EOF esac echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3785: checking whether char is unsigned" >&5 +echo "configure:3787: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3844,7 +3846,7 @@ EOF fi echo $ac_n "checking for long double""... $ac_c" 1>&6 -echo "configure:3848: checking for long double" >&5 +echo "configure:3850: checking for long double" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3855,7 +3857,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_long_double=yes else @@ -3888,14 +3890,14 @@ fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3892: checking whether byte ordering is bigendian" >&5 +echo "configure:3894: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3906,11 +3908,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3910: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3921,7 +3923,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3941,7 +3943,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3979,7 +3981,7 @@ fi echo $ac_n "checking size of int *""... $ac_c" 1>&6 -echo "configure:3983: checking size of int *" >&5 +echo "configure:3985: checking size of int *" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int_p'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3987,7 +3989,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -3998,7 +4000,7 @@ main() exit(0); } EOF -if { (eval echo configure:4002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int_p=`cat conftestval` else @@ -4018,7 +4020,7 @@ EOF echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:4022: checking size of int" >&5 +echo "configure:4024: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4026,7 +4028,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -4037,7 +4039,7 @@ main() exit(0); } EOF -if { (eval echo configure:4041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -4057,7 +4059,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:4061: checking size of long" >&5 +echo "configure:4063: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4065,7 +4067,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -4076,7 +4078,7 @@ main() exit(0); } EOF -if { (eval echo configure:4080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -4100,7 +4102,7 @@ EOF echo $ac_n "checking for long file names""... $ac_c" 1>&6 -echo "configure:4104: checking for long file names" >&5 +echo "configure:4106: checking for long file names" >&5 if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4151,7 +4153,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4155: checking for $ac_word" >&5 +echo "configure:4157: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4184,7 +4186,7 @@ test -n "$YACC" || YACC="yacc" # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4188: checking for $ac_word" >&5 +echo "configure:4190: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4217,7 +4219,7 @@ then *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 -echo "configure:4221: checking for yywrap in -l$ac_lib" >&5 +echo "configure:4223: checking for yywrap in -l$ac_lib" >&5 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4225,7 +4227,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:4242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4259,7 +4261,7 @@ fi fi echo $ac_n "checking lex output file root""... $ac_c" 1>&6 -echo "configure:4263: checking lex output file root" >&5 +echo "configure:4265: checking lex output file root" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4280,7 +4282,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 -echo "configure:4284: checking whether yytext is a pointer" >&5 +echo "configure:4286: checking whether yytext is a pointer" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4292,14 +4294,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS="$LIBS" LIBS="$LIBS $LEXLIB" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:4305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_prog_lex_yytext_pointer=yes else @@ -4333,7 +4335,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:4337: checking host system type" >&5 +echo "configure:4339: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -4596,7 +4598,7 @@ DEFAULT_wxUSE_WCSRTOMBS=0 echo $ac_n "checking "for gtk"""... $ac_c" 1>&6 -echo "configure:4600: checking "for gtk"" >&5 +echo "configure:4602: checking "for gtk"" >&5 # Check whether --with-gtk or --without-gtk was given. if test "${with_gtk+set}" = set; then withval="$with_gtk" @@ -4626,7 +4628,7 @@ fi echo $ac_n "checking "for qt"""... $ac_c" 1>&6 -echo "configure:4630: checking "for qt"" >&5 +echo "configure:4632: checking "for qt"" >&5 # Check whether --with-qt or --without-qt was given. if test "${with_qt+set}" = set; then withval="$with_qt" @@ -4656,7 +4658,7 @@ fi echo $ac_n "checking "for motif"""... $ac_c" 1>&6 -echo "configure:4660: checking "for motif"" >&5 +echo "configure:4662: checking "for motif"" >&5 # Check whether --with-motif or --without-motif was given. if test "${with_motif+set}" = set; then withval="$with_motif" @@ -4687,7 +4689,7 @@ fi echo $ac_n "checking "for shared"""... $ac_c" 1>&6 -echo "configure:4691: checking "for shared"" >&5 +echo "configure:4693: checking "for shared"" >&5 # Check whether --with-shared or --without-shared was given. if test "${with_shared+set}" = set; then withval="$with_shared" @@ -4717,7 +4719,7 @@ fi echo $ac_n "checking "for optimise"""... $ac_c" 1>&6 -echo "configure:4721: checking "for optimise"" >&5 +echo "configure:4723: checking "for optimise"" >&5 # Check whether --with-optimise or --without-optimise was given. if test "${with_optimise+set}" = set; then withval="$with_optimise" @@ -4747,7 +4749,7 @@ fi echo $ac_n "checking "for debug_flag"""... $ac_c" 1>&6 -echo "configure:4751: checking "for debug_flag"" >&5 +echo "configure:4753: checking "for debug_flag"" >&5 # Check whether --with-debug_flag or --without-debug_flag was given. if test "${with_debug_flag+set}" = set; then withval="$with_debug_flag" @@ -4777,7 +4779,7 @@ fi echo $ac_n "checking "for debug_info"""... $ac_c" 1>&6 -echo "configure:4781: checking "for debug_info"" >&5 +echo "configure:4783: checking "for debug_info"" >&5 # Check whether --with-debug_info or --without-debug_info was given. if test "${with_debug_info+set}" = set; then withval="$with_debug_info" @@ -4807,7 +4809,7 @@ fi echo $ac_n "checking "for debug_gdb"""... $ac_c" 1>&6 -echo "configure:4811: checking "for debug_gdb"" >&5 +echo "configure:4813: checking "for debug_gdb"" >&5 # Check whether --with-debug_gdb or --without-debug_gdb was given. if test "${with_debug_gdb+set}" = set; then withval="$with_debug_gdb" @@ -4837,7 +4839,7 @@ fi echo $ac_n "checking "for mem_tracing"""... $ac_c" 1>&6 -echo "configure:4841: checking "for mem_tracing"" >&5 +echo "configure:4843: checking "for mem_tracing"" >&5 # Check whether --with-mem_tracing or --without-mem_tracing was given. if test "${with_mem_tracing+set}" = set; then withval="$with_mem_tracing" @@ -4867,7 +4869,7 @@ fi echo $ac_n "checking "for dmalloc"""... $ac_c" 1>&6 -echo "configure:4871: checking "for dmalloc"" >&5 +echo "configure:4873: checking "for dmalloc"" >&5 # Check whether --with-dmalloc or --without-dmalloc was given. if test "${with_dmalloc+set}" = set; then withval="$with_dmalloc" @@ -4897,7 +4899,7 @@ fi echo $ac_n "checking "for profile"""... $ac_c" 1>&6 -echo "configure:4901: checking "for profile"" >&5 +echo "configure:4903: checking "for profile"" >&5 # Check whether --with-profile or --without-profile was given. if test "${with_profile+set}" = set; then withval="$with_profile" @@ -4927,7 +4929,7 @@ fi echo $ac_n "checking "for apple_ieee"""... $ac_c" 1>&6 -echo "configure:4931: checking "for apple_ieee"" >&5 +echo "configure:4933: checking "for apple_ieee"" >&5 # Check whether --with-apple_ieee or --without-apple_ieee was given. if test "${with_apple_ieee+set}" = set; then withval="$with_apple_ieee" @@ -4958,7 +4960,7 @@ fi echo $ac_n "checking "for zlib"""... $ac_c" 1>&6 -echo "configure:4962: checking "for zlib"" >&5 +echo "configure:4964: checking "for zlib"" >&5 # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" @@ -4988,7 +4990,7 @@ fi echo $ac_n "checking "for libpng"""... $ac_c" 1>&6 -echo "configure:4992: checking "for libpng"" >&5 +echo "configure:4994: checking "for libpng"" >&5 # Check whether --with-libpng or --without-libpng was given. if test "${with_libpng+set}" = set; then withval="$with_libpng" @@ -5018,7 +5020,7 @@ fi echo $ac_n "checking "for odbc"""... $ac_c" 1>&6 -echo "configure:5022: checking "for odbc"" >&5 +echo "configure:5024: checking "for odbc"" >&5 # Check whether --with-odbc or --without-odbc was given. if test "${with_odbc+set}" = set; then withval="$with_odbc" @@ -5048,7 +5050,7 @@ fi echo $ac_n "checking "for opengl"""... $ac_c" 1>&6 -echo "configure:5052: checking "for opengl"" >&5 +echo "configure:5054: checking "for opengl"" >&5 # Check whether --with-opengl or --without-opengl was given. if test "${with_opengl+set}" = set; then withval="$with_opengl" @@ -5079,7 +5081,7 @@ fi echo $ac_n "checking "for gauge"""... $ac_c" 1>&6 -echo "configure:5083: checking "for gauge"" >&5 +echo "configure:5085: checking "for gauge"" >&5 # Check whether --with-gauge or --without-gauge was given. if test "${with_gauge+set}" = set; then withval="$with_gauge" @@ -5109,7 +5111,7 @@ fi echo $ac_n "checking "for combobox"""... $ac_c" 1>&6 -echo "configure:5113: checking "for combobox"" >&5 +echo "configure:5115: checking "for combobox"" >&5 # Check whether --with-combobox or --without-combobox was given. if test "${with_combobox+set}" = set; then withval="$with_combobox" @@ -5139,7 +5141,7 @@ fi echo $ac_n "checking "for scrollbar"""... $ac_c" 1>&6 -echo "configure:5143: checking "for scrollbar"" >&5 +echo "configure:5145: checking "for scrollbar"" >&5 # Check whether --with-scrollbar or --without-scrollbar was given. if test "${with_scrollbar+set}" = set; then withval="$with_scrollbar" @@ -5169,7 +5171,7 @@ fi echo $ac_n "checking "for listctrl"""... $ac_c" 1>&6 -echo "configure:5173: checking "for listctrl"" >&5 +echo "configure:5175: checking "for listctrl"" >&5 # Check whether --with-listctrl or --without-listctrl was given. if test "${with_listctrl+set}" = set; then withval="$with_listctrl" @@ -5199,7 +5201,7 @@ fi echo $ac_n "checking "for treectrl"""... $ac_c" 1>&6 -echo "configure:5203: checking "for treectrl"" >&5 +echo "configure:5205: checking "for treectrl"" >&5 # Check whether --with-treectrl or --without-treectrl was given. if test "${with_treectrl+set}" = set; then withval="$with_treectrl" @@ -5229,7 +5231,7 @@ fi echo $ac_n "checking "for grid"""... $ac_c" 1>&6 -echo "configure:5233: checking "for grid"" >&5 +echo "configure:5235: checking "for grid"" >&5 # Check whether --with-grid or --without-grid was given. if test "${with_grid+set}" = set; then withval="$with_grid" @@ -5259,7 +5261,7 @@ fi echo $ac_n "checking "for tab_dialog"""... $ac_c" 1>&6 -echo "configure:5263: checking "for tab_dialog"" >&5 +echo "configure:5265: checking "for tab_dialog"" >&5 # Check whether --with-tab_dialog or --without-tab_dialog was given. if test "${with_tab_dialog+set}" = set; then withval="$with_tab_dialog" @@ -5289,7 +5291,7 @@ fi echo $ac_n "checking "for notebook"""... $ac_c" 1>&6 -echo "configure:5293: checking "for notebook"" >&5 +echo "configure:5295: checking "for notebook"" >&5 # Check whether --with-notebook or --without-notebook was given. if test "${with_notebook+set}" = set; then withval="$with_notebook" @@ -5320,7 +5322,7 @@ fi echo $ac_n "checking "for timedate"""... $ac_c" 1>&6 -echo "configure:5324: checking "for timedate"" >&5 +echo "configure:5326: checking "for timedate"" >&5 # Check whether --with-timedate or --without-timedate was given. if test "${with_timedate+set}" = set; then withval="$with_timedate" @@ -5350,7 +5352,7 @@ fi echo $ac_n "checking "for fraction"""... $ac_c" 1>&6 -echo "configure:5354: checking "for fraction"" >&5 +echo "configure:5356: checking "for fraction"" >&5 # Check whether --with-fraction or --without-fraction was given. if test "${with_fraction+set}" = set; then withval="$with_fraction" @@ -5380,7 +5382,7 @@ fi echo $ac_n "checking "for log"""... $ac_c" 1>&6 -echo "configure:5384: checking "for log"" >&5 +echo "configure:5386: checking "for log"" >&5 # Check whether --with-log or --without-log was given. if test "${with_log+set}" = set; then withval="$with_log" @@ -5410,7 +5412,7 @@ fi echo $ac_n "checking "for intl"""... $ac_c" 1>&6 -echo "configure:5414: checking "for intl"" >&5 +echo "configure:5416: checking "for intl"" >&5 # Check whether --with-intl or --without-intl was given. if test "${with_intl+set}" = set; then withval="$with_intl" @@ -5440,7 +5442,7 @@ fi echo $ac_n "checking "for config"""... $ac_c" 1>&6 -echo "configure:5444: checking "for config"" >&5 +echo "configure:5446: checking "for config"" >&5 # Check whether --with-config or --without-config was given. if test "${with_config+set}" = set; then withval="$with_config" @@ -5470,7 +5472,7 @@ fi echo $ac_n "checking "for streams"""... $ac_c" 1>&6 -echo "configure:5474: checking "for streams"" >&5 +echo "configure:5476: checking "for streams"" >&5 # Check whether --with-streams or --without-streams was given. if test "${with_streams+set}" = set; then withval="$with_streams" @@ -5500,7 +5502,7 @@ fi echo $ac_n "checking "for serial"""... $ac_c" 1>&6 -echo "configure:5504: checking "for serial"" >&5 +echo "configure:5506: checking "for serial"" >&5 # Check whether --with-serial or --without-serial was given. if test "${with_serial+set}" = set; then withval="$with_serial" @@ -5530,7 +5532,7 @@ fi echo $ac_n "checking "for file"""... $ac_c" 1>&6 -echo "configure:5534: checking "for file"" >&5 +echo "configure:5536: checking "for file"" >&5 # Check whether --with-file or --without-file was given. if test "${with_file+set}" = set; then withval="$with_file" @@ -5560,7 +5562,7 @@ fi echo $ac_n "checking "for textfile"""... $ac_c" 1>&6 -echo "configure:5564: checking "for textfile"" >&5 +echo "configure:5566: checking "for textfile"" >&5 # Check whether --with-textfile or --without-textfile was given. if test "${with_textfile+set}" = set; then withval="$with_textfile" @@ -5591,7 +5593,7 @@ fi echo $ac_n "checking "for afmfonts"""... $ac_c" 1>&6 -echo "configure:5595: checking "for afmfonts"" >&5 +echo "configure:5597: checking "for afmfonts"" >&5 # Check whether --with-afmfonts or --without-afmfonts was given. if test "${with_afmfonts+set}" = set; then withval="$with_afmfonts" @@ -5621,7 +5623,7 @@ fi echo $ac_n "checking "for normalized"""... $ac_c" 1>&6 -echo "configure:5625: checking "for normalized"" >&5 +echo "configure:5627: checking "for normalized"" >&5 # Check whether --with-normalized or --without-normalized was given. if test "${with_normalized+set}" = set; then withval="$with_normalized" @@ -5651,7 +5653,7 @@ fi echo $ac_n "checking "for postscript"""... $ac_c" 1>&6 -echo "configure:5655: checking "for postscript"" >&5 +echo "configure:5657: checking "for postscript"" >&5 # Check whether --with-postscript or --without-postscript was given. if test "${with_postscript+set}" = set; then withval="$with_postscript" @@ -5682,7 +5684,7 @@ fi echo $ac_n "checking "for unicode"""... $ac_c" 1>&6 -echo "configure:5686: checking "for unicode"" >&5 +echo "configure:5688: checking "for unicode"" >&5 # Check whether --with-unicode or --without-unicode was given. if test "${with_unicode+set}" = set; then withval="$with_unicode" @@ -5712,7 +5714,7 @@ fi echo $ac_n "checking "for wcsrtombs"""... $ac_c" 1>&6 -echo "configure:5716: checking "for wcsrtombs"" >&5 +echo "configure:5718: checking "for wcsrtombs"" >&5 # Check whether --with-wcsrtombs or --without-wcsrtombs was given. if test "${with_wcsrtombs+set}" = set; then withval="$with_wcsrtombs" @@ -5743,7 +5745,7 @@ fi echo $ac_n "checking "for wxresources"""... $ac_c" 1>&6 -echo "configure:5747: checking "for wxresources"" >&5 +echo "configure:5749: checking "for wxresources"" >&5 # Check whether --with-wxresources or --without-wxresources was given. if test "${with_wxresources+set}" = set; then withval="$with_wxresources" @@ -5773,7 +5775,7 @@ fi echo $ac_n "checking "for prologio"""... $ac_c" 1>&6 -echo "configure:5777: checking "for prologio"" >&5 +echo "configure:5779: checking "for prologio"" >&5 # Check whether --with-prologio or --without-prologio was given. if test "${with_prologio+set}" = set; then withval="$with_prologio" @@ -5803,7 +5805,7 @@ fi echo $ac_n "checking "for RPC"""... $ac_c" 1>&6 -echo "configure:5807: checking "for RPC"" >&5 +echo "configure:5809: checking "for RPC"" >&5 # Check whether --with-rpc or --without-rpc was given. if test "${with_rpc+set}" = set; then withval="$with_rpc" @@ -5834,7 +5836,7 @@ fi echo $ac_n "checking "for IPC"""... $ac_c" 1>&6 -echo "configure:5838: checking "for IPC"" >&5 +echo "configure:5840: checking "for IPC"" >&5 # Check whether --with-ipc or --without-ipc was given. if test "${with_ipc+set}" = set; then withval="$with_ipc" @@ -5864,7 +5866,7 @@ fi echo $ac_n "checking "for resources"""... $ac_c" 1>&6 -echo "configure:5868: checking "for resources"" >&5 +echo "configure:5870: checking "for resources"" >&5 # Check whether --with-resources or --without-resources was given. if test "${with_resources+set}" = set; then withval="$with_resources" @@ -5894,7 +5896,7 @@ fi echo $ac_n "checking "for clipboard"""... $ac_c" 1>&6 -echo "configure:5898: checking "for clipboard"" >&5 +echo "configure:5900: checking "for clipboard"" >&5 # Check whether --with-clipboard or --without-clipboard was given. if test "${with_clipboard+set}" = set; then withval="$with_clipboard" @@ -5924,7 +5926,7 @@ fi echo $ac_n "checking "for dnd"""... $ac_c" 1>&6 -echo "configure:5928: checking "for dnd"" >&5 +echo "configure:5930: checking "for dnd"" >&5 # Check whether --with-dnd or --without-dnd was given. if test "${with_dnd+set}" = set; then withval="$with_dnd" @@ -5954,7 +5956,7 @@ fi echo $ac_n "checking "for constrains"""... $ac_c" 1>&6 -echo "configure:5958: checking "for constrains"" >&5 +echo "configure:5960: checking "for constrains"" >&5 # Check whether --with-constraints or --without-constraints was given. if test "${with_constraints+set}" = set; then withval="$with_constraints" @@ -5985,7 +5987,7 @@ fi echo $ac_n "checking "for mdi"""... $ac_c" 1>&6 -echo "configure:5989: checking "for mdi"" >&5 +echo "configure:5991: checking "for mdi"" >&5 # Check whether --with-mdi or --without-mdi was given. if test "${with_mdi+set}" = set; then withval="$with_mdi" @@ -6015,7 +6017,7 @@ fi echo $ac_n "checking "for docview"""... $ac_c" 1>&6 -echo "configure:6019: checking "for docview"" >&5 +echo "configure:6021: checking "for docview"" >&5 # Check whether --with-docview or --without-docview was given. if test "${with_docview+set}" = set; then withval="$with_docview" @@ -6045,7 +6047,7 @@ fi echo $ac_n "checking "for printarch"""... $ac_c" 1>&6 -echo "configure:6049: checking "for printarch"" >&5 +echo "configure:6051: checking "for printarch"" >&5 # Check whether --with-printarch or --without-printarch was given. if test "${with_printarch+set}" = set; then withval="$with_printarch" @@ -6075,7 +6077,7 @@ fi echo $ac_n "checking "for help"""... $ac_c" 1>&6 -echo "configure:6079: checking "for help"" >&5 +echo "configure:6081: checking "for help"" >&5 # Check whether --with-help or --without-help was given. if test "${with_help+set}" = set; then withval="$with_help" @@ -6157,7 +6159,7 @@ fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6161: checking for $ac_word" >&5 +echo "configure:6163: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6188,7 +6190,7 @@ fi min_gtk_version=1.0.4 echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 -echo "configure:6192: checking for GTK - version >= $min_gtk_version" >&5 +echo "configure:6194: checking for GTK - version >= $min_gtk_version" >&5 no_gtk="" if test "$GTK_CONFIG" != "no" ; then GTK_CFLAGS=`$GTK_CONFIG --cflags` @@ -6201,7 +6203,7 @@ echo "configure:6192: checking for GTK - version >= $min_gtk_version" >&5 echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext < @@ -6225,7 +6227,7 @@ main () } EOF -if { (eval echo configure:6229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:6231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -6265,7 +6267,7 @@ fi if test "$wxUSE_QT" = 1; then echo $ac_n "checking for Qt includes""... $ac_c" 1>&6 -echo "configure:6269: checking for Qt includes" >&5 +echo "configure:6271: checking for Qt includes" >&5 ac_find_includes= for ac_dir in $SEARCH_INCLUDE; @@ -6279,7 +6281,7 @@ for ac_dir in $SEARCH_INCLUDE; if test "$ac_find_includes" != "" ; then echo "$ac_t""found $ac_find_includes" 1>&6 echo $ac_n "checking for Qt library""... $ac_c" 1>&6 -echo "configure:6283: checking for Qt library" >&5 +echo "configure:6285: checking for Qt library" >&5 ac_find_libraries= for ac_dir in $SEARCH_LIB; @@ -6330,7 +6332,7 @@ fi if test "$wxUSE_MOTIF" = 1; then echo $ac_n "checking for Motif/Lesstif includes""... $ac_c" 1>&6 -echo "configure:6334: checking for Motif/Lesstif includes" >&5 +echo "configure:6336: checking for Motif/Lesstif includes" >&5 ac_find_includes= for ac_dir in $SEARCH_INCLUDE; @@ -6344,7 +6346,7 @@ for ac_dir in $SEARCH_INCLUDE; if test "$ac_find_includes" != "" ; then echo "$ac_t""found $ac_find_includes" 1>&6 echo $ac_n "checking for Motif/Lesstif library""... $ac_c" 1>&6 -echo "configure:6348: checking for Motif/Lesstif library" >&5 +echo "configure:6350: checking for Motif/Lesstif library" >&5 ac_find_libraries= for ac_dir in $SEARCH_LIB; @@ -6381,7 +6383,7 @@ for ac_dir in $SEARCH_LIB; CHECK_INCLUDE="$CHECK_INCLUDE $ac_path_to_include" echo "$ac_t""found at $ac_find_libraries" 1>&6 echo $ac_n "checking for Xt library""... $ac_c" 1>&6 -echo "configure:6385: checking for Xt library" >&5 +echo "configure:6387: checking for Xt library" >&5 ac_find_libraries= for ac_dir in $SEARCH_LIB; @@ -6407,7 +6409,7 @@ for ac_dir in $SEARCH_LIB; CHECK_LINK="$CHECK_LIB $ac_path_to_link" echo "$ac_t""found at $ac_find_libraries" 1>&6 echo $ac_n "checking for Xpm library""... $ac_c" 1>&6 -echo "configure:6411: checking for Xpm library" >&5 +echo "configure:6413: checking for Xpm library" >&5 ac_find_libraries= for ac_dir in $SEARCH_LIB; @@ -6857,7 +6859,7 @@ fi echo $ac_n "checking for main in -ldl""... $ac_c" 1>&6 -echo "configure:6861: checking for main in -ldl" >&5 +echo "configure:6863: checking for main in -ldl" >&5 ac_lib_var=`echo dl'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6865,14 +6867,14 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:6878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6902,7 +6904,7 @@ UNIX_THREAD="gtk/threadno.cpp" echo $ac_n "checking "for threads"""... $ac_c" 1>&6 -echo "configure:6906: checking "for threads"" >&5 +echo "configure:6908: checking "for threads"" >&5 # Check whether --with-threads or --without-threads was given. if test "${with_threads+set}" = set; then withval="$with_threads" @@ -6936,7 +6938,7 @@ if test "$wxUSE_THREADS" = "1"; then solaris*) echo $ac_n "checking for thr_create in -lthread""... $ac_c" 1>&6 -echo "configure:6940: checking for thr_create in -lthread" >&5 +echo "configure:6942: checking for thr_create in -lthread" >&5 ac_lib_var=`echo thread'_'thr_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6944,7 +6946,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lthread $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:6961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6986,7 +6988,7 @@ fi echo $ac_n "checking for pthread_create in -lpthread-0.7""... $ac_c" 1>&6 -echo "configure:6990: checking for pthread_create in -lpthread-0.7" >&5 +echo "configure:6992: checking for pthread_create in -lpthread-0.7" >&5 ac_lib_var=`echo pthread-0.7'_'pthread_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6994,7 +6996,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthread-0.7 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:7011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7029,17 +7031,17 @@ else ac_safe=`echo "sys/prctl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/prctl.h""... $ac_c" 1>&6 -echo "configure:7033: checking for sys/prctl.h" >&5 +echo "configure:7035: checking for sys/prctl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7043: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -7065,7 +7067,7 @@ fi echo $ac_n "checking for pthread_setcanceltype in -lpthread""... $ac_c" 1>&6 -echo "configure:7069: checking for pthread_setcanceltype in -lpthread" >&5 +echo "configure:7071: checking for pthread_setcanceltype in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_setcanceltype | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7073,7 +7075,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:7090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7113,7 +7115,7 @@ fi echo $ac_n "checking for printf in -lposix4""... $ac_c" 1>&6 -echo "configure:7117: checking for printf in -lposix4" >&5 +echo "configure:7119: checking for printf in -lposix4" >&5 ac_lib_var=`echo posix4'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7121,7 +7123,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix4 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:7138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7181,7 +7183,7 @@ OPENGL_LINK= if test "$wxUSE_OPENGL" = 1; then echo $ac_n "checking for OpenGL includes""... $ac_c" 1>&6 -echo "configure:7185: checking for OpenGL includes" >&5 +echo "configure:7187: checking for OpenGL includes" >&5 ac_find_includes= for ac_dir in $SEARCH_INCLUDE; @@ -7196,7 +7198,7 @@ for ac_dir in $SEARCH_INCLUDE; OPENGL_INCLUDE="-I$ac_find_includes" echo "$ac_t""found $ac_find_includes" 1>&6 echo $ac_n "checking for OpenGL library""... $ac_c" 1>&6 -echo "configure:7200: checking for OpenGL library" >&5 +echo "configure:7202: checking for OpenGL library" >&5 ac_find_libraries= for ac_dir in $SEARCH_LIB; diff --git a/include/wx/db.h b/include/wx/db.h index 25edff65da..190144804d 100644 --- a/include/wx/db.h +++ b/include/wx/db.h @@ -39,56 +39,75 @@ #include #endif + +#ifdef __WXGTK__ + +extern "C" { +#include <../iodbc/isql.h> +#include <../iodbc/isqlext.h> +#include <../iodbc/odbc_funcs.h> +#include <../iodbc/odbc_types.h> + +typedef float SFLOAT; +typedef double SDOUBLE; +#define ULONG UDWORD + +} + +#else + #define ODBCVER 0x0250 #include #include +#endif + enum enumDummy {enumDum1}; #define SQL_C_BOOLEAN (sizeof(int) == 2 ? SQL_C_USHORT : SQL_C_ULONG) #define SQL_C_ENUM (sizeof(enumDummy) == 2 ? SQL_C_USHORT : SQL_C_ULONG) //glt 2-21-97 // Database Globals -const DB_TYPE_NAME_LEN = 40; -const DB_MAX_STATEMENT_LEN = 2048; -const DB_MAX_WHERE_CLAUSE_LEN = 1024; -const DB_MAX_ERROR_MSG_LEN = 512; -const DB_MAX_ERROR_HISTORY = 5; -const DB_MAX_TABLE_NAME_LEN = 128; -const DB_MAX_COLUMN_NAME_LEN = 128; - -const DB_DATA_TYPE_VARCHAR = 1; -const DB_DATA_TYPE_INTEGER = 2; -const DB_DATA_TYPE_FLOAT = 3; -const DB_DATA_TYPE_DATE = 4; - -const DB_SELECT_KEYFIELDS = 1; -const DB_SELECT_WHERE = 2; -const DB_SELECT_MATCHING = 3; -const DB_SELECT_STATEMENT = 4; - -const DB_UPD_KEYFIELDS = 1; -const DB_UPD_WHERE = 2; - -const DB_DEL_KEYFIELDS = 1; -const DB_DEL_WHERE = 2; -const DB_DEL_MATCHING = 3; - -const DB_WHERE_KEYFIELDS = 1; -const DB_WHERE_MATCHING = 2; - -const DB_CURSOR0 = 0; -const DB_CURSOR1 = 1; -const DB_CURSOR2 = 2; -//const DB_CURSOR3 = 3; -//const DB_CURSOR4 = 4; -//const DB_CURSOR5 = 5; - -const DB_GRANT_SELECT = 1; -const DB_GRANT_INSERT = 2; -const DB_GRANT_UPDATE = 4; -const DB_GRANT_DELETE = 8; -const DB_GRANT_ALL = DB_GRANT_SELECT | DB_GRANT_INSERT | DB_GRANT_UPDATE | DB_GRANT_DELETE; +const int DB_TYPE_NAME_LEN = 40; +const int DB_MAX_STATEMENT_LEN = 2048; +const int DB_MAX_WHERE_CLAUSE_LEN = 1024; +const int DB_MAX_ERROR_MSG_LEN = 512; +const int DB_MAX_ERROR_HISTORY = 5; +const int DB_MAX_TABLE_NAME_LEN = 128; +const int DB_MAX_COLUMN_NAME_LEN = 128; + +const int DB_DATA_TYPE_VARCHAR = 1; +const int DB_DATA_TYPE_INTEGER = 2; +const int DB_DATA_TYPE_FLOAT = 3; +const int DB_DATA_TYPE_DATE = 4; + +const int DB_SELECT_KEYFIELDS = 1; +const int DB_SELECT_WHERE = 2; +const int DB_SELECT_MATCHING = 3; +const int DB_SELECT_STATEMENT = 4; + +const int DB_UPD_KEYFIELDS = 1; +const int DB_UPD_WHERE = 2; + +const int DB_DEL_KEYFIELDS = 1; +const int DB_DEL_WHERE = 2; +const int DB_DEL_MATCHING = 3; + +const int DB_WHERE_KEYFIELDS = 1; +const int DB_WHERE_MATCHING = 2; + +const int DB_CURSOR0 = 0; +const int DB_CURSOR1 = 1; +const int DB_CURSOR2 = 2; +//const int DB_CURSOR3 = 3; +//const int DB_CURSOR4 = 4; +//const int DB_CURSOR5 = 5; + +const int DB_GRANT_SELECT = 1; +const int DB_GRANT_INSERT = 2; +const int DB_GRANT_UPDATE = 4; +const int DB_GRANT_DELETE = 8; +const int DB_GRANT_ALL = DB_GRANT_SELECT | DB_GRANT_INSERT | DB_GRANT_UPDATE | DB_GRANT_DELETE; // ODBC Error codes (derived from ODBC SqlState codes) enum ODBC_ERRORS diff --git a/include/wx/dbtable.h b/include/wx/dbtable.h index 0fa4fef0b9..fe52615bce 100644 --- a/include/wx/dbtable.h +++ b/include/wx/dbtable.h @@ -32,7 +32,7 @@ #include "wx/db.h" -const ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger +const int ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger // The following class is used to define a column of a table. // The wxTable constructor will dynamically allocate as many of @@ -116,7 +116,7 @@ public: // Public member functions wxTable(wxDB *pwxDB, const char *tblName, const int nCols, const char *qryTblName = 0); - ~wxTable(); + virtual ~wxTable(); bool Open(void); bool CreateTable(void); bool CreateIndex(char * idxName, bool unique, int noIdxCols, CidxDef *pIdxDefs); diff --git a/samples/db/dbtest.cpp b/samples/db/dbtest.cpp index b6dc66390a..a05ef94c70 100644 --- a/samples/db/dbtest.cpp +++ b/samples/db/dbtest.cpp @@ -37,6 +37,10 @@ #include #endif //WX_PRECOMP +#ifdef __WXGTK__ +#include "db.xpm" +#endif + #include // Included strictly for reading the text file with the database parameters #include // Required in the file which will get the data source connection diff --git a/samples/db/listdb.h b/samples/db/listdb.h index f510fbf130..f3aa8f24f6 100644 --- a/samples/db/listdb.h +++ b/samples/db/listdb.h @@ -14,12 +14,7 @@ #endif /* -/* -// SYNOPSIS START - Contains dialog class for creating a data table lookup listbox - -// SYNOPSIS STOP */ #ifndef LISTDB_DOT_H diff --git a/src/common/db.cpp b/src/common/db.cpp index 9125384a3f..080b6c44ba 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include #include "wx/db.h" DbList *PtrBegDbList = 0; @@ -308,94 +310,94 @@ bool wxDB::getDbInfo(void) { SWORD cb; - if (SQLGetInfo(hdbc, SQL_SERVER_NAME, dbInf.serverName, 40, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_SERVER_NAME, (UCHAR*) dbInf.serverName, 40, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbInf.databaseName, 128, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DATABASE_NAME, (UCHAR*) dbInf.databaseName, 128, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DBMS_NAME, dbInf.dbmsName, 40, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR*) dbInf.dbmsName, 40, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DBMS_VER, dbInf.dbmsVer, 20, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DBMS_VER, (UCHAR*) dbInf.dbmsVer, 20, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ACTIVE_CONNECTIONS, &dbInf.maxConnections, sizeof(dbInf.maxConnections), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ACTIVE_CONNECTIONS, (UCHAR*) &dbInf.maxConnections, sizeof(dbInf.maxConnections), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ACTIVE_STATEMENTS, &dbInf.maxStmts, sizeof(dbInf.maxStmts), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ACTIVE_STATEMENTS, (UCHAR*) &dbInf.maxStmts, sizeof(dbInf.maxStmts), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DRIVER_NAME, dbInf.driverName, 40, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DRIVER_NAME, (UCHAR*) dbInf.driverName, 40, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DRIVER_ODBC_VER, dbInf.odbcVer, 20, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DRIVER_ODBC_VER, (UCHAR*) dbInf.odbcVer, 20, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ODBC_VER, dbInf.drvMgrOdbcVer, 20, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ODBC_VER, (UCHAR*) dbInf.drvMgrOdbcVer, 20, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DRIVER_VER, dbInf.driverVer, 40, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DRIVER_VER, (UCHAR*) dbInf.driverVer, 40, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ODBC_API_CONFORMANCE, &dbInf.apiConfLvl, sizeof(dbInf.apiConfLvl), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ODBC_API_CONFORMANCE, (UCHAR*) &dbInf.apiConfLvl, sizeof(dbInf.apiConfLvl), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ODBC_SAG_CLI_CONFORMANCE, &dbInf.cliConfLvl, sizeof(dbInf.cliConfLvl), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ODBC_SAG_CLI_CONFORMANCE, (UCHAR*) &dbInf.cliConfLvl, sizeof(dbInf.cliConfLvl), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ODBC_SQL_CONFORMANCE, &dbInf.sqlConfLvl, sizeof(dbInf.sqlConfLvl), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ODBC_SQL_CONFORMANCE, (UCHAR*) &dbInf.sqlConfLvl, sizeof(dbInf.sqlConfLvl), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_OUTER_JOINS, dbInf.outerJoins, 2, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_OUTER_JOINS, (UCHAR*) dbInf.outerJoins, 2, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_PROCEDURES, dbInf.procedureSupport, 2, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_PROCEDURES, (UCHAR*) dbInf.procedureSupport, 2, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_CURSOR_COMMIT_BEHAVIOR, &dbInf.cursorCommitBehavior, sizeof(dbInf.cursorCommitBehavior), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_CURSOR_COMMIT_BEHAVIOR, (UCHAR*) &dbInf.cursorCommitBehavior, sizeof(dbInf.cursorCommitBehavior), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_CURSOR_ROLLBACK_BEHAVIOR, &dbInf.cursorRollbackBehavior, sizeof(dbInf.cursorRollbackBehavior), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_CURSOR_ROLLBACK_BEHAVIOR, (UCHAR*) &dbInf.cursorRollbackBehavior, sizeof(dbInf.cursorRollbackBehavior), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_NON_NULLABLE_COLUMNS, &dbInf.supportNotNullClause, sizeof(dbInf.supportNotNullClause), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_NON_NULLABLE_COLUMNS, (UCHAR*) &dbInf.supportNotNullClause, sizeof(dbInf.supportNotNullClause), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_ODBC_SQL_OPT_IEF, dbInf.supportIEF, 2, &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_ODBC_SQL_OPT_IEF, (UCHAR*) dbInf.supportIEF, 2, &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, &dbInf.txnIsolation, sizeof(dbInf.txnIsolation), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, (UCHAR*) &dbInf.txnIsolation, sizeof(dbInf.txnIsolation), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_TXN_ISOLATION_OPTION, &dbInf.txnIsolationOptions, sizeof(dbInf.txnIsolationOptions), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_TXN_ISOLATION_OPTION, (UCHAR*) &dbInf.txnIsolationOptions, sizeof(dbInf.txnIsolationOptions), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_FETCH_DIRECTION, &dbInf.fetchDirections, sizeof(dbInf.fetchDirections), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_FETCH_DIRECTION, (UCHAR*) &dbInf.fetchDirections, sizeof(dbInf.fetchDirections), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_LOCK_TYPES, &dbInf.lockTypes, sizeof(dbInf.lockTypes), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_LOCK_TYPES, (UCHAR*) &dbInf.lockTypes, sizeof(dbInf.lockTypes), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_POS_OPERATIONS, &dbInf.posOperations, sizeof(dbInf.posOperations), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_POS_OPERATIONS, (UCHAR*) &dbInf.posOperations, sizeof(dbInf.posOperations), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_POSITIONED_STATEMENTS, &dbInf.posStmts, sizeof(dbInf.posStmts), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_POSITIONED_STATEMENTS, (UCHAR*) &dbInf.posStmts, sizeof(dbInf.posStmts), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_SCROLL_CONCURRENCY, &dbInf.scrollConcurrency, sizeof(dbInf.scrollConcurrency), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_SCROLL_CONCURRENCY, (UCHAR*) &dbInf.scrollConcurrency, sizeof(dbInf.scrollConcurrency), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_SCROLL_OPTIONS, &dbInf.scrollOptions, sizeof(dbInf.scrollOptions), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_SCROLL_OPTIONS, (UCHAR*) &dbInf.scrollOptions, sizeof(dbInf.scrollOptions), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_STATIC_SENSITIVITY, &dbInf.staticSensitivity, sizeof(dbInf.staticSensitivity), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_STATIC_SENSITIVITY, (UCHAR*) &dbInf.staticSensitivity, sizeof(dbInf.staticSensitivity), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_TXN_CAPABLE, &dbInf.txnCapable, sizeof(dbInf.txnCapable), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_TXN_CAPABLE, (UCHAR*) &dbInf.txnCapable, sizeof(dbInf.txnCapable), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); - if (SQLGetInfo(hdbc, SQL_LOGIN_TIMEOUT, &dbInf.loginTimeout, sizeof(dbInf.loginTimeout), &cb) != SQL_SUCCESS) + if (SQLGetInfo(hdbc, SQL_LOGIN_TIMEOUT, (UCHAR*) &dbInf.loginTimeout, sizeof(dbInf.loginTimeout), &cb) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); #ifdef DBDEBUG_CONSOLE @@ -625,15 +627,15 @@ bool wxDB::getDataTypeInfo(SWORD fSqlType, SqlTypeInfo &structSQLTypeInfo) return(FALSE); } // Obtain columns from the record - if (SQLGetData(hstmt, 1, SQL_C_CHAR, structSQLTypeInfo.TypeName, DB_TYPE_NAME_LEN, &cbRet) != SQL_SUCCESS) + if (SQLGetData(hstmt, 1, SQL_C_CHAR, (UCHAR*) structSQLTypeInfo.TypeName, DB_TYPE_NAME_LEN, &cbRet) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc, hstmt)); - if (SQLGetData(hstmt, 3, SQL_C_LONG, &structSQLTypeInfo.Precision, 0, &cbRet) != SQL_SUCCESS) + if (SQLGetData(hstmt, 3, SQL_C_LONG, (UCHAR*) &structSQLTypeInfo.Precision, 0, &cbRet) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc, hstmt)); - if (SQLGetData(hstmt, 8, SQL_C_SHORT, &structSQLTypeInfo.CaseSensitive, 0, &cbRet) != SQL_SUCCESS) + if (SQLGetData(hstmt, 8, SQL_C_SHORT, (UCHAR*) &structSQLTypeInfo.CaseSensitive, 0, &cbRet) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc, hstmt)); -// if (SQLGetData(hstmt, 14, SQL_C_SHORT, &structSQLTypeInfo.MinimumScale, 0, &cbRet) != SQL_SUCCESS) +// if (SQLGetData(hstmt, 14, SQL_C_SHORT, (UCHAR*) &structSQLTypeInfo.MinimumScale, 0, &cbRet) != SQL_SUCCESS) // return(DispAllErrors(henv, hdbc, hstmt)); - if (SQLGetData(hstmt, 15, SQL_C_SHORT, &structSQLTypeInfo.MaximumScale, 0, &cbRet) != SQL_SUCCESS) + if (SQLGetData(hstmt, 15, SQL_C_SHORT, (UCHAR*) &structSQLTypeInfo.MaximumScale, 0, &cbRet) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc, hstmt)); if (structSQLTypeInfo.MaximumScale < 0) @@ -1144,9 +1146,9 @@ CcolInf *wxDB::GetColumns(char *tableName[]) delete [] colInf; return(0); } - SQLBindCol(hstmt, 3, SQL_C_CHAR, tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); - SQLBindCol(hstmt, 4, SQL_C_CHAR, colName, DB_MAX_COLUMN_NAME_LEN+1, &cb); - SQLBindCol(hstmt, 5, SQL_C_SSHORT, &sqlDataType, 0, &cb); + SQLBindCol(hstmt, 3, SQL_C_CHAR, (UCHAR*) tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); + SQLBindCol(hstmt, 4, SQL_C_CHAR, (UCHAR*) colName, DB_MAX_COLUMN_NAME_LEN+1, &cb); + SQLBindCol(hstmt, 5, SQL_C_SSHORT, (UCHAR*) &sqlDataType, 0, &cb); while ((retcode = SQLFetch(hstmt)) == SQL_SUCCESS) { if (pass == 1) // First pass, just add up the number of columns @@ -1217,12 +1219,12 @@ bool wxDB::Catalog(char *userID, char *fileName) return(FALSE); } - SQLBindCol(hstmt, 3, SQL_C_CHAR, tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); - SQLBindCol(hstmt, 4, SQL_C_CHAR, colName, DB_MAX_COLUMN_NAME_LEN+1, &cb); - SQLBindCol(hstmt, 5, SQL_C_SSHORT, &sqlDataType, 0, &cb); - SQLBindCol(hstmt, 6, SQL_C_CHAR, typeName, 16, &cb); - SQLBindCol(hstmt, 7, SQL_C_SSHORT, &precision, 0, &cb); - SQLBindCol(hstmt, 8, SQL_C_SSHORT, &length, 0, &cb); + SQLBindCol(hstmt, 3, SQL_C_CHAR, (UCHAR*) tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); + SQLBindCol(hstmt, 4, SQL_C_CHAR, (UCHAR*) colName, DB_MAX_COLUMN_NAME_LEN+1, &cb); + SQLBindCol(hstmt, 5, SQL_C_SSHORT, (UCHAR*) &sqlDataType, 0, &cb); + SQLBindCol(hstmt, 6, SQL_C_CHAR, (UCHAR*) typeName, 16, &cb); + SQLBindCol(hstmt, 7, SQL_C_SSHORT, (UCHAR*) &precision, 0, &cb); + SQLBindCol(hstmt, 8, SQL_C_SSHORT, (UCHAR*) &length, 0, &cb); char outStr[256]; strcpy(tblNameSave,""); diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index decce99426..166381dd6e 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -132,7 +132,7 @@ wxTable::wxTable(wxDB *pwxDB, const char *tblName, const int nCols, const char * // Datasource does not support static cursors. Driver // will substitute a cursor type. Call SQLGetStmtOption() // to determine which cursor type was selected. - if (SQLGetStmtOption(c1, SQL_CURSOR_TYPE, &cursorType) != SQL_SUCCESS) + if (SQLGetStmtOption(c1, SQL_CURSOR_TYPE, (UCHAR*) &cursorType) != SQL_SUCCESS) pDb->DispAllErrors(henv, hdbc, c1); #ifdef _CONSOLE cout << "Static cursor changed to: "; @@ -494,7 +494,7 @@ UWORD wxTable::GetRowNum(void) { UDWORD rowNum; - if (SQLGetStmtOption(hstmt, SQL_ROW_NUMBER, &rowNum) != SQL_SUCCESS) + if (SQLGetStmtOption(hstmt, SQL_ROW_NUMBER, (UCHAR*) &rowNum) != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc, hstmt); return(0); @@ -550,7 +550,7 @@ bool wxTable::bindInsertParams(void) break; } if (SQLBindParameter(hstmtInsert, i+1, SQL_PARAM_INPUT, colDefs[i].SqlCtype, - fSqlType, precision, scale, colDefs[i].PtrDataObj, + fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, precision+1,&colDefs[i].CbValue) != SQL_SUCCESS) return(pDb->DispAllErrors(henv, hdbc, hstmtInsert)); } @@ -605,7 +605,7 @@ bool wxTable::bindUpdateParams(void) break; } if (SQLBindParameter(hstmtUpdate, colNo++, SQL_PARAM_INPUT, colDefs[i].SqlCtype, - fSqlType, precision, scale, colDefs[i].PtrDataObj, + fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, precision+1, &colDefs[i].CbValue) != SQL_SUCCESS) return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate)); } @@ -623,7 +623,7 @@ bool wxTable::bindCols(HSTMT cursor) // Bind each column of the table to a memory address for fetching data for (int i = 0; i < noCols; i++) { - if (SQLBindCol(cursor, i+1, colDefs[i].SqlCtype, colDefs[i].PtrDataObj, + if (SQLBindCol(cursor, i+1, colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj, colDefs[i].SzDataObj, &cb) != SQL_SUCCESS) return(pDb->DispAllErrors(henv, hdbc, cursor)); } @@ -1040,7 +1040,7 @@ void wxTable::GetUpdateStmt(char *pSqlStmt, int typeOfUpd, char *pWhereClause) // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, rowid, ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS) { strcat(pSqlStmt, "ROWID = '"); strcat(pSqlStmt, rowid); @@ -1092,7 +1092,7 @@ void wxTable::GetDeleteStmt(char *pSqlStmt, int typeOfDel, char *pWhereClause) // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, rowid, ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS) { strcat(pSqlStmt, "ROWID = '"); strcat(pSqlStmt, rowid); @@ -1216,9 +1216,11 @@ bool wxTable::IsColNull(int colNo) bool wxTable::CanSelectForUpdate(void) { +#ifndef __WXGTK__ if (pDb->dbInf.posStmts & SQL_PS_SELECT_FOR_UPDATE) return(TRUE); else +#endif return(FALSE); } // wxTable::CanSelectForUpdate() @@ -1327,7 +1329,7 @@ void wxTable::SetColDefs (int index, char *fieldName, int dataType, void *pData, int cType, int size, bool keyField, bool upd, bool insAllow, bool derivedCol) { - if (strlen(fieldName) > DB_MAX_COLUMN_NAME_LEN) // glt 4/21/97 + if (strlen(fieldName) > (uint)DB_MAX_COLUMN_NAME_LEN) // glt 4/21/97 { strncpy (colDefs[index].ColName, fieldName, DB_MAX_COLUMN_NAME_LEN); colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0; // glt 10/23/97 @@ -1439,7 +1441,7 @@ ULONG wxTable::Count(void) } // Obtain the result - if (SQLGetData(hstmtCount, 1, SQL_C_ULONG, &l, sizeof(l), &cb) != SQL_SUCCESS) + if (SQLGetData(hstmtCount, 1, SQL_C_ULONG, (UCHAR*) &l, sizeof(l), &cb) != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc, hstmtCount); return(0); @@ -1480,7 +1482,7 @@ bool wxTable::Refresh(void) // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, rowid, ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS) { strcat(whereClause, queryTableName); strcat(whereClause, ".ROWID = '"); diff --git a/src/gtk.inc b/src/gtk.inc index 63d3aa69ed..149019108e 100644 --- a/src/gtk.inc +++ b/src/gtk.inc @@ -34,7 +34,8 @@ LIB_CPP_SRC=\ common/memory.cpp \ common/module.cpp \ common/object.cpp \ - common/odbc.cpp \ + common/db.cpp \ + common/dbtable.cpp \ common/postscrp.cpp \ common/prntbase.cpp \ common/resource.cpp \ diff --git a/src/iodbc/Changes.log b/src/iodbc/Changes.log index fd43047296..68e651b9a2 100644 --- a/src/iodbc/Changes.log +++ b/src/iodbc/Changes.log @@ -1,58 +1,58 @@ -July 30, 1995, v2.00.beta: - 0. the first release and beta version. +July 30, 1995, v2.00.beta: + 0. the first release and beta version. Sep. 11, 1995, v2.10: - 1. Porting to AIX 3.x and 4.x, by writing dlopen(), - dlsym(), dlclose() interface. - 2. Tested on SCO OpenServer 5.x - 3. Awared of that, unlike s700/s800, exported function - symbols on HP9000 s300/s400 will be prepended with - a '_' prefix by compiler(and this '_' prefix is not - automatically handled by shl_findsym()). Now, it works - fine on s300/s400. - 4. Support driver ODBC call tracing. + 1. Porting to AIX 3.x and 4.x, by writing dlopen(), + dlsym(), dlclose() interface. + 2. Tested on SCO OpenServer 5.x + 3. Awared of that, unlike s700/s800, exported function + symbols on HP9000 s300/s400 will be prepended with + a '_' prefix by compiler(and this '_' prefix is not + automatically handled by shl_findsym()). Now, it works + fine on s300/s400. + 4. Support driver ODBC call tracing. Oct. 12, 1995, v2.11: - 5. Driver's SQLNumResultCols() will automatically be - invoked in driver manager's SQLExecute(), - SQLExecDirect() and SQLParamData() after successfully - (i.e. return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO ) - calling of their correspondent driver functions. This - simplifies the state tracing/checking of the driver - manager a lot and allows store procedures to return - result set and also make iODBC driver manager work - properly with SELECT INTO statements which actually - don't return result sets. - 6. Memory leaks are cleared. - 7. Two bugs in dld.c for AIX are fixed - 8. A bug of setting tracing option is fixed. - 9. The driver will not be unloaded by SQLDisconnect() - but by SQLFreeConnect() or next SQLConnect()/ - SQLDriverConnect()/SQLBrowsConnect() on a different - driver. This will save driver's loading time if it - has been used by a previous connection(even there - is no active connection on this driver). - 10.Another three platforms are supported: - FreeBSD 2.x - Concurrent Max/OS SVR4 1.x - DG/UX 5.x - 11.autoconfig and build -- shell scripts to help modifying - Config.mk and building iodbc driver manager + 5. Driver's SQLNumResultCols() will automatically be + invoked in driver manager's SQLExecute(), + SQLExecDirect() and SQLParamData() after successfully + (i.e. return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO ) + calling of their correspondent driver functions. This + simplifies the state tracing/checking of the driver + manager a lot and allows store procedures to return + result set and also make iODBC driver manager work + properly with SELECT INTO statements which actually + don't return result sets. + 6. Memory leaks are cleared. + 7. Two bugs in dld.c for AIX are fixed + 8. A bug of setting tracing option is fixed. + 9. The driver will not be unloaded by SQLDisconnect() + but by SQLFreeConnect() or next SQLConnect()/ + SQLDriverConnect()/SQLBrowsConnect() on a different + driver. This will save driver's loading time if it + has been used by a previous connection(even there + is no active connection on this driver). + 10.Another three platforms are supported: + FreeBSD 2.x + Concurrent Max/OS SVR4 1.x + DG/UX 5.x + 11.autoconfig and build -- shell scripts to help modifying + Config.mk and building iodbc driver manager Nov. 12, 1995, v2.12 - 12.I realized that a driver manager doesn't aware of - difference between a C5 (i.e. hstmt) and a C6 - (i.e. transaction) states. - 13.The link flags "-lc" has been droped from Linux ELF - section of Config.mk to fix a segment fault problem. - Now, it works fine on Slackware 2.3 and Red Hat 2.0 - (kernel version are 1.2.xx and 1.3.xx respectively). - 14.On FreeBSD 2.x, dlsym() doesn't handle the '_' prefix - prepended to an exportting function symbol by compiler. - So, CLI_NAME_PREFIX needs to be defined as "_SQL" for - FreeBSD 2.x. - 15.Some files are renamed - dld.c -> dlf.c - dld.h -> dlf.h - confg.h -> config.h - 16. Fix a bug on setting tracing options. + 12.I realized that a driver manager doesn't aware of + difference between a C5 (i.e. hstmt) and a C6 + (i.e. transaction) states. + 13.The link flags "-lc" has been droped from Linux ELF + section of Config.mk to fix a segment fault problem. + Now, it works fine on Slackware 2.3 and Red Hat 2.0 + (kernel version are 1.2.xx and 1.3.xx respectively). + 14.On FreeBSD 2.x, dlsym() doesn't handle the '_' prefix + prepended to an exportting function symbol by compiler. + So, CLI_NAME_PREFIX needs to be defined as "_SQL" for + FreeBSD 2.x. + 15.Some files are renamed + dld.c -> dlf.c + dld.h -> dlf.h + confg.h -> config.h + 16. Fix a bug on setting tracing options. diff --git a/src/iodbc/Makefile b/src/iodbc/Makefile index a92adfcd0a..d899c15586 100644 --- a/src/iodbc/Makefile +++ b/src/iodbc/Makefile @@ -1,32 +1,58 @@ -include Version.mk -include Config.mk +include ../Version.mk +include ../Config.mk +INCDIR = . +OUTFILE = iodbc +CFLAGS = -O $(PIC) $(ANSI) -I$(INCDIR) -D$(DLDAPI) $(CFLAGSX)\ + -DVERSION=\"$(VERSION)$(EXTVER)\" +# ODBC adminiatator is statically linked on BSDI 3.1 +# On this one can comment the following line: +# +ODBCDM = $(ODBC_LIBPATH)/$(OUTFILE).$(DLSUFFIX) +OBJS = dlf.o dlproc.o herr.o henv.o hdbc.o hstmt.o connect.o prepare.o\ + execute.o result.o fetch.o info.o catalog.o misc.o itrace.o $(OBJX) +all: $(OBJS) $(ODBCDM) $(ODBC_LIBPATH)/lib$(OUTFILE).a + @rm -f $(ODBC_INCLUDE)/isql.h + @rm -f $(ODBC_INCLUDE)/isqlext.h + @rm -f $(ODBC_INCLUDE)/odbc_types.h + @rm -f $(ODBC_INCLUDE)/odbc_funcs.h + cp isql.h $(ODBC_INCLUDE)/ + cp isqlext.h $(ODBC_INCLUDE)/ + cp odbc_types.h $(ODBC_INCLUDE)/ + cp odbc_funcs.h $(ODBC_INCLUDE)/ + @echo + @echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + @echo + @echo Don\'t forget tu update $(ODBC_LIBPATH)/iodbc.ini with your conf + @echo + @echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + @echo +clean: + \rm -f $(OBJS) -INCDIR = . -OUTDIR = $(HOME) +delete: clean -CFLAGS = -O $(PIC) $(ANSI) -I$(INCDIR) -D$(DLDAPI) $(CFLAGSX)\ - -DVERSION=\"$(VERSION)$(EXTVER)\" +delete_all: delete -ODBCDM = $(OUTDIR)/$(OUTFILE)-$(VERSION).$(DLSUFFIX) +misc.o: misc.c + $(CC) $(CFLAGS) -DFIX_INI_FILE -DDIR_INI_FILE=\"$(ODBC_LIBPATH)\" -c $< -OBJS = dlf.o dlproc.o herr.o henv.o hdbc.o hstmt.o \ - connect.o prepare.o execute.o result.o \ - fetch.o info.o catalog.o misc.o itrace.o $(OBJX) +$(ODBC_LIBPATH)/lib$(OUTFILE).a: $(OBJS) + $(AR) $(ODBC_LIBPATH)/lib$(OUTFILE).a $(OBJS) + $(RANLIB) $(ODBC_LIBPATH)/lib$(OUTFILE).a -all: $(OBJS) +$(ODBCDM): $(OBJS) @echo "Generating iODBC driver manager -->" $(ODBCDM) - @\rm -f $(ODBCDM) - @$(LD) $(LDFLAGS) $(OBJS) $(LIBS) -o $(ODBCDM) + @rm -f $(ODBCDM) + $(LD) $(LDFLAGS) -L$(ODBC_LIBPATH) $(OBJS) -o $(ODBCDM) $(LIBS) + if [ ! -f $(ODBC_LIBPATH)/iodbc.ini ]; then cp iodbc.$(OS) $(ODBC_LIBPATH)/iodbc.ini; fi -clean: - \rm -f $(OBJS) diff --git a/src/iodbc/README b/src/iodbc/README index 23cb2a5e82..ed0f3008a0 100644 --- a/src/iodbc/README +++ b/src/iodbc/README @@ -1,187 +1,187 @@ 0. Changes - a. I realized that a driver manager doesn't aware of - difference between a C5 (i.e. hstmt) and a C6 - (i.e. transaction) states. - - b. The link flags "-lc" has been removed from Linux ELF - section of Config.mk to fix a segment fault problem. - Now, it works fine on Slackware 2.3 and Red Hat 2.0 - (kernel version are 1.2.xx and 1.3.xx respectively). - - c. On FreeBSD 2.x, dlsym() doesn't handle the '_' - prepended before a exporting function symbol. So, - CLI_NAME_PREFIX needs to be defined as "_SQL" for - FreeBSD. - - d. Some files are renamed - dld.c -> dlf.c - dld.h -> dlf.h - confg.h -> config.h + a. I realized that a driver manager doesn't aware of + difference between a C5 (i.e. hstmt) and a C6 + (i.e. transaction) states. + + b. The link flags "-lc" has been removed from Linux ELF + section of Config.mk to fix a segment fault problem. + Now, it works fine on Slackware 2.3 and Red Hat 2.0 + (kernel version are 1.2.xx and 1.3.xx respectively). + + c. On FreeBSD 2.x, dlsym() doesn't handle the '_' + prepended before a exporting function symbol. So, + CLI_NAME_PREFIX needs to be defined as "_SQL" for + FreeBSD. + + d. Some files are renamed + dld.c -> dlf.c + dld.h -> dlf.h + confg.h -> config.h 1. iODBC driver manager platform availability - iODBC driver manager has been ported to following Unix platforms: - - SunOS 4.1.x Sun Sparc - HP/UX 9.x, 10.x HP9000 s700/s800 - HP/UX 9.x HP9000 s300/s400 - IBM AIX 3.x, 4.x IBM RS6000, PowerPC - Sun Solaris 2.x Sun Sparc, PCx86 - SGI Irix SVR4 5.x, 6.x IP12 MIPS, IP22 MIPS - NCR SVR4 3.x NCR 3435 - UnixWare SVR4.2 1.x, 2.x x86 - DEC Unix(OSF/1) 3.x, 4.x DEC Alpha - FreeBSD 2.x x86 - BSDI BSD/OS 2.x ? - Linux ELF 1.2.x, 1.3.x x86 - SCO OpenServer 5.x x86 - Max/OS SVR4 1.x Concurrent Maxion 9200 MP - DG/UX 5.x Aviion + iODBC driver manager has been ported to following Unix platforms: + + SunOS 4.1.x Sun Sparc + HP/UX 9.x, 10.x HP9000 s700/s800 + HP/UX 9.x HP9000 s300/s400 + IBM AIX 3.x, 4.x IBM RS6000, PowerPC + Sun Solaris 2.x Sun Sparc, PCx86 + SGI Irix SVR4 5.x, 6.x IP12 MIPS, IP22 MIPS + NCR SVR4 3.x NCR 3435 + UnixWare SVR4.2 1.x, 2.x x86 + DEC Unix(OSF/1) 3.x, 4.x DEC Alpha + FreeBSD 2.x x86 + BSDI BSD/OS 2.x ? + Linux ELF 1.2.x, 1.3.x x86 + SCO OpenServer 5.x x86 + Max/OS SVR4 1.x Concurrent Maxion 9200 MP + DG/UX 5.x Aviion Porting of iODBC driver manager to some non-unix operating systems - such as Windows family(3.x, 95, NT), OS/2 and Mac is supported but - has never compiled and tested yet :). Of cause, you need to supply + such as Windows family(3.x, 95, NT), OS/2 and Mac is supported but + has never compiled and tested yet :). Of cause, you need to supply a make/build file and a short LibMain for creating the iodbc.dll. 2. How to build iODBC driver manager: - step 1. Identify your system - step 2. Run build with a suitable option - + step 1. Identify your system + step 2. Run build with a suitable option + Here is an example: - %[1]: sh iodbc-2.12.shar - .... - %[2]: cd iodbc-2.12 - %[3]: uname -s -v -r -m - HP-UX B.10.01 A 9000/710 - %[4]: ./build hp700 - autoconfig hp700 - make - .... - Generating iODBC driver manager --> /home/kejin/iodbc-2.12.sl + %[1]: sh iodbc-2.12.shar + .... + %[2]: cd iodbc-2.12 + %[3]: uname -s -v -r -m + HP-UX B.10.01 A 9000/710 + %[4]: ./build hp700 + autoconfig hp700 + make + .... + Generating iODBC driver manager --> /home/kejin/iodbc-2.12.sl 3. odbc.ini( ~/.odbc.ini ) - Driver manager and drivers use odbc.ini(or ~/.odbc.ini on Unix) file + Driver manager and drivers use odbc.ini(or ~/.odbc.ini on Unix) file or connection string when establishing a data source connection. On - Windows, odbc.ini is located in Windows directory. On unix, iODBC driver - manager(and all other ODBC drivers and driver managers I awared) looks - .odbc.ini file in real user's home directory (it could be a softlink to - the file located somewhere else). Make sure your driver will look into - the same file (or a file which is a symbolic link to the same file). + Windows, odbc.ini is located in Windows directory. On unix, iODBC driver + manager(and all other ODBC drivers and driver managers I awared) looks + .odbc.ini file in real user's home directory (it could be a softlink to + the file located somewhere else). Make sure your driver will look into + the same file (or a file which is a symbolic link to the same file). The format of odbc.ini( or ~/.odbc.ini ) is defined as: - odbc.ini(or .odbc.ini) ::= data_source_list + odbc.ini(or .odbc.ini) ::= data_source_list - data_source_list ::= /* empty */ - | data_source '\n' data_source_list + data_source_list ::= /* empty */ + | data_source '\n' data_source_list - data_source ::= '[' data_source_name ']' '\n' data_source_desc + data_source ::= '[' data_source_name ']' '\n' data_source_desc - data_source_name ::= 'default' | [A-Za-z]*[A-Za-z0-9_]* + data_source_name ::= 'default' | [A-Za-z]*[A-Za-z0-9_]* - data_source_desc ::= /* empty */ - | attrib_desc '\n' data_source_desc + data_source_desc ::= /* empty */ + | attrib_desc '\n' data_source_desc - addrib_desc ::= Attrib '=' attrib_value + addrib_desc ::= Attrib '=' attrib_value - Attrib ::= 'Driver' | 'PID' | 'UID' | driver_def_attrib + Attrib ::= 'Driver' | 'PID' | 'UID' | driver_def_attrib - driver_def_attrib ::= [A-Za-z]*[A-Za-z0-9_]* + driver_def_attrib ::= [A-Za-z]*[A-Za-z0-9_]* An example of .odbc.ini file: - [toronto_yp] - # yellow page of metro Toronto - Driver = /usr/lib/odbc/oracle.so - <....> + [toronto_yp] + # yellow page of metro Toronto + Driver = /usr/lib/odbc/oracle.so + <....> - [toronto_wp] - # white page of metro Toronto - Driver = /usr/lib/odbc/oracle.so - <....> + [toronto_wp] + # white page of metro Toronto + Driver = /usr/lib/odbc/oracle.so + <....> - [contract] - # all contract documents - Driver = /usr/lib/odbc/informix.so - <....> + [contract] + # all contract documents + Driver = /usr/lib/odbc/informix.so + <....> - [netnews] - # NNTP netnews group - Driver = /usr/lib/odbc/nnodbc.so - Server = news.empress.com + [netnews] + # NNTP netnews group + Driver = /usr/lib/odbc/nnodbc.so + Server = news.empress.com - [rnd_test] - # data source for R&D test - Driver = /home/r_d/odbc/empodbc.so - URL = empodbc://rnd.empress.com:6322/rnd_test/testdb + [rnd_test] + # data source for R&D test + Driver = /home/r_d/odbc/empodbc.so + URL = empodbc://rnd.empress.com:6322/rnd_test/testdb - [default] - # default to odbc gateway - Driver = /usr/lib/odbc/gateway.so + [default] + # default to odbc gateway + Driver = /usr/lib/odbc/gateway.so 4. Tracing - iODBC driver manager traces driver's ODBC call invoked by the driver - manager. Default tracing file is ./odbc.log. Tracing option (i.e. - on/off or optional tracing file name) can be set in ~/.odbc.ini + iODBC driver manager traces driver's ODBC call invoked by the driver + manager. Default tracing file is ./odbc.log. Tracing option (i.e. + on/off or optional tracing file name) can be set in ~/.odbc.ini file (under a data source section) as: - TraceFile = - Trace = ON | On | on | 1 | OFF | Off | off | 0 + TraceFile = + Trace = ON | On | on | 1 | OFF | Off | off | 0 If is stderr or stdout, i.e. - - TraceFile = stderr - + + TraceFile = stderr + or - TraceFile = stdout + TraceFile = stdout the tracing message will go to the terminal screen(if it is available). iODBC driver manager allows one to tune on/off tracing on selected - connection(s). Different connections can share one or use different + connection(s). Different connections can share one or use different tracing file(s). ODBC calls on connections without tuning tracing on - will not be traced. - + will not be traced. + 5. File list: - README This file - IAFA-PACKAGE Version and copyright information - Changes.log Source changes log - Version.mk Version make include file - Config.mk Config make include file - Makefile make file - config.h system config include file - isql.h ODBC 1.0 macro - isqlext.h ODBC 2.0 macro - dlf.h general dynamic loader module interface - dlf.c general dynamic loader module (mapping to svr4) - dlproc.h simple dynamic loader module interface - dlproc.c simple dynamic loader on top of dlf module - herr.h error handling module interface - herr.c error handling module - herr.ci error handling source include - henv.h environment handle interface - henv.c environment handle module - henv.ci environment handle source include - hdbc.h connection handle interface - hdbc.c connection handle module - hstmt.h statement handle interface - hstmt.c statement handle module - connect.c connect functions - prepare.c query prepare functions - execute.c query executing functions - result.c query result property functions - fetch.c query result fetch functions - info.c driver information functions - catalog.c catalog functions - misc.c miscellaneous functions - itrace.h macro - itrace.c trace function - main.c entry function used to build a share library on AIX - shrsub.exp export symbol list used on AIX - autoconfig shell script for creating Config.mk - build shell script for building iodbc driver manager + README This file + IAFA-PACKAGE Version and copyright information + Changes.log Source changes log + Version.mk Version make include file + Config.mk Config make include file + Makefile make file + config.h system config include file + isql.h ODBC 1.0 macro + isqlext.h ODBC 2.0 macro + dlf.h general dynamic loader module interface + dlf.c general dynamic loader module (mapping to svr4) + dlproc.h simple dynamic loader module interface + dlproc.c simple dynamic loader on top of dlf module + herr.h error handling module interface + herr.c error handling module + herr.ci error handling source include + henv.h environment handle interface + henv.c environment handle module + henv.ci environment handle source include + hdbc.h connection handle interface + hdbc.c connection handle module + hstmt.h statement handle interface + hstmt.c statement handle module + connect.c connect functions + prepare.c query prepare functions + execute.c query executing functions + result.c query result property functions + fetch.c query result fetch functions + info.c driver information functions + catalog.c catalog functions + misc.c miscellaneous functions + itrace.h macro + itrace.c trace function + main.c entry function used to build a share library on AIX + shrsub.exp export symbol list used on AIX + autoconfig shell script for creating Config.mk + build shell script for building iodbc driver manager diff --git a/src/iodbc/catalog.c b/src/iodbc/catalog.c index 0d85940454..6c28eabdcf 100644 --- a/src/iodbc/catalog.c +++ b/src/iodbc/catalog.c @@ -1,6 +1,6 @@ /** Catalog functions of iODBC driver manager - Copyright (C) 1995 by Ke Jin + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,1066 +27,1066 @@ #include <../iodbc/itrace.h> -static RETCODE _iodbcdm_cata_state_ok ( - HSTMT hstmt, - int fidx ) +static RETCODE _iodbcdm_cata_state_ok ( + HSTMT hstmt, + int fidx ) /* check state for executing catalog functions */ { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - int sqlstat = en_00000; - - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - case en_stmt_fetched: - case en_stmt_xfetched: - sqlstat = en_24000; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != fidx ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - return SQL_SUCCESS; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + int sqlstat = en_00000; + + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + case en_stmt_fetched: + case en_stmt_xfetched: + sqlstat = en_24000; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != fidx ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + return SQL_SUCCESS; } -static RETCODE _iodbcdm_cata_state_tr( - HSTMT hstmt, - int fidx, - RETCODE result ) +static RETCODE _iodbcdm_cata_state_tr( + HSTMT hstmt, + int fidx, + RETCODE result ) /* state transition for catalog function */ { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - DBC_t FAR* pdbc; - - pdbc = (DBC_t FAR*)(pstmt->hdbc); - - if( pstmt->asyn_on == fidx ) - { - switch( result ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return result; - } - } - - if( pstmt->state <= en_stmt_executed ) - { - switch( result ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - pstmt->state = en_stmt_cursoropen; - break; - - case SQL_ERROR: - pstmt->state = en_stmt_allocated; - pstmt->prep_state = 0; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = fidx; - break; - - default: - break; - } - } - - return result; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + DBC_t FAR* pdbc; + + pdbc = (DBC_t FAR*)(pstmt->hdbc); + + if( pstmt->asyn_on == fidx ) + { + switch( result ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return result; + } + } + + if( pstmt->state <= en_stmt_executed ) + { + switch( result ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + pstmt->state = en_stmt_cursoropen; + break; + + case SQL_ERROR: + pstmt->state = en_stmt_allocated; + pstmt->prep_state = 0; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = fidx; + break; + + default: + break; + } + } + + return result; } RETCODE SQL_API SQLGetTypeInfo( - HSTMT hstmt, - SWORD fSqlType ) + HSTMT hstmt, + SWORD fSqlType ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - int sqlstat = en_00000; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( fSqlType > SQL_TYPE_MAX ) - { - sqlstat = en_S1004; - break; - } - - if( fSqlType < SQL_TYPE_MIN - && fSqlType > SQL_TYPE_DRIVER_START ) - /* Note: SQL_TYPE_DRIVER_START is a nagtive - * number So, we use ">" */ - { - sqlstat = en_S1004; - break; - } - - retcode = _iodbcdm_cata_state_ok( hstmt, en_GetTypeInfo ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetTypeInfo ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, - en_GetTypeInfo, ( pstmt->dhstmt, fSqlType) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + int sqlstat = en_00000; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( fSqlType > SQL_TYPE_MAX ) + { + sqlstat = en_S1004; + break; + } + + if( fSqlType < SQL_TYPE_MIN + && fSqlType > SQL_TYPE_DRIVER_START ) + /* Note: SQL_TYPE_DRIVER_START is a nagtive + * number So, we use ">" */ + { + sqlstat = en_S1004; + break; + } + + retcode = _iodbcdm_cata_state_ok( hstmt, en_GetTypeInfo ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetTypeInfo ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, + en_GetTypeInfo, ( pstmt->dhstmt, fSqlType) ) #if 0 - retcode = hproc ( pstmt->dhstmt, fSqlType ); + retcode = hproc ( pstmt->dhstmt, fSqlType ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_GetTypeInfo, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_GetTypeInfo, retcode ); } -RETCODE SQL_API SQLSpecialColumns( - HSTMT hstmt, - UWORD fColType, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName, - UWORD fScope, - UWORD fNullable ) +RETCODE SQL_API SQLSpecialColumns( + HSTMT hstmt, + UWORD fColType, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName, + UWORD fScope, + UWORD fNullable ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - if( fColType != SQL_BEST_ROWID - && fColType != SQL_ROWVER ) - { - sqlstat = en_S1097; - break; - } - - if( fScope != SQL_SCOPE_CURROW - && fScope != SQL_SCOPE_TRANSACTION - && fScope != SQL_SCOPE_SESSION ) - { - sqlstat = en_S1098; - break; - } - - if( fNullable != SQL_NO_NULLS - && fNullable != SQL_NULLABLE ) - { - sqlstat = en_S1099; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_SpecialColumns ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_SpecialColumns ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SpecialColumns, ( - pstmt->dhstmt, - fColType, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - fScope, - fNullable ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + if( fColType != SQL_BEST_ROWID + && fColType != SQL_ROWVER ) + { + sqlstat = en_S1097; + break; + } + + if( fScope != SQL_SCOPE_CURROW + && fScope != SQL_SCOPE_TRANSACTION + && fScope != SQL_SCOPE_SESSION ) + { + sqlstat = en_S1098; + break; + } + + if( fNullable != SQL_NO_NULLS + && fNullable != SQL_NULLABLE ) + { + sqlstat = en_S1099; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_SpecialColumns ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_SpecialColumns ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SpecialColumns, ( + pstmt->dhstmt, + fColType, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + fScope, + fNullable ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - fColType, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - fScope, - fNullable ); + retcode = hproc(pstmt->dhstmt, + fColType, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + fScope, + fNullable ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_SpecialColumns, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_SpecialColumns, retcode ); } -RETCODE SQL_API SQLStatistics( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName, - UWORD fUnique, - UWORD fAccuracy ) +RETCODE SQL_API SQLStatistics( + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName, + UWORD fUnique, + UWORD fAccuracy ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - if( fUnique != SQL_INDEX_UNIQUE - && fUnique != SQL_INDEX_ALL ) - { - sqlstat = en_S1100; - break; - } - - if( fAccuracy != SQL_ENSURE - && fAccuracy != SQL_QUICK ) - { - sqlstat = en_S1101; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_Statistics ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Statistics ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Statistics, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - fUnique, - fAccuracy ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + if( fUnique != SQL_INDEX_UNIQUE + && fUnique != SQL_INDEX_ALL ) + { + sqlstat = en_S1100; + break; + } + + if( fAccuracy != SQL_ENSURE + && fAccuracy != SQL_QUICK ) + { + sqlstat = en_S1101; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_Statistics ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Statistics ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Statistics, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + fUnique, + fAccuracy ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - fUnique, - fAccuracy ); + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + fUnique, + fAccuracy ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_Statistics, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_Statistics, retcode ); } -RETCODE SQL_API SQLTables( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName, - UCHAR FAR* szTableType, - SWORD cbTableType ) +RETCODE SQL_API SQLTables( + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName, + UCHAR FAR* szTableType, + SWORD cbTableType ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) - || ( cbTableType < 0 && cbTableType != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_Tables ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Tables ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Tables, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szTableType, - cbTableType ) ) - + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) + || ( cbTableType < 0 && cbTableType != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_Tables ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Tables ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Tables, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szTableType, + cbTableType ) ) + #if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szTableType, - cbTableType ); + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szTableType, + cbTableType ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_Tables, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_Tables, retcode ); } RETCODE SQL_API SQLColumnPrivileges( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName, - UCHAR FAR* szColumnName, - SWORD cbColumnName ) + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName, + UCHAR FAR* szColumnName, + SWORD cbColumnName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) - || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_ColumnPrivileges ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColumnPrivileges ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ColumnPrivileges, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szColumnName, - cbColumnName ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) + || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_ColumnPrivileges ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColumnPrivileges ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ColumnPrivileges, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szColumnName, + cbColumnName ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szColumnName, - cbColumnName ); + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szColumnName, + cbColumnName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_ColumnPrivileges, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_ColumnPrivileges, retcode ); } RETCODE SQL_API SQLColumns( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName, - UCHAR FAR* szColumnName, - SWORD cbColumnName ) + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName, + UCHAR FAR* szColumnName, + SWORD cbColumnName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) - || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_Columns ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Columns ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Columns, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szColumnName, - cbColumnName ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) + || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_Columns ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Columns ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Columns, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szColumnName, + cbColumnName ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName, - szColumnName, - cbColumnName ); + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName, + szColumnName, + cbColumnName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_Columns, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_Columns, retcode ); } RETCODE SQL_API SQLForeignKeys( - HSTMT hstmt, - UCHAR FAR* szPkTableQualifier, - SWORD cbPkTableQualifier, - UCHAR FAR* szPkTableOwner, - SWORD cbPkTableOwner, - UCHAR FAR* szPkTableName, - SWORD cbPkTableName, - UCHAR FAR* szFkTableQualifier, - SWORD cbFkTableQualifier, - UCHAR FAR* szFkTableOwner, - SWORD cbFkTableOwner, - UCHAR FAR* szFkTableName, - SWORD cbFkTableName ) + HSTMT hstmt, + UCHAR FAR* szPkTableQualifier, + SWORD cbPkTableQualifier, + UCHAR FAR* szPkTableOwner, + SWORD cbPkTableOwner, + UCHAR FAR* szPkTableName, + SWORD cbPkTableName, + UCHAR FAR* szFkTableQualifier, + SWORD cbFkTableQualifier, + UCHAR FAR* szFkTableOwner, + SWORD cbFkTableOwner, + UCHAR FAR* szFkTableName, + SWORD cbFkTableName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbPkTableQualifier < 0 && cbPkTableQualifier != SQL_NTS ) - || ( cbPkTableOwner < 0 && cbPkTableOwner != SQL_NTS ) - || ( cbPkTableName < 0 && cbPkTableName != SQL_NTS ) - || ( cbFkTableQualifier < 0 && cbFkTableQualifier != SQL_NTS ) - || ( cbFkTableOwner < 0 && cbFkTableOwner != SQL_NTS ) - || ( cbFkTableName < 0 && cbFkTableName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_ForeignKeys ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ForeignKeys ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ForeignKeys, ( - pstmt->dhstmt, - szPkTableQualifier, - cbPkTableQualifier, - szPkTableOwner, - cbPkTableOwner, - szPkTableName, - cbPkTableName, - szFkTableQualifier, - cbFkTableQualifier, - szFkTableOwner, - cbFkTableOwner, - szFkTableName, - cbFkTableName ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbPkTableQualifier < 0 && cbPkTableQualifier != SQL_NTS ) + || ( cbPkTableOwner < 0 && cbPkTableOwner != SQL_NTS ) + || ( cbPkTableName < 0 && cbPkTableName != SQL_NTS ) + || ( cbFkTableQualifier < 0 && cbFkTableQualifier != SQL_NTS ) + || ( cbFkTableOwner < 0 && cbFkTableOwner != SQL_NTS ) + || ( cbFkTableName < 0 && cbFkTableName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_ForeignKeys ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ForeignKeys ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ForeignKeys, ( + pstmt->dhstmt, + szPkTableQualifier, + cbPkTableQualifier, + szPkTableOwner, + cbPkTableOwner, + szPkTableName, + cbPkTableName, + szFkTableQualifier, + cbFkTableQualifier, + szFkTableOwner, + cbFkTableOwner, + szFkTableName, + cbFkTableName ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szPkTableQualifier, - cbPkTableQualifier, - szPkTableOwner, - cbPkTableOwner, - szPkTableName, - cbPkTableName, - szFkTableQualifier, - cbFkTableQualifier, - szFkTableOwner, - cbFkTableOwner, - szFkTableName, - cbFkTableName ); + retcode = hproc(pstmt->dhstmt, + szPkTableQualifier, + cbPkTableQualifier, + szPkTableOwner, + cbPkTableOwner, + szPkTableName, + cbPkTableName, + szFkTableQualifier, + cbFkTableQualifier, + szFkTableOwner, + cbFkTableOwner, + szFkTableName, + cbFkTableName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_ForeignKeys, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_ForeignKeys, retcode ); } RETCODE SQL_API SQLPrimaryKeys( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName ) + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_PrimaryKeys ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_PrimaryKeys ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PrimaryKeys, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName ) ) - -#if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName ); + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_PrimaryKeys ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_PrimaryKeys ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PrimaryKeys, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName ) ) + +#if 0 + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_PrimaryKeys, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_PrimaryKeys, retcode ); } RETCODE SQL_API SQLProcedureColumns( - HSTMT hstmt, - UCHAR FAR* szProcQualifier, - SWORD cbProcQualifier, - UCHAR FAR* szProcOwner, - SWORD cbProcOwner, - UCHAR FAR* szProcName, - SWORD cbProcName, - UCHAR FAR* szColumnName, - SWORD cbColumnName ) + HSTMT hstmt, + UCHAR FAR* szProcQualifier, + SWORD cbProcQualifier, + UCHAR FAR* szProcOwner, + SWORD cbProcOwner, + UCHAR FAR* szProcName, + SWORD cbProcName, + UCHAR FAR* szColumnName, + SWORD cbColumnName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS ) - || ( cbProcOwner < 0 && cbProcOwner != SQL_NTS ) - || ( cbProcName < 0 && cbProcName != SQL_NTS ) - || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_ProcedureColumns ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ProcedureColumns ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ProcedureColumns, ( - pstmt->dhstmt, - szProcQualifier, - cbProcQualifier, - szProcOwner, - cbProcOwner, - szProcName, - cbProcName, - szColumnName, - cbColumnName ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS ) + || ( cbProcOwner < 0 && cbProcOwner != SQL_NTS ) + || ( cbProcName < 0 && cbProcName != SQL_NTS ) + || ( cbColumnName < 0 && cbColumnName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_ProcedureColumns ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ProcedureColumns ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ProcedureColumns, ( + pstmt->dhstmt, + szProcQualifier, + cbProcQualifier, + szProcOwner, + cbProcOwner, + szProcName, + cbProcName, + szColumnName, + cbColumnName ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szProcQualifier, - cbProcQualifier, - szProcOwner, - cbProcOwner, - szProcName, - cbProcName, - szColumnName, - cbColumnName ); + retcode = hproc(pstmt->dhstmt, + szProcQualifier, + cbProcQualifier, + szProcOwner, + cbProcOwner, + szProcName, + cbProcName, + szColumnName, + cbColumnName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_ProcedureColumns, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_ProcedureColumns, retcode ); } -RETCODE SQL_API SQLProcedures( - HSTMT hstmt, - UCHAR FAR* szProcQualifier, - SWORD cbProcQualifier, - UCHAR FAR* szProcOwner, - SWORD cbProcOwner, - UCHAR FAR* szProcName, - SWORD cbProcName ) +RETCODE SQL_API SQLProcedures( + HSTMT hstmt, + UCHAR FAR* szProcQualifier, + SWORD cbProcQualifier, + UCHAR FAR* szProcOwner, + SWORD cbProcOwner, + UCHAR FAR* szProcName, + SWORD cbProcName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS ) - || ( cbProcOwner < 0 && cbProcOwner != SQL_NTS ) - || ( cbProcName < 0 && cbProcName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_Procedures ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Procedures ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Procedures, ( - pstmt->dhstmt, - szProcQualifier, - cbProcQualifier, - szProcOwner, - cbProcOwner, - szProcName, - cbProcName ) ) - -#if 0 - retcode = hproc(pstmt->dhstmt, - szProcQualifier, - cbProcQualifier, - szProcOwner, - cbProcOwner, - szProcName, - cbProcName ); + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbProcQualifier < 0 && cbProcQualifier != SQL_NTS ) + || ( cbProcOwner < 0 && cbProcOwner != SQL_NTS ) + || ( cbProcName < 0 && cbProcName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_Procedures ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Procedures ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Procedures, ( + pstmt->dhstmt, + szProcQualifier, + cbProcQualifier, + szProcOwner, + cbProcOwner, + szProcName, + cbProcName ) ) + +#if 0 + retcode = hproc(pstmt->dhstmt, + szProcQualifier, + cbProcQualifier, + szProcOwner, + cbProcOwner, + szProcName, + cbProcName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_Procedures, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_Procedures, retcode ); } RETCODE SQL_API SQLTablePrivileges( - HSTMT hstmt, - UCHAR FAR* szTableQualifier, - SWORD cbTableQualifier, - UCHAR FAR* szTableOwner, - SWORD cbTableOwner, - UCHAR FAR* szTableName, - SWORD cbTableName ) + HSTMT hstmt, + UCHAR FAR* szTableQualifier, + SWORD cbTableQualifier, + UCHAR FAR* szTableOwner, + SWORD cbTableOwner, + UCHAR FAR* szTableName, + SWORD cbTableName ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) - || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) - || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) - { - sqlstat = en_S1090; - break; - } - - retcode = _iodbcdm_cata_state_ok ( hstmt, en_TablePrivileges ); - - if( retcode != SQL_SUCCESS ) - { - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_TablePrivileges ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_TablePrivileges, ( - pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( ( cbTableQualifier < 0 && cbTableQualifier != SQL_NTS ) + || ( cbTableOwner < 0 && cbTableOwner != SQL_NTS ) + || ( cbTableName < 0 && cbTableName != SQL_NTS ) ) + { + sqlstat = en_S1090; + break; + } + + retcode = _iodbcdm_cata_state_ok ( hstmt, en_TablePrivileges ); + + if( retcode != SQL_SUCCESS ) + { + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_TablePrivileges ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_TablePrivileges, ( + pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szTableQualifier, - cbTableQualifier, - szTableOwner, - cbTableOwner, - szTableName, - cbTableName ); + retcode = hproc(pstmt->dhstmt, + szTableQualifier, + cbTableQualifier, + szTableOwner, + cbTableOwner, + szTableName, + cbTableName ); #endif - return _iodbcdm_cata_state_tr( hstmt, en_TablePrivileges, retcode ); + return _iodbcdm_cata_state_tr( hstmt, en_TablePrivileges, retcode ); } diff --git a/src/iodbc/config.h b/src/iodbc/config.h index 7883fb87be..e4319509a8 100644 --- a/src/iodbc/config.h +++ b/src/iodbc/config.h @@ -1,45 +1,100 @@ -#ifndef _LINUX_CONFIG_H -#define _LINUX_CONFIG_H +#ifndef _CONFIG_H +#define _CONFIG_H -#ifdef __LINUX__ -#include -#endif +# if !defined(WINDOWS) && !defined(WIN32_SYSTEM) && !defined(OS2) +# define _UNIX_ -/* - * Defines for what uname() should return - */ -#ifndef UTS_SYSNAME -#define UTS_SYSNAME "Linux" -#endif +# include +# include +# include +# include -#ifndef UTS_MACHINE -#define UTS_MACHINE "unknown" -#endif +# define MEM_ALLOC(size) (malloc((size_t)(size))) +# define MEM_FREE(ptr) {if(ptr) free(ptr);} -#ifndef UTS_NODENAME -#define UTS_NODENAME "(none)" /* set by sethostname() */ -#endif +# define STRCPY(t, s) (strcpy((char*)(t), (char*)(s))) +# define STRNCPY(t,s,n) (strncpy((char*)(t), (char*)(s), (size_t)(n))) +# define STRCAT(t, s) (strcat((char*)(t), (char*)(s))) +# define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n))) +# define STREQ(a, b) (strcmp((char*)(a), (char*)(b)) == 0) +# define STRLEN(str) ((str)? strlen((char*)(str)):0) -#ifndef UTS_DOMAINNAME -#define UTS_DOMAINNAME "(none)" /* set by setdomainname() */ -#endif +# define EXPORT +# define CALLBACK +# define FAR + + typedef signed short SSHOR; + typedef short WORD; + typedef long DWORD; + + typedef WORD WPARAM; + typedef DWORD LPARAM; + typedef void* HWND; + typedef int BOOL; + +# endif /* _UNIX_ */ + +# if defined(WINDOWS) || defined(WIN32_SYSTEM) + +# include +# include + +# ifdef _MSVC_ +# define MEM_ALLOC(size) (fmalloc((size_t)(size))) +# define MEM_FREE(ptr) ((ptr)? ffree((PTR)(ptr)):0)) +# define STRCPY(t, s) (fstrcpy((char FAR*)(t), (char FAR*)(s))) +# define STRNCPY(t,s,n) (fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n))) +# define STRLEN(str) ((str)? fstrlen((char FAR*)(str)):0) +# define STREQ(a, b) (fstrcmp((char FAR*)(a), (char FAR*)(b) == 0) +# endif + +# ifdef _BORLAND_ +# define MEM_ALLOC(size) (farmalloc((unsigned long)(size)) +# define MEM_FREE(ptr) ((ptr)? farfree((void far*)(ptr)):0) +# define STRCPY(t, s) (_fstrcpy((char FAR*)(t), (char FAR*)(s))) +# define STRNCPY(t,s,n) (_fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n))) +# define STRLEN(str) ((str)? _fstrlen((char FAR*)(str)):0) +# define STREQ(a, b) (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0) +# endif + +# endif /* WINDOWS */ + +# if defined(OS2) + +# include +# include +# include +# include +# define INCL_DOSMODULEMGR /* Module Manager values */ +# define INCL_DOSERRORS /* Error values */ +# include + +# ifndef FAR +# define FAR +# endif + +# define MEM_ALLOC(size) (malloc((size_t)(size))) +# define MEM_FREE(ptr) (free((ptr))) +# define STRCPY(t, s) (strcpy((char*)(t), (char*)(s))) +# define STRNCPY(t,s,n) (strncpy((char*)(t), (char*)(s), (size_t)(n))) +# define STRCAT(t, s) (strcat((char*)(t), (char*)(s))) +# define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n))) +# define STRLEN(str) ((str)? strlen((char*)(str)):0) +# define STREQ(a, b) (0 == strcmp((char *)(a), (char *)(b))) + + typedef signed short SSHOR; + typedef short WORD; + typedef long DWORD; -/* - * The definitions for UTS_RELEASE and UTS_VERSION are now defined - * in linux/version.h, and should only be used by linux/version.c - */ + typedef WORD WPARAM; + typedef DWORD LPARAM; -/* Shouldn't these be defined somewhere in a i386 definition? */ +# endif /* OS2 */ -/* Don't touch these, unless you really know what you're doing. */ -#define DEF_INITSEG 0x9000 -#define DEF_SYSSEG 0x1000 -#define DEF_SETUPSEG 0x9020 -#define DEF_SYSSIZE 0x7F00 +# define SYSERR (-1) -/* internal svga startup constants */ -#define NORMAL_VGA 0xffff /* 80x25 mode */ -#define EXTENDED_VGA 0xfffe /* 80x50 mode */ -#define ASK_VGA 0xfffd /* ask for it at bootup */ +# ifndef NULL +# define NULL ((void FAR*)0UL) +# endif #endif diff --git a/src/iodbc/connect.c b/src/iodbc/connect.c index 88e636aca7..11a5bbd0c9 100644 --- a/src/iodbc/connect.c +++ b/src/iodbc/connect.c @@ -1,6 +1,6 @@ /** Connect(load) driver - Copyright (C) 1995 by Ke Jin + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,27 +26,28 @@ #include <../iodbc/hstmt.h> #include <../iodbc/itrace.h> + #include #include -extern char* _iodbcdm_getkeyvalbydsn(); -extern char* _iodbcdm_getkeyvalinstr(); -extern RETCODE _iodbcdm_driverunload(); +extern char* _iodbcdm_getkeyvalbydsn(); +extern char* _iodbcdm_getkeyvalinstr(); +extern RETCODE _iodbcdm_driverunload(); /* - * Following id string is a copyright mark. Removing(i.e. use - * souce code of this package without it or make it not appear - * in the final object file) or modifing it without permission - * from original author(kejin@empress.com) are copyright + * Following id string is a copyright mark. Removing(i.e. use + * souce code of this package without it or make it not appear + * in the final object file) or modifing it without permission + * from original author(kejin@empress.com) are copyright * violation. */ -static char sccsid[] - = "@(#)iODBC driver manager " "2.12" ", Copyright(c) 1995 by Ke Jin"; +static char sccsid[] + = "@(#)iODBC driver manager " "2.12" ", Copyright(c) 1995 by Ke Jin"; -static RETCODE _iodbcdm_driverload( - char FAR* path, - HDBC hdbc ) -/* - Load driver share library( or increase its reference count +static RETCODE _iodbcdm_driverload( + char FAR* path, + HDBC hdbc ) +/* - Load driver share library( or increase its reference count * if it has already been loaded by another active connection) * - Call driver's SQLAllocEnv() (for the first reference only) * - Call driver's SQLAllocConnect() @@ -54,232 +55,242 @@ static RETCODE _iodbcdm_driverload( * - Increase the bookkeeping reference count */ { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - GENV_t FAR* genv; - ENV_t FAR* penv = NULL; - HDLL hdll; - HPROC hproc; - RETCODE retcode = SQL_SUCCESS; - int sqlstat = en_00000; - - if( path == NULL || path[0] == '\0' ) - { - PUSHSQLERR ( pdbc->herr, en_IM002 ); - - return SQL_ERROR; - } - - if( hdbc == SQL_NULL_HDBC - || pdbc->genv == SQL_NULL_HENV ) - { - return SQL_INVALID_HANDLE; - } - - genv = (GENV_t FAR*)pdbc->genv; - - hdll = _iodbcdm_dllopen( (char FAR*) path ); - /* This will either load the - * driver dll or increase its - * reference count */ - - if( hdll == SQL_NULL_HDLL ) - { - PUSHSYSERR ( pdbc->herr, _iodbcdm_dllerror() ); - PUSHSQLERR ( pdbc->herr, en_IM003 ); - return SQL_ERROR; - } - - penv = (ENV_t FAR*)(pdbc->henv); - - if( penv != NULL ) - { - if( penv->hdll != hdll ) - { - _iodbcdm_driverunload(hdbc); - } - else - { - _iodbcdm_dllclose( hdll ); - /* this will not unload the driver - * but only decrease its internal - * reference count - */ - } - } - - if(penv == NULL ) - { - /* find out whether this dll has already - * been loaded on another connection */ - for( penv = (ENV_t FAR*)genv->henv; - penv != NULL; - penv = (ENV_t FAR*)penv->next ) - { - if( penv->hdll == hdll ) - { - _iodbcdm_dllclose( hdll ); - /* this will not unload the driver - * but only decrease its internal - * reference count - */ - break; - } - } - - if( penv == NULL ) - /* no connection attaching with this dll */ - { - int i; - - /* create a new dll env instance */ - penv = (ENV_t FAR*)MEM_ALLOC ( sizeof(ENV_t) ); - - if( penv == NULL ) - { - _iodbcdm_dllclose(hdll); - - PUSHSQLERR ( pdbc->herr, en_S1001 ); - - return SQL_ERROR; - } - - for( i = 0; i< SQL_EXT_API_LAST + 1; i++) - { - (penv->dllproc_tab)[i] = SQL_NULL_HPROC; - } - - pdbc->henv = penv; - penv->hdll = hdll; - - /* call driver's SQLAllocHandle() or SQLAllocEnv() */ + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + GENV_t FAR* genv; + ENV_t FAR* penv = NULL; + HDLL hdll; + HPROC hproc; + RETCODE retcode = SQL_SUCCESS; + int sqlstat = en_00000; + + if(pdbc->trace) + { + fprintf(pdbc->tstm, "_iodbcdm_driverload(%s, 0x%x)\n", path, (int)hdbc); + } + + if( path == NULL || path[0] == '\0' ) + { + PUSHSQLERR ( pdbc->herr, en_IM002 ); + + return SQL_ERROR; + } + + if( hdbc == SQL_NULL_HDBC + || pdbc->genv == SQL_NULL_HENV ) + { + return SQL_INVALID_HANDLE; + } + + genv = (GENV_t FAR*)pdbc->genv; + + hdll = _iodbcdm_dllopen( (char FAR*) path ); + /* This will either load the + * driver dll or increase its + * reference count */ + + if( hdll == SQL_NULL_HDLL ) + { + if(pdbc->trace) + { + fprintf(pdbc->tstm, "ERROR: _iodbcdm_driverload cannot load driver - '%s'\n", _iodbcdm_dllerror()); + } + + PUSHSYSERR ( pdbc->herr, _iodbcdm_dllerror() ); + PUSHSQLERR ( pdbc->herr, en_IM003 ); + return SQL_ERROR; + } + + penv = (ENV_t FAR*)(pdbc->henv); + + if( penv != NULL ) + { + if( penv->hdll != hdll ) + { + _iodbcdm_driverunload(hdbc); + } + else + { + _iodbcdm_dllclose( hdll ); + /* this will not unload the driver + * but only decrease its internal + * reference count + */ + } + } + + if(penv == NULL ) + { + /* find out whether this dll has already + * been loaded on another connection */ + for( penv = (ENV_t FAR*)genv->henv; + penv != NULL; + penv = (ENV_t FAR*)penv->next ) + { + if( penv->hdll == hdll ) + { + _iodbcdm_dllclose( hdll ); + /* this will not unload the driver + * but only decrease its internal + * reference count + */ + break; + } + } + + if( penv == NULL ) + /* no connection attaching with this dll */ + { + int i; + + /* create a new dll env instance */ + penv = (ENV_t FAR*)MEM_ALLOC ( sizeof(ENV_t) ); + + if( penv == NULL ) + { + _iodbcdm_dllclose(hdll); + + PUSHSQLERR ( pdbc->herr, en_S1001 ); + + return SQL_ERROR; + } + + for( i = 0; i< SQL_EXT_API_LAST + 1; i++) + { + (penv->dllproc_tab)[i] = SQL_NULL_HPROC; + } + + pdbc->henv = penv; + penv->hdll = hdll; + + /* call driver's SQLAllocHandle() or SQLAllocEnv() */ #if (ODBCVER >= 0x0300) - hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); - - if( hproc ) - { - CALL_DRIVER ( hdbc, retcode, hproc, en_AllocHandle, - ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &(penv->dhenv) ) - } - else /* try driver's SQLAllocEnv() */ + hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); + + if( hproc ) + { + CALL_DRIVER ( hdbc, retcode, hproc, en_AllocHandle, + ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &(penv->dhenv) ) + } + else /* try driver's SQLAllocEnv() */ #endif - { - hproc = _iodbcdm_getproc( hdbc, en_AllocEnv ); - - if( hproc == SQL_NULL_HPROC) - { - sqlstat = en_IM004; - } - else - { - CALL_DRIVER ( hdbc, retcode, hproc, - en_AllocEnv, (&(penv->dhenv)) ) - } - } - - if( retcode == SQL_ERROR ) - { - sqlstat = en_IM004; - } - - if( sqlstat != en_00000 ) - { - _iodbcdm_dllclose ( hdll ); - MEM_FREE ( penv ); - PUSHSQLERR ( pdbc->herr, en_IM004 ); - - return SQL_ERROR; - } - - /* insert into dll env list */ - penv->next = (ENV_t FAR*)genv->henv; - genv->henv = penv; - - /* initiate this new env entry */ - penv->refcount = 0; /* we will increase it after - * driver's SQLAllocConnect() - * success - */ - } - - pdbc->henv = penv; - - if( pdbc->dhdbc == SQL_NULL_HDBC ) - { + { + hproc = _iodbcdm_getproc( hdbc, en_AllocEnv ); + + if( hproc == SQL_NULL_HPROC) + { + sqlstat = en_IM004; + } + else + { + CALL_DRIVER ( hdbc, retcode, hproc, + en_AllocEnv, (&(penv->dhenv)) ) + } + } + + if( retcode == SQL_ERROR ) + { + sqlstat = en_IM004; + } + + if( sqlstat != en_00000 ) + { + _iodbcdm_dllclose ( hdll ); + MEM_FREE ( penv ); + PUSHSQLERR ( pdbc->herr, en_IM004 ); + + return SQL_ERROR; + } + + /* insert into dll env list */ + penv->next = (ENV_t FAR*)genv->henv; + genv->henv = penv; + + /* initiate this new env entry */ + penv->refcount = 0; /* we will increase it after + * driver's SQLAllocConnect() + * success + */ + } + + pdbc->henv = penv; + + if( pdbc->dhdbc == SQL_NULL_HDBC ) + { #if (ODBCVER >= 0x0300) - hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); - - if( hproc ) - { - CALL_DRIVER( hdbc, retcode, hproc, en_AllocHandle, - (SQL_HANDLE_DBC, penv->dhenv, &(pdbc->dhdbc)) ) - } - else + hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); + + if( hproc ) + { + CALL_DRIVER( hdbc, retcode, hproc, en_AllocHandle, + (SQL_HANDLE_DBC, penv->dhenv, &(pdbc->dhdbc)) ) + } + else #endif - { - hproc = _iodbcdm_getproc( hdbc, en_AllocConnect ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM005; - } - else - { - CALL_DRIVER ( hdbc, retcode, hproc, - en_AllocConnect, (penv->dhenv, &(pdbc->dhdbc)) ) - } - } - - if( retcode == SQL_ERROR ) - { - sqlstat = en_IM005; - } - - if( sqlstat != en_00000 ) - { - _iodbcdm_driverunload(hdbc); - - pdbc->dhdbc = SQL_NULL_HDBC; - PUSHSQLERR ( pdbc->herr, en_IM005 ); - - return SQL_ERROR; - } - } - - pdbc->henv = penv; - penv->refcount ++; /* bookkeeping reference count on this driver */ - } - - /* driver's login timeout option must been set before - * its SQLConnect() call */ - if( pdbc->login_timeout != 0UL ) - { - hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM004; - } - else - { - CALL_DRIVER ( hdbc, retcode, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_LOGIN_TIMEOUT, - pdbc->login_timeout ) ) - - if( retcode == SQL_ERROR ) - { - PUSHSQLERR ( pdbc->herr, en_IM006 ); - - return SQL_SUCCESS_WITH_INFO; - } - } - } - - return SQL_SUCCESS; + { + hproc = _iodbcdm_getproc( hdbc, en_AllocConnect ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM005; + } + else + { + CALL_DRIVER ( hdbc, retcode, hproc, + en_AllocConnect, (penv->dhenv, &(pdbc->dhdbc)) ) + } + } + + if( retcode == SQL_ERROR ) + { + sqlstat = en_IM005; + } + + if( sqlstat != en_00000 ) + { + _iodbcdm_driverunload(hdbc); + + pdbc->dhdbc = SQL_NULL_HDBC; + PUSHSQLERR ( pdbc->herr, en_IM005 ); + + return SQL_ERROR; + } + } + + pdbc->henv = penv; + penv->refcount ++; /* bookkeeping reference count on this driver */ + } + + /* driver's login timeout option must been set before + * its SQLConnect() call */ + if( pdbc->login_timeout != 0UL ) + { + hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM004; + } + else + { + CALL_DRIVER ( hdbc, retcode, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_LOGIN_TIMEOUT, + pdbc->login_timeout ) ) + + if( retcode == SQL_ERROR ) + { + PUSHSQLERR ( pdbc->herr, en_IM006 ); + + return SQL_SUCCESS_WITH_INFO; + } + } + } + + return SQL_SUCCESS; } -RETCODE _iodbcdm_driverunload( HDBC hdbc ) +RETCODE _iodbcdm_driverunload( HDBC hdbc ) /* - Call driver's SQLFreeConnect() * - Call driver's SQLFreeEnv() ( for the last reference only) * - Unload the share library( or decrease its reference @@ -288,975 +299,1078 @@ RETCODE _iodbcdm_driverunload( HDBC hdbc ) * - state transition to allocated */ { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - ENV_t FAR* penv; - ENV_t FAR* tpenv; - GENV_t FAR* genv; - HPROC hproc; - RETCODE retcode = SQL_SUCCESS; -/* int sqlstat = en_00000; */ - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* no pointer check will be performed in this function */ - penv = (ENV_t FAR*)pdbc->henv; - genv = (GENV_t FAR*)pdbc->genv; - - if( penv == NULL - || penv->hdll == SQL_NULL_HDLL ) - { - return SQL_SUCCESS; - } + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + ENV_t FAR* penv; + ENV_t FAR* tpenv; + GENV_t FAR* genv; + HPROC hproc; + RETCODE retcode = SQL_SUCCESS; + int sqlstat = en_00000; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* no pointer check will be performed in this function */ + penv = (ENV_t FAR*)pdbc->henv; + genv = (GENV_t FAR*)pdbc->genv; + + if( penv == NULL + || penv->hdll == SQL_NULL_HDLL ) + { + return SQL_SUCCESS; + } #if (ODBCVER >= 0x0300) - hproc = _iodbcdm_getproc( hdbc, en_FreeHandle ); - - if( hproc ) - { - CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle, - ( SQL_HANDLE_DBC, pdbc->dhdbc ) ) - } - else + hproc = _iodbcdm_getproc( hdbc, en_FreeHandle ); + + if( hproc ) + { + CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle, + ( SQL_HANDLE_DBC, pdbc->dhdbc ) ) + } + else #endif - { - hproc = _iodbcdm_getproc( hdbc, en_FreeConnect ); + { + hproc = _iodbcdm_getproc( hdbc, en_FreeConnect ); - if( hproc != SQL_NULL_HPROC ) - { - CALL_DRIVER ( hdbc, retcode, hproc, - en_FreeConnect, ( pdbc->dhdbc ) ) + if( hproc != SQL_NULL_HPROC ) + { + CALL_DRIVER ( hdbc, retcode, hproc, + en_FreeConnect, ( pdbc->dhdbc ) ) - pdbc->dhdbc = SQL_NULL_HDBC; - } - } + pdbc->dhdbc = SQL_NULL_HDBC; + } + } - penv->refcount --; + penv->refcount --; - if( ! penv->refcount ) - /* no other connections still attaching with this driver */ - { + if( ! penv->refcount ) + /* no other connections still attaching with this driver */ + { #if (ODBCVER >= 0x0300) - hproc = _iodbcdm_getproc( hdbc, en_FreeHandle ); - - if( hproc ) - { - CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle, - ( SQL_HANDLE_ENV, penv->dhenv ) ) - } - else + hproc = _iodbcdm_getproc( hdbc, en_FreeHandle ); + + if( hproc ) + { + CALL_DRIVER ( hdbc, retcode, hproc, en_FreeHandle, + ( SQL_HANDLE_ENV, penv->dhenv ) ) + } + else #endif - { - hproc = _iodbcdm_getproc( hdbc, en_FreeEnv ); - - if( hproc != SQL_NULL_HPROC ) - { - CALL_DRIVER ( hdbc, retcode, hproc, en_FreeEnv, - ( penv->dhenv ) ) - - penv->dhenv = SQL_NULL_HENV; - } - } - - _iodbcdm_dllclose ( penv->hdll ); - - penv->hdll = SQL_NULL_HDLL; - - for( tpenv = (ENV_t FAR*)genv->henv; - tpenv != NULL; - tpenv = (ENV_t FAR*)penv->next ) - { - if( tpenv == penv ) - { - genv->henv = penv->next; - break; - } - - if( tpenv->next == penv ) - { - tpenv->next = penv->next; - break; - } - } - - MEM_FREE( penv ); - } - - pdbc->henv = SQL_NULL_HENV; - pdbc->hstmt= SQL_NULL_HSTMT; - /* pdbc->herr = SQL_NULL_HERR; - -- delay to DM's SQLFreeConnect() */ - pdbc->dhdbc= SQL_NULL_HDBC; - pdbc->state= en_dbc_allocated; - - /* set connect options to default values */ - /********** - pdbc->access_mode = SQL_MODE_DEFAULT; - pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; - pdbc->login_timeout = 0UL; - **********/ - pdbc->odbc_cursors = SQL_CUR_DEFAULT; - pdbc->packet_size = 0UL; - pdbc->quiet_mode = (UDWORD)NULL; - pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; - - if( pdbc->current_qualifier != NULL ) - { - MEM_FREE ( pdbc->current_qualifier ); - pdbc->current_qualifier = NULL; - } - - return SQL_SUCCESS; + { + hproc = _iodbcdm_getproc( hdbc, en_FreeEnv ); + + if( hproc != SQL_NULL_HPROC ) + { + CALL_DRIVER ( hdbc, retcode, hproc, en_FreeEnv, + ( penv->dhenv ) ) + + penv->dhenv = SQL_NULL_HENV; + } + } + + _iodbcdm_dllclose ( penv->hdll ); + + penv->hdll == SQL_NULL_HDLL; + + for( tpenv = (ENV_t FAR*)genv->henv; + tpenv != NULL; + tpenv = (ENV_t FAR*)penv->next ) + { + if( tpenv == penv ) + { + genv->henv = penv->next; + break; + } + + if( tpenv->next == penv ) + { + tpenv->next = penv->next; + break; + } + } + + MEM_FREE( penv ); + } + + pdbc->henv = SQL_NULL_HENV; + pdbc->hstmt= SQL_NULL_HSTMT; + /* pdbc->herr = SQL_NULL_HERR; + -- delay to DM's SQLFreeConnect() */ + pdbc->dhdbc= SQL_NULL_HDBC; + pdbc->state= en_dbc_allocated; + + /* set connect options to default values */ + /********** + pdbc->access_mode = SQL_MODE_DEFAULT; + pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; + pdbc->login_timeout = 0UL; + **********/ + pdbc->odbc_cursors = SQL_CUR_DEFAULT; + pdbc->packet_size = 0UL; + pdbc->quiet_mode = (UDWORD)NULL; + pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; + + if( pdbc->current_qualifier != NULL ) + { + MEM_FREE ( pdbc->current_qualifier ); + pdbc->current_qualifier = NULL; + } + + return SQL_SUCCESS; } -static RETCODE _iodbcdm_dbcdelayset( HDBC hdbc ) +static RETCODE _iodbcdm_dbcdelayset( HDBC hdbc ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - ENV_t FAR* penv; - HPROC hproc; - RETCODE retcode = SQL_SUCCESS; - RETCODE ret; - - penv = pdbc->henv; - - hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_IM006 ); - - return SQL_SUCCESS_WITH_INFO; - } - - if( pdbc->access_mode != SQL_MODE_DEFAULT ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - SQL_ACCESS_MODE, - pdbc->access_mode) ) - - retcode |= ret; - } - - if( pdbc->autocommit != SQL_AUTOCOMMIT_DEFAULT ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_AUTOCOMMIT, - pdbc->autocommit ) ) - - retcode |= ret; - } - - if( pdbc->current_qualifier != NULL ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_CURRENT_QUALIFIER, - pdbc->current_qualifier ) ) - - retcode |= ret; - } - - if( pdbc->packet_size != 0UL ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_PACKET_SIZE, - pdbc->packet_size ) ) - - retcode |= ret; - } - - if( pdbc->quiet_mode != (UDWORD)NULL ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_QUIET_MODE, - pdbc->quiet_mode ) ) - - retcode |= ret; - } - - if( pdbc->txn_isolation != SQL_TXN_READ_UNCOMMITTED ) - { - CALL_DRIVER ( hdbc, ret, hproc, - en_SetConnectOption, ( - pdbc->dhdbc, - SQL_TXN_ISOLATION, - pdbc->txn_isolation ) ) - } - - /* check error code for driver's SQLSetConnectOption() call */ - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - PUSHSQLERR ( pdbc->herr, en_IM006 ); - - retcode = SQL_ERROR; - } - - /* get cursor behavior on transaction commit or rollback */ - hproc = _iodbcdm_getproc( hdbc, en_GetInfo ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_01000 ); - - return retcode; - } - - CALL_DRIVER ( hdbc, ret, hproc, - en_GetInfo, ( - pdbc->dhdbc, - SQL_CURSOR_COMMIT_BEHAVIOR, - (PTR)&(pdbc->cb_commit), - sizeof(pdbc->cb_commit), - NULL ) ) - - retcode |= ret; - - CALL_DRIVER ( hdbc, ret, hproc, - en_GetInfo, ( - pdbc->dhdbc, - SQL_CURSOR_ROLLBACK_BEHAVIOR, - (PTR)&(pdbc->cb_rollback), - sizeof(pdbc->cb_rollback), - NULL ) ) - - retcode |= ret; - - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - return SQL_ERROR; - } - - return retcode; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + ENV_t FAR* penv; + HPROC hproc; + RETCODE retcode = SQL_SUCCESS; + RETCODE ret; + + penv = pdbc->henv; + + hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_IM006 ); + + return SQL_SUCCESS_WITH_INFO; + } + + if( pdbc->access_mode != SQL_MODE_DEFAULT ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + SQL_ACCESS_MODE, + pdbc->access_mode) ) + + retcode |= ret; + } + + if( pdbc->autocommit != SQL_AUTOCOMMIT_DEFAULT ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_AUTOCOMMIT, + pdbc->autocommit ) ) + + retcode |= ret; + } + + if( pdbc->current_qualifier != NULL ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_CURRENT_QUALIFIER, + pdbc->current_qualifier ) ) + + retcode |= ret; + } + + if( pdbc->packet_size != 0UL ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_PACKET_SIZE, + pdbc->packet_size ) ) + + retcode |= ret; + } + + if( pdbc->quiet_mode != (UDWORD)NULL ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_QUIET_MODE, + pdbc->quiet_mode ) ) + + retcode |= ret; + } + + if( pdbc->txn_isolation != SQL_TXN_READ_UNCOMMITTED ) + { + CALL_DRIVER ( hdbc, ret, hproc, + en_SetConnectOption, ( + pdbc->dhdbc, + SQL_TXN_ISOLATION, + pdbc->txn_isolation ) ) + } + + /* check error code for driver's SQLSetConnectOption() call */ + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + PUSHSQLERR ( pdbc->herr, en_IM006 ); + + retcode = SQL_ERROR; + } + + /* get cursor behavior on transaction commit or rollback */ + hproc = _iodbcdm_getproc( hdbc, en_GetInfo ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_01000 ); + + return retcode; + } + + CALL_DRIVER ( hdbc, ret, hproc, + en_GetInfo, ( + pdbc->dhdbc, + SQL_CURSOR_COMMIT_BEHAVIOR, + (PTR)&(pdbc->cb_commit), + sizeof(pdbc->cb_commit), + NULL ) ) + + retcode |= ret; + + CALL_DRIVER ( hdbc, ret, hproc, + en_GetInfo, ( + pdbc->dhdbc, + SQL_CURSOR_ROLLBACK_BEHAVIOR, + (PTR)&(pdbc->cb_rollback), + sizeof(pdbc->cb_rollback), + NULL ) ) + + retcode |= ret; + + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + return SQL_ERROR; + } + + return retcode; } -static RETCODE _iodbcdm_settracing( HDBC hdbc, char* dsn, int dsnlen ) +static RETCODE _iodbcdm_settracing( HDBC hdbc, char* dsn, int dsnlen ) { - char buf[256]; - char* ptr; - RETCODE setopterr = SQL_SUCCESS; - - /* Get Driver's DLL path from specificed or default dsn section */ - ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "TraceFile", - (char FAR*)buf, sizeof(buf)); - - if( ptr == NULL || ptr[0] == '\0' ) - { - ptr = (char FAR*)(SQL_OPT_TRACE_FILE_DEFAULT); - } - - setopterr |= SQLSetConnectOption( hdbc, - SQL_OPT_TRACEFILE, (UDWORD)(ptr)); - - ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "Trace", - (char FAR*)buf, sizeof(buf)); - - if( ptr != NULL ) - { - UDWORD opt = (UDWORD)(-1L); - - if( STREQ(ptr, "ON") - || STREQ(ptr, "On") - || STREQ(ptr, "on") - || STREQ(ptr, "1" ) ) - { - opt = SQL_OPT_TRACE_ON; - } - - if( STREQ(ptr, "OFF") - || STREQ(ptr, "Off") - || STREQ(ptr, "off") - || STREQ(ptr, "0" ) ) - { - opt = SQL_OPT_TRACE_OFF; - } - - if( opt != (UDWORD)(-1L) ) - { - setopterr |= SQLSetConnectOption( hdbc, - SQL_OPT_TRACE, opt); - } - } - - return setopterr; + char buf[256]; + char* ptr; + RETCODE setopterr = SQL_SUCCESS; + + /* Get Driver's DLL path from specificed or default dsn section */ + ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "TraceFile", + (char FAR*)buf, sizeof(buf)); + + if( ptr == NULL || ptr[0] == '\0' ) + { + ptr = (char FAR*)(SQL_OPT_TRACE_FILE_DEFAULT); + } + + setopterr |= SQLSetConnectOption( hdbc, + SQL_OPT_TRACEFILE, (UDWORD)(ptr)); + + ptr = _iodbcdm_getkeyvalbydsn( dsn, dsnlen, "Trace", + (char FAR*)buf, sizeof(buf)); + + if( ptr != NULL ) + { + UDWORD opt = (UDWORD)(-1L); + + if( STREQ(ptr, "ON") + || STREQ(ptr, "On") + || STREQ(ptr, "on") + || STREQ(ptr, "1" ) ) + { + opt = SQL_OPT_TRACE_ON; + } + + if( STREQ(ptr, "OFF") + || STREQ(ptr, "Off") + || STREQ(ptr, "off") + || STREQ(ptr, "0" ) ) + { + opt = SQL_OPT_TRACE_OFF; + } + + if( opt != (UDWORD)(-1L) ) + { + setopterr |= SQLSetConnectOption( hdbc, + SQL_OPT_TRACE, opt); + } + } + return SQL_SUCCESS; } -RETCODE SQL_API SQLConnect ( - HDBC hdbc, - UCHAR FAR* szDSN, - SWORD cbDSN, - UCHAR FAR* szUID, - SWORD cbUID, - UCHAR FAR* szAuthStr, - SWORD cbAuthStr) +RETCODE SQL_API SQLConnect ( + HDBC hdbc, + UCHAR FAR* szDSN, + SWORD cbDSN, + UCHAR FAR* szUID, + SWORD cbUID, + UCHAR FAR* szAuthStr, + SWORD cbAuthStr) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - RETCODE retcode = SQL_SUCCESS; - RETCODE setopterr = SQL_SUCCESS; - char driver[1024] = { '\0' }; /* MS SDK Guide - * specifies driver - * path can't longer - * than 255. */ - char *ptr; - HPROC hproc; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( ( cbDSN < 0 && cbDSN != SQL_NTS ) - || ( cbUID < 0 && cbUID != SQL_NTS ) - || ( cbAuthStr < 0 && cbAuthStr != SQL_NTS ) - || ( cbDSN > SQL_MAX_DSN_LENGTH ) ) - { - PUSHSQLERR ( pdbc->herr, en_S1090 ); - - return SQL_ERROR; - } - - if( szDSN == NULL || cbDSN == 0 ) - { - PUSHSQLERR ( pdbc->herr, en_IM002 ); - - return SQL_ERROR; - } - - /* check state */ - if( pdbc->state != en_dbc_allocated ) - { - PUSHSQLERR ( pdbc->herr, en_08002 ); - - return SQL_ERROR; - } - - setopterr |= _iodbcdm_settracing( hdbc, - (char*)szDSN, cbDSN ); - - ptr = _iodbcdm_getkeyvalbydsn( szDSN, cbDSN, "Driver", - (char FAR*)driver, sizeof(driver)); - - if( ptr == NULL ) - /* No specified or default dsn section or - * no driver specification in this dsn section */ - { - PUSHSQLERR ( pdbc->herr, en_IM002 ); - - return SQL_ERROR; - } - - retcode = _iodbcdm_driverload( driver, hdbc ); - - switch( retcode ) - { - case SQL_SUCCESS: - break; - - case SQL_SUCCESS_WITH_INFO: - setopterr = SQL_ERROR; - /* unsuccessed in calling driver's - * SQLSetConnectOption() to set login - * timeout. - */ - break; - - default: - return retcode; - } - - hproc = _iodbcdm_getproc( hdbc, en_Connect ); - - if( hproc == SQL_NULL_HPROC ) - { - _iodbcdm_driverunload( hdbc ); - - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_Connect, ( - pdbc->dhdbc, - szDSN, cbDSN, - szUID, cbUID, - szAuthStr, cbAuthStr ) ) + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + RETCODE retcode = SQL_SUCCESS; + RETCODE setopterr = SQL_SUCCESS; + char driver[1024] = { '\0' }; /* MS SDK Guide + * specifies driver + * path can't longer + * than 255. */ + char szNewDSN[256]; /* OS/2 !!! */ + char *ptr; + HPROC hproc; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( ( cbDSN < 0 && cbDSN != SQL_NTS ) + || ( cbUID < 0 && cbUID != SQL_NTS ) + || ( cbAuthStr < 0 && cbAuthStr != SQL_NTS ) + || ( cbDSN > SQL_MAX_DSN_LENGTH ) ) + { + PUSHSQLERR ( pdbc->herr, en_S1090 ); + + return SQL_ERROR; + } + + if( szDSN == NULL || cbDSN == 0 ) + { + PUSHSQLERR ( pdbc->herr, en_IM002 ); + + return SQL_ERROR; + } + + /* check state */ + if( pdbc->state != en_dbc_allocated ) + { + PUSHSQLERR ( pdbc->herr, en_08002 ); + + return SQL_ERROR; + } + + setopterr |= _iodbcdm_settracing( hdbc, + (char*)szDSN, cbDSN ); + + ptr = _iodbcdm_getkeyvalbydsn( szDSN, cbDSN, "Driver", + (char FAR*)driver, sizeof(driver)); + + if( ptr == NULL ) + /* No specified or default dsn section or + * no driver specification in this dsn section */ + { + PUSHSQLERR ( pdbc->herr, en_IM002 ); + + return SQL_ERROR; + } + + /* + ** OS/2 !!! + ** + ** get new szDSN from INI file, if existing + */ + if( NULL != _iodbcdm_getkeyvalbydsn( szDSN, cbDSN, "DSN", + (char FAR*) &szNewDSN, + sizeof(szNewDSN) ) ) + { + szDSN = &szNewDSN[0]; + cbDSN = SQL_NTS; + } + + retcode = _iodbcdm_driverload( driver, hdbc ); + + switch( retcode ) + { + case SQL_SUCCESS: + break; + + case SQL_SUCCESS_WITH_INFO: + setopterr = SQL_ERROR; + /* unsuccessed in calling driver's + * SQLSetConnectOption() to set login + * timeout. + */ + break; + + default: + return retcode; + } + + hproc = _iodbcdm_getproc( hdbc, en_Connect ); + + if( hproc == SQL_NULL_HPROC ) + { + _iodbcdm_driverunload( hdbc ); + + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_Connect, ( + pdbc->dhdbc, + szDSN, cbDSN, + szUID, cbUID, + szAuthStr, cbAuthStr ) ) #if 0 - retcode = hproc(pdbc->dhdbc, - szDSN, cbDSN, - szUID, cbUID, - szAuthStr, cbAuthStr ); + retcode = hproc(pdbc->dhdbc, + szDSN, cbDSN, + szUID, cbUID, + szAuthStr, cbAuthStr ); #endif - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - /* not unload driver for retrive error - * messge from driver */ - /********* - _iodbcdm_driverunload( hdbc ); - **********/ + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + /* not unload driver for retrive error + * messge from driver */ + /********* + _iodbcdm_driverunload( hdbc ); + **********/ - return retcode; - } + return retcode; + } - /* state transition */ - pdbc->state = en_dbc_connected; + /* state transition */ + pdbc->state = en_dbc_connected; - /* do delaid option setting */ - setopterr |= _iodbcdm_dbcdelayset( hdbc ); + /* do delaid option setting */ + setopterr |= _iodbcdm_dbcdelayset( hdbc ); - if( setopterr != SQL_SUCCESS ) - { - return SQL_SUCCESS_WITH_INFO; - } + if( setopterr != SQL_SUCCESS ) + { + return SQL_SUCCESS_WITH_INFO; + } - return retcode; + return retcode; } - -RETCODE SQL_API SQLDriverConnect ( - HDBC hdbc, - HWND hwnd, - UCHAR FAR* szConnStrIn, - SWORD cbConnStrIn, - UCHAR FAR* szConnStrOut, - SWORD cbConnStrOutMax, - SWORD FAR* pcbConnStrOut, - UWORD fDriverCompletion ) -{ - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - HDLL hdll; - char FAR* drv; - char drvbuf[1024]; - char FAR* dsn; - char dsnbuf[SQL_MAX_DSN_LENGTH + 1]; - UCHAR cnstr2drv[1024]; - - HPROC hproc, dialproc; - - int sqlstat = en_00000; - RETCODE retcode = SQL_SUCCESS; - RETCODE setopterr = SQL_SUCCESS; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS ) - || cbConnStrOutMax < 0 ) - { - PUSHSQLERR (pdbc->herr, en_S1090 ); - - return SQL_ERROR; - } - - /* check state */ - if( pdbc->state != en_dbc_allocated ) - { - PUSHSQLERR (pdbc->herr, en_08002 ); - - return SQL_ERROR; - } - - drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, - "DRIVER", drvbuf, sizeof(drvbuf)); - - dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, - "DSN", dsnbuf, sizeof(dsnbuf)); - - switch( fDriverCompletion ) - { - case SQL_DRIVER_NOPROMPT: - break; - - case SQL_DRIVER_COMPLETE: - case SQL_DRIVER_COMPLETE_REQUIRED: - if( dsn != NULL ) - { - break; - } - /* fall to next case */ - case SQL_DRIVER_PROMPT: - /* Get data source dialog box function from - * current executable */ - hdll = _iodbcdm_dllopen((char FAR*)NULL); - dialproc = _iodbcdm_dllproc( hdll, - "_iodbcdm_drvconn_dialbox"); - - if( dialproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM008; - break; - } - - retcode = dialproc( - hwnd, /* window or display handle */ - dsnbuf, /* input/output dsn buf */ - sizeof(dsnbuf), /* buf size */ - &sqlstat); /* error code */ - - if( retcode != SQL_SUCCESS ) - { - break; - } - - if( cbConnStrIn == SQL_NTS ) - { - cbConnStrIn = STRLEN(szConnStrIn ); - } - - dsn = dsnbuf; - - if( dsn[0] == '\0' ) - { - dsn = "default"; - } - - if( cbConnStrIn > sizeof(cnstr2drv) - - STRLEN(dsn) - STRLEN("DSN=;") -1 ) - { - sqlstat = en_S1001; /* a lazy way to avoid - * using heap memory */ - break; - } - - sprintf( (char FAR *)cnstr2drv, "DSN=%s;", dsn); - cbConnStrIn += STRLEN(cnstr2drv); - STRNCAT( cnstr2drv, szConnStrIn, cbConnStrIn ); - szConnStrIn = cnstr2drv; - break; - - default: - sqlstat = en_S1110; - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR( pdbc->herr, sqlstat ); - - return SQL_ERROR; - } - - if( dsn == NULL || dsn[0] == '\0' ) - { - dsn = "default"; - } - else /* if you want tracing, you must use a DSN */ - { - setopterr |= _iodbcdm_settracing( hdbc, - (char*)dsn, SQL_NTS ); - } - - if( drv == NULL || drv[0] == '\0' ) - { - drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver", - drvbuf, sizeof(drvbuf)); - } - - if( drv == NULL ) - { - PUSHSQLERR( pdbc->herr, en_IM002 ); - - return SQL_ERROR; - } - retcode = _iodbcdm_driverload( drv, hdbc ); - - switch( retcode ) - { - case SQL_SUCCESS: - break; - - case SQL_SUCCESS_WITH_INFO: - setopterr = SQL_ERROR; - /* unsuccessed in calling driver's - * SQLSetConnectOption() to set login - * timeout. - */ - break; - - default: - return retcode; - } - - hproc = _iodbcdm_getproc( hdbc, en_DriverConnect ); - - if( hproc == SQL_NULL_HPROC ) - { - _iodbcdm_driverunload( hdbc ); - - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_DriverConnect, ( - pdbc->dhdbc, hwnd, - szConnStrIn, cbConnStrIn, - szConnStrOut, cbConnStrOutMax, - pcbConnStrOut, fDriverCompletion ) ) +RETCODE SQL_API SQLDriverConnect ( + HDBC hdbc, + HWND hwnd, + UCHAR FAR* szConnStrIn, + SWORD cbConnStrIn, + UCHAR FAR* szConnStrOut, + SWORD cbConnStrOutMax, + SWORD FAR* pcbConnStrOut, + UWORD fDriverCompletion ) +{ + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + HDLL hdll; + char FAR* drv; + char drvbuf[1024]; + char FAR* dsn; + char dsnbuf[SQL_MAX_DSN_LENGTH + 1]; + char szNewDSN[256]; /* OS/2 !!! */ + UCHAR cnstr2drv[1024]; + + HPROC hproc, dialproc; + + int sqlstat = en_00000; + RETCODE retcode = SQL_SUCCESS; + RETCODE setopterr = SQL_SUCCESS; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS ) + || cbConnStrOutMax < 0 ) + { + PUSHSQLERR (pdbc->herr, en_S1090 ); + + return SQL_ERROR; + } + + /* check state */ + if( pdbc->state != en_dbc_allocated ) + { + PUSHSQLERR (pdbc->herr, en_08002 ); + + return SQL_ERROR; + } + + drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, + "DRIVER", drvbuf, sizeof(drvbuf)); + + dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, + "DSN", dsnbuf, sizeof(dsnbuf)); + + switch( fDriverCompletion ) + { + case SQL_DRIVER_NOPROMPT: + break; + + case SQL_DRIVER_COMPLETE: + case SQL_DRIVER_COMPLETE_REQUIRED: + if( dsn != NULL ) + { + break; + } + /* fall to next case */ + case SQL_DRIVER_PROMPT: + /* Get data source dialog box function from + * current executable */ + hdll = _iodbcdm_dllopen((char FAR*)NULL); + dialproc = _iodbcdm_dllproc( hdll, + "_iodbcdm_drvconn_dialbox"); + + if( dialproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM008; + break; + } + + retcode = dialproc( + hwnd, /* window or display handle */ + dsnbuf, /* input/output dsn buf */ + sizeof(dsnbuf), /* buf size */ + &sqlstat); /* error code */ + + if( retcode != SQL_SUCCESS ) + { + break; + } + + if( cbConnStrIn == SQL_NTS ) + { + cbConnStrIn = STRLEN(szConnStrIn ); + } + + dsn = dsnbuf; + + if( dsn[0] == '\0' ) + { + dsn = "default"; + } + + if( cbConnStrIn > sizeof(cnstr2drv) + - STRLEN(dsn) - STRLEN("DSN=;") -1 ) + { + sqlstat = en_S1001; /* a lazy way to avoid + * using heap memory */ + break; + } + + sprintf(cnstr2drv, "DSN=%s;", dsn); + cbConnStrIn += STRLEN(cnstr2drv); + STRNCAT( cnstr2drv, szConnStrIn, cbConnStrIn ); + szConnStrIn = cnstr2drv; + break; + + default: + sqlstat = en_S1110; + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR( pdbc->herr, sqlstat ); + + return SQL_ERROR; + } + + if( dsn == NULL || dsn[0] == '\0' ) + { + dsn = "default"; + } + else /* if you want tracing, you must use a DSN */ + { + setopterr |= _iodbcdm_settracing( hdbc, + (char*)dsn, SQL_NTS ); + } + + if( drv == NULL || drv[0] == '\0' ) + { + drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver", + drvbuf, sizeof(drvbuf)); + } + + if( drv == NULL ) + { + PUSHSQLERR( pdbc->herr, en_IM002 ); + + return SQL_ERROR; + } + + retcode = _iodbcdm_driverload( drv, hdbc ); + + switch( retcode ) + { + case SQL_SUCCESS: + break; + + case SQL_SUCCESS_WITH_INFO: + setopterr = SQL_ERROR; + /* unsuccessed in calling driver's + * SQLSetConnectOption() to set login + * timeout. + */ + break; + + default: + return retcode; + } + + hproc = _iodbcdm_getproc( hdbc, en_DriverConnect ); + + if( hproc == SQL_NULL_HPROC ) + { + _iodbcdm_driverunload( hdbc ); + + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + /* giovanni */ + /* + ** OS/2 !!! + ** + ** get new szDSN from INI file, if existing + */ + strcpy( szNewDSN, "DSN=" ); + if( NULL != _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "DSN", + (char FAR*) &szNewDSN[4], + sizeof(szNewDSN) - 4 ) ) + { + char *psz; + + strcat( szNewDSN, ";UID=" ); + psz = strtok( szNewDSN, "\0" ); + + + + + if(NULL == _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn, + /* + "UID", psz, sizeof(szNewDSN) )) + */ + "UID", (char FAR*) &szNewDSN[strlen(psz)], + (sizeof(szNewDSN) - strlen(psz)) ) ) + { + _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, + "UID", (char FAR*) &szNewDSN[strlen(psz)], + (sizeof(szNewDSN) - strlen(psz)) ); + } + strcat( szNewDSN, ";PWD=" ); + psz = strtok( szNewDSN, "\0" ); + if(NULL == _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn, + /* + "PWD", psz, sizeof(szNewDSN) )) + */ + "PWD", (char FAR*) &szNewDSN[strlen(psz)], + (sizeof(szNewDSN) - strlen(psz)) ) ) + { + _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, + "PWD", (char FAR*) &szNewDSN[strlen(psz)], + (sizeof(szNewDSN) - strlen(psz)) ); + } +/* +new from dirk + { + register char *psz; + + strcat( szNewDSN, ";UID=" ); + psz = strtok( szNewDSN, "\0" ); + _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn, + "UID", psz, sizeof(szNewDSN) ); + strcat( szNewDSN, ";PWD=" ); + psz = strtok( szNewDSN, "\0" ); + _iodbcdm_getkeyvalinstr( szConnStrIn, cbConnStrIn, + "PWD", psz, sizeof(szNewDSN) ); + szConnStrIn = &szNewDSN[0]; + cbConnStrIn = SQL_NTS; + } + + +*/ + /******** giovanni & monty ********/ + /* Add a lot of optional keywords */ + { + static char *keywords[]= { "SERVER","PORT","SOCKET","OPTION","DB",0 }; + char buff[80],**key,*end; + + psz= szNewDSN+strlen(szNewDSN); + end= szNewDSN+sizeof(szNewDSN); + for (key=keywords ; *key ; key++) + { + if (_iodbcdm_getkeyvalbydsn(dsn, SQL_NTS, + *key, (char FAR*) buff, + sizeof(buff)) && + strlen(*key)+strlen(buff)+2 < (int) (end - psz)) + { + *psz++=';'; + strcpy(psz,*key); psz+=strlen(*key); + *psz++='='; + strcpy(psz,buff); psz+=strlen(buff); + } + } + } + *psz=0; + /******** giovanni */ + szConnStrIn = szNewDSN; /*giovanni, era &szNewDSN */ + cbConnStrIn = SQL_NTS; + } + /* giovanni */ + CALL_DRIVER ( hdbc, retcode, hproc, en_DriverConnect, ( + pdbc->dhdbc, hwnd, + szConnStrIn, cbConnStrIn, + szConnStrOut, cbConnStrOutMax, + pcbConnStrOut, fDriverCompletion ) ) #if 0 - retcode = hproc(pdbc->dhdbc, hwnd, - szConnStrIn, cbConnStrIn, - szConnStrOut, cbConnStrOutMax, - pcbConnStrOut, fDriverCompletion ); + retcode = hproc(pdbc->dhdbc, hwnd, + szConnStrIn, cbConnStrIn, + szConnStrOut, cbConnStrOutMax, + pcbConnStrOut, fDriverCompletion ); #endif - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - /* don't unload driver here for retrive - * error message from driver */ - /******** - _iodbcdm_driverunload( hdbc ); - *********/ + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + /* don't unload driver here for retrive + * error message from driver */ + /******** + _iodbcdm_driverunload( hdbc ); + *********/ - return retcode; - } + return retcode; + } - /* state transition */ - pdbc->state = en_dbc_connected; + /* state transition */ + pdbc->state = en_dbc_connected; - /* do delaid option setting */ - setopterr |= _iodbcdm_dbcdelayset( hdbc ); + /* do delaid option setting */ + setopterr |= _iodbcdm_dbcdelayset( hdbc ); - if( setopterr != SQL_SUCCESS ) - { - return SQL_SUCCESS_WITH_INFO; - } + if( setopterr != SQL_SUCCESS ) + { + return SQL_SUCCESS_WITH_INFO; + } - return retcode; + return retcode; } -RETCODE SQL_API SQLBrowseConnect ( - HDBC hdbc, - HWND hwnd, - UCHAR FAR* szConnStrIn, - SWORD cbConnStrIn, - UCHAR FAR* szConnStrOut, - SWORD cbConnStrOutMax, - SWORD FAR* pcbConnStrOut ) +RETCODE SQL_API SQLBrowseConnect ( + HDBC hdbc, + HWND hwnd, + UCHAR FAR* szConnStrIn, + SWORD cbConnStrIn, + UCHAR FAR* szConnStrOut, + SWORD cbConnStrOutMax, + SWORD FAR* pcbConnStrOut ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; -/* HDLL hdll; */ - char FAR* drv; - char drvbuf[1024]; - char FAR* dsn; - char dsnbuf[SQL_MAX_DSN_LENGTH + 1]; -/* UCHAR cnstr2drv[1024]; */ - - HPROC hproc /*, dialproc*/ ; - -/* int sqlstat = en_00000; */ - RETCODE retcode = SQL_SUCCESS; - RETCODE setopterr = SQL_SUCCESS; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS ) - || cbConnStrOutMax < 0 ) - { - PUSHSQLERR (pdbc->herr, en_S1090 ); - - return SQL_ERROR; - } - - if( pdbc->state == en_dbc_allocated ) - { - drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, - "DRIVER", drvbuf, sizeof(drvbuf)); - - dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, - "DSN", dsnbuf, sizeof(dsnbuf)); - - if( dsn == NULL || dsn[0] == '\0' ) - { - dsn = "default"; - } - else /* if you want tracing, you must use a DSN */ - { - setopterr |= _iodbcdm_settracing( hdbc, - (char*)dsn, SQL_NTS ); - } - - if( drv == NULL || drv[0] == '\0' ) - { - drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver", - drvbuf, sizeof(drvbuf)); - } - - if( drv == NULL ) - { - PUSHSQLERR( pdbc->herr, en_IM002 ); - - return SQL_ERROR; - } - - retcode = _iodbcdm_driverload( drv, hdbc ); - - switch( retcode ) - { - case SQL_SUCCESS: - break; - - case SQL_SUCCESS_WITH_INFO: - setopterr = SQL_ERROR; - /* unsuccessed in calling driver's - * SQLSetConnectOption() to set login - * timeout. - */ - break; - - default: - return retcode; - } - } - else if( pdbc->state != en_dbc_needdata ) - { - PUSHSQLERR ( pdbc->herr, en_08002 ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( hdbc, en_BrowseConnect); - - if( hproc == SQL_NULL_HPROC ) - { - _iodbcdm_driverunload( hdbc ); - - pdbc->state = en_dbc_allocated; - - PUSHSQLERR( pdbc->herr, en_IM001 ); + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + HDLL hdll; + char FAR* drv; + char drvbuf[1024]; + char FAR* dsn; + char dsnbuf[SQL_MAX_DSN_LENGTH + 1]; + UCHAR cnstr2drv[1024]; + + HPROC hproc, dialproc; + + int sqlstat = en_00000; + RETCODE retcode = SQL_SUCCESS; + RETCODE setopterr = SQL_SUCCESS; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( ( cbConnStrIn < 0 && cbConnStrIn != SQL_NTS ) + || cbConnStrOutMax < 0 ) + { + PUSHSQLERR (pdbc->herr, en_S1090 ); + + return SQL_ERROR; + } + + if( pdbc->state == en_dbc_allocated ) + { + drv = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, + "DRIVER", drvbuf, sizeof(drvbuf)); + + dsn = _iodbcdm_getkeyvalinstr(szConnStrIn, cbConnStrIn, + "DSN", dsnbuf, sizeof(dsnbuf)); + + if( dsn == NULL || dsn[0] == '\0' ) + { + dsn = "default"; + } + else /* if you want tracing, you must use a DSN */ + { + setopterr |= _iodbcdm_settracing( hdbc, + (char*)dsn, SQL_NTS ); + } + + if( drv == NULL || drv[0] == '\0' ) + { + drv = _iodbcdm_getkeyvalbydsn( dsn, SQL_NTS, "Driver", + drvbuf, sizeof(drvbuf)); + } + + if( drv == NULL ) + { + PUSHSQLERR( pdbc->herr, en_IM002 ); + + return SQL_ERROR; + } + + retcode = _iodbcdm_driverload( drv, hdbc ); + + switch( retcode ) + { + case SQL_SUCCESS: + break; + + case SQL_SUCCESS_WITH_INFO: + setopterr = SQL_ERROR; + /* unsuccessed in calling driver's + * SQLSetConnectOption() to set login + * timeout. + */ + break; + + default: + return retcode; + } + } + else if( pdbc->state != en_dbc_needdata ) + { + PUSHSQLERR ( pdbc->herr, en_08002 ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( hdbc, en_BrowseConnect); + + if( hproc == SQL_NULL_HPROC ) + { + _iodbcdm_driverunload( hdbc ); + + pdbc->state = en_dbc_allocated; + + PUSHSQLERR( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_BrowseConnect, ( + pdbc->dhdbc, hwnd, + szConnStrIn, cbConnStrIn, + szConnStrOut, cbConnStrOutMax, + pcbConnStrOut ) ) - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_BrowseConnect, ( - pdbc->dhdbc, hwnd, - szConnStrIn, cbConnStrIn, - szConnStrOut, cbConnStrOutMax, - pcbConnStrOut ) ) - -#if 0 - retcode = hproc(pdbc->dhdbc, hwnd, - szConnStrIn, cbConnStrIn, - szConnStrOut, cbConnStrOutMax, - pcbConnStrOut ); +#if 0 + retcode = hproc(pdbc->dhdbc, hwnd, + szConnStrIn, cbConnStrIn, + szConnStrOut, cbConnStrOutMax, + pcbConnStrOut ); #endif - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - pdbc->state = en_dbc_connected; - setopterr |= _iodbcdm_dbcdelayset( hdbc ); - if( setopterr != SQL_SUCCESS ) - { - retcode = SQL_SUCCESS_WITH_INFO; - } - break; - - case SQL_NEED_DATA: - pdbc->state = en_dbc_needdata; - break; - - case SQL_ERROR: - pdbc->state = en_dbc_allocated; - /* but the driver will not unloaded - * to allow application retrive err - * message from driver - */ - break; - - default: - break; - } - - return retcode; + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + pdbc->state = en_dbc_connected; + setopterr |= _iodbcdm_dbcdelayset( hdbc ); + if( setopterr != SQL_SUCCESS ) + { + retcode = SQL_SUCCESS_WITH_INFO; + } + break; + + case SQL_NEED_DATA: + pdbc->state = en_dbc_needdata; + break; + + case SQL_ERROR: + pdbc->state = en_dbc_allocated; + /* but the driver will not unloaded + * to allow application retrive err + * message from driver + */ + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLDisconnect ( HDBC hdbc ) +RETCODE SQL_API SQLDisconnect ( HDBC hdbc ) { - DBC_t FAR* pdbc = (DBC_t*)hdbc; - STMT_t FAR* pstmt; - RETCODE retcode; - HPROC hproc; - - int sqlstat = en_00000; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check hdbc state */ - if ( pdbc->state == en_dbc_allocated ) - { - sqlstat = en_08003; - } - - /* check stmt(s) state */ - for( pstmt = (STMT_t FAR*)pdbc->hstmt; - pstmt != NULL && sqlstat == en_00000; - pstmt = (STMT_t FAR*)pstmt->next ) - { - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - /* In this case one need to call - * SQLCancel() first */ - { - sqlstat = en_S1010; - } - } - - if( sqlstat == en_00000 ) - { - hproc = _iodbcdm_getproc( hdbc, en_Disconnect ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pdbc->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_Disconnect, ( - pdbc->dhdbc ) ) + DBC_t FAR* pdbc = (DBC_t*)hdbc; + STMT_t FAR* pstmt; + RETCODE retcode; + HPROC hproc; + + int sqlstat = en_00000; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check hdbc state */ + if ( pdbc->state == en_dbc_allocated ) + { + sqlstat = en_08003; + } + + /* check stmt(s) state */ + for( pstmt = (STMT_t FAR*)pdbc->hstmt; + pstmt != NULL && sqlstat == en_00000; + pstmt = (STMT_t FAR*)pstmt->next ) + { + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + /* In this case one need to call + * SQLCancel() first */ + { + sqlstat = en_S1010; + } + } + + if( sqlstat == en_00000 ) + { + hproc = _iodbcdm_getproc( hdbc, en_Disconnect ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pdbc->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_Disconnect, ( + pdbc->dhdbc ) ) #if 0 - retcode = hproc( pdbc->dhdbc ); + retcode = hproc( pdbc->dhdbc ); #endif - if( retcode == SQL_SUCCESS - || retcode == SQL_SUCCESS_WITH_INFO ) - { - /* diff from MS specs. We disallow - * driver SQLDisconnect() return - * SQL_SUCCESS_WITH_INFO and post - * error message. - */ - retcode = SQL_SUCCESS; - } - else - { - return retcode; - } - - /* free all statement handle(s) on this connection */ - for(;pdbc->hstmt;) - { - _iodbcdm_dropstmt( pdbc->hstmt ); - } + if( retcode == SQL_SUCCESS + || retcode == SQL_SUCCESS_WITH_INFO ) + { + /* diff from MS specs. We disallow + * driver SQLDisconnect() return + * SQL_SUCCESS_WITH_INFO and post + * error message. + */ + retcode = SQL_SUCCESS; + } + else + { + return retcode; + } + + /* free all statement handle(s) on this connection */ + for(;pdbc->hstmt;) + { + _iodbcdm_dropstmt( pdbc->hstmt ); + } #if 0 - retcode = _iodbcdm_driverunload( hdbc ); + retcode = _iodbcdm_driverunload( hdbc ); #endif - /* state transition */ - if( retcode == SQL_SUCCESS ) - { - pdbc->state = en_dbc_allocated; - } + /* state transition */ + if( retcode == SQL_SUCCESS ) + { + pdbc->state = en_dbc_allocated; + } - return retcode; + return retcode; } -RETCODE SQL_API SQLNativeSql( - HDBC hdbc, - UCHAR FAR* szSqlStrIn, - SDWORD cbSqlStrIn, - UCHAR FAR* szSqlStr, - SDWORD cbSqlStrMax, - SDWORD FAR* pcbSqlStr ) +RETCODE SQL_API SQLNativeSql( + HDBC hdbc, + UCHAR FAR* szSqlStrIn, + SDWORD cbSqlStrIn, + UCHAR FAR* szSqlStr, + SDWORD cbSqlStrMax, + SDWORD FAR* pcbSqlStr ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - HPROC hproc; - int sqlstat = en_00000; - RETCODE retcode; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( szSqlStrIn == NULL ) - { - sqlstat = en_S1009; - } - else if( cbSqlStrIn < 0 - && cbSqlStrIn != SQL_NTS ) - { - sqlstat = en_S1090; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pdbc->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pdbc->state <= en_dbc_needdata ) - { - PUSHSQLERR ( pdbc->herr, en_08003 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( hdbc, en_NativeSql ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_NativeSql, ( - pdbc->dhdbc, - szSqlStrIn, - cbSqlStrIn, - szSqlStr, - cbSqlStrMax, - pcbSqlStr ) ) + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + HPROC hproc; + int sqlstat = en_00000; + RETCODE retcode; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( szSqlStrIn == NULL ) + { + sqlstat = en_S1009; + } + else if( cbSqlStrIn < 0 + && cbSqlStrIn != SQL_NTS ) + { + sqlstat = en_S1090; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pdbc->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pdbc->state <= en_dbc_needdata ) + { + PUSHSQLERR ( pdbc->herr, en_08003 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( hdbc, en_NativeSql ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_NativeSql, ( + pdbc->dhdbc, + szSqlStrIn, + cbSqlStrIn, + szSqlStr, + cbSqlStrMax, + pcbSqlStr ) ) #if 0 - retcode = hproc(pdbc->dhdbc, - szSqlStrIn, - cbSqlStrIn, - szSqlStr, - cbSqlStrMax, - pcbSqlStr ); + retcode = hproc(pdbc->dhdbc, + szSqlStrIn, + cbSqlStrIn, + szSqlStr, + cbSqlStrMax, + pcbSqlStr ); #endif - return retcode; + return retcode; } diff --git a/src/iodbc/dlf.c b/src/iodbc/dlf.c index 5745f8f07e..9c5ed64272 100644 --- a/src/iodbc/dlf.c +++ b/src/iodbc/dlf.c @@ -1,6 +1,6 @@ /** dynamic library loader (mapping to svr4) - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,583 +13,649 @@ GNU General Public License for more details. **/ -#include "wx/setup.h" +#ifdef DLDAPI_OS2 +# define INCL_DOSMODULEMGR /* Module Manager values */ +# define INCL_DOSERRORS /* Error values */ +# include +# include +#endif +#include "wx/setup.h" #include <../iodbc/dlf.h> #include -#ifdef DLDAPI_DEFINED +#ifdef DLDAPI_DEFINED # undef DLDAPI_DEFINED #endif -#ifdef DLDAPI_SVR4_DLFCN +#ifdef DLDAPI_SVR4_DLFCN # define DLDAPI_DEFINED -static char sccsid[] = "@(#)dynamic load interface -- SVR4 dlfcn"; +static char sccsid[] = "@(#)dynamic load interface -- SVR4 dlfcn"; #endif -/********************************* +/********************************* * - * HP/UX + * HP/UX * *********************************/ -#ifdef DLDAPI_HP_SHL -# define DLDAPI_DEFINED -# include +#ifdef DLDAPI_HP_SHL +# define DLDAPI_DEFINED +# include -static char sccsid[] = "@(#)dynamic load interface -- HP/UX dl(shl)"; +static char sccsid[] = "@(#)dynamic load interface -- HP/UX dl(shl)"; -void* dlopen(char* path, int mode) +void* dlopen(char* path, int mode) { - return (void*)shl_load((char*)(path), BIND_DEFERRED, 0L); + return (void*)shl_load((char*)(path), BIND_DEFERRED, 0L); } -void* dlsym(void* hdll, char* sym) +void* dlsym(void* hdll, char* sym) { - void* symaddr = 0; - int ret; + void* symaddr = 0; + int ret; - if( ! hdll ) - hdll = (void*)PROG_HANDLE; + if( ! hdll ) + hdll = (void*)PROG_HANDLE; - /* Remember, a driver may export calls as function pointers - * (i.e. with type TYPE_DATA) rather than as functions - * (i.e. with type TYPE_PROCEDURE). Thus, to be safe, we - * uses TYPE_UNDEFINED to cover all of them. - */ - ret = shl_findsym((shl_t*)&hdll, sym, TYPE_UNDEFINED, &symaddr); + /* Remember, a driver may export calls as function pointers + * (i.e. with type TYPE_DATA) rather than as functions + * (i.e. with type TYPE_PROCEDURE). Thus, to be safe, we + * uses TYPE_UNDEFINED to cover all of them. + */ + ret = shl_findsym((shl_t*)&hdll, sym, TYPE_UNDEFINED, &symaddr); - if( ret == -1 ) - return 0; + if( ret == -1 ) + return 0; - return symaddr; + return symaddr; } -char* dlerror() +char* dlerror() { - extern char* strerror(); + extern char* strerror(); - return strerror(errno); + return strerror(errno); } -int dlclose(void* hdll) +int dlclose(void* hdll) { - return shl_unload((shl_t)hdll); + return shl_unload((shl_t)hdll); } -#endif /* end of HP/UX Seection */ +#endif /* end of HP/UX Seection */ /********************************* * - * IBM AIX + * IBM AIX * *********************************/ -#ifdef DLDAPI_AIX_LOAD -# define DLDAPI_DEFINED -# include -# include -# include -# include +#ifdef DLDAPI_AIX_LOAD +# define DLDAPI_DEFINED +# include +# include +# include /* - * Following id sting is a copyright mark. Removing(i.e. use the + * Following id sting is a copyright mark. Removing(i.e. use the * source code in this .c file without include it or make it not - * appear in the final object file of AIX platform) or modifing - * it without permission from original author(kejin@empress.com) + * appear in the final object file of AIX platform) or modifing + * it without permission from original author(kejin@empress.com) * are copyright violation. */ static char sccsid[] - = "@(#)dynamic load interface, Copyright(c) 1995 by Ke Jin"; + = "@(#)dynamic load interface, Copyright(c) 1995 by Ke Jin"; -# ifndef HTAB_SIZE -# define HTAB_SIZE 256 +# ifndef HTAB_SIZE +# define HTAB_SIZE 256 # endif -# define FACTOR 0.618039887 /* i.e. (sqrt(5) - 1)/2 */ +# define FACTOR 0.618039887 /* i.e. (sqrt(5) - 1)/2 */ -# ifndef ENTRY_SYM -# define ENTRY_SYM ".__start" /* default entry point for aix */ +# ifndef ENTRY_SYM +# define ENTRY_SYM ".__start" /* default entry point for aix */ # endif typedef struct slot_s { - char* sym; - long fdesc[3]; /* 12 bytes function descriptor */ - struct slot_s* next; + char* sym; + long fdesc[3]; /* 12 bytes function descriptor */ + struct slot_s* next; } slot_t; /* Note: on AIX, a function pointer actually points to a * function descriptor, a 12 bytes data. The first 4 bytes - * is the virtual address of the function. The next 4 bytes + * is the virtual address of the function. The next 4 bytes * is the virtual address of TOC (Table of Contents) of the - * object module the function belong to. The last 4 bytes - * are always 0 for C and Fortran functions. Every object + * object module the function belong to. The last 4 bytes + * are always 0 for C and Fortran functions. Every object * module has an entry point (which can be specified at link * time by -e ld option). iODBC driver manager requires ODBC * driver shared library always use the default entry point * (so you shouldn't use -e ld option when creating a driver - * share library). load() returns the function descriptor of + * share library). load() returns the function descriptor of * a module's entry point. From which we can calculate function * descriptors of other functions in the same module by using - * the fact that the load() doesn't change the relative - * offset of functions to their module entry point(i.e the - * offset in memory loaded by load() will be as same as in - * the module library file). + * the fact that the load() doesn't change the relative + * offset of functions to their module entry point(i.e the + * offset in memory loaded by load() will be as same as in + * the module library file). */ -typedef slot_t* hent_t; -typedef struct nlist nlist_t; -typedef struct stat stat_t; +typedef slot_t* hent_t; +typedef struct nlist nlist_t; +typedef struct stat stat_t; -typedef struct obj +typedef struct obj { - int dev; /* device id */ - int ino; /* inode number */ - char* path; /* file name */ - int (*pentry)(); /* entry point of this share library */ - int refn; /* number of reference */ - hent_t htab[HTAB_SIZE]; - struct obj* - next; + int dev; /* device id */ + int ino; /* inode number */ + char* path; /* file name */ + int (*pentry)(); /* entry point of this share library */ + int refn; /* number of reference */ + hent_t htab[HTAB_SIZE]; + struct obj* + next; } obj_t; -static char* errmsg = 0; +static char* errmsg = 0; static void init_htab(hent_t* ht) /* initate a hashing table */ { - int i; + int i; - for(i=0; inext; - - free(ent->sym); - free(ent); - - ent = tent; - } - - ht[i] = 0; - } - - return; + int i; + slot_t* ent; + slot_t* tent; + + for(i = 0; i< HTAB_SIZE; i++) + { + for( ent = ht[i]; ent; ) + { + tent = ent->next; + + free(ent->sym); + free(ent); + + ent = tent; + } + + ht[i] = 0; + } + + return; } -static int hash(char* sym ) +static int hash(char* sym ) { - int a, key; - double f; + int a, key; + double f; - if( !sym || !*sym ) - return 0; + if( !sym || !*sym ) + return 0; - for(key=*sym;*sym;sym++) + for(key=*sym;*sym;sym++) { - key += *sym; + key += *sym; a = key; - key = (int)( (a<<8) + (key>>8) ); - key = (key>0)? key:-key; + key = (int)( (a<<8) + (key>>8) ); + key = (key>0)? key:-key; } - f = key*FACTOR; - a = (int)f; + f = key*FACTOR; + a = (int)f; - return (int)((HTAB_SIZE - 1)*( f - a )); + return (int)((HTAB_SIZE - 1)*( f - a )); } -static hent_t search(hent_t* htab, char* sym) +static hent_t search(hent_t* htab, char* sym) /* search hashing table to find a matched slot */ { - int key; - slot_t* ent; + int key; + slot_t* ent; - key = hash(sym); + key = hash(sym); - for(ent = htab[key]; ent; ent = ent->next ) - { - if(!strcmp(ent->sym, sym)) - return ent; - } + for(ent = htab[key]; ent; ent = ent->next ) + { + if(!strcmp(ent->sym, sym)) + return ent; + } - return 0; /* no match */ + return 0; /* no match */ } -static void insert(hent_t* htab, slot_t* ent) +static void insert(hent_t* htab, slot_t* ent) /* insert a new slot to hashing table */ { - int key; + int key; - key = hash(ent->sym); + key = hash(ent->sym); - ent->next = htab[key]; - htab[key] = ent; + ent->next = htab[key]; + htab[key] = ent; - return; + return; } -static slot_t* slot_alloc(char* sym) +static slot_t* slot_alloc(char* sym) /* allocate a new slot with symbol */ { - slot_t* ent; + slot_t* ent; - ent = (slot_t*)malloc(sizeof(slot_t)); + ent = (slot_t*)malloc(sizeof(slot_t)); - ent->sym = (char*)malloc(strlen(sym)+1); + ent->sym = (char*)malloc(strlen(sym)+1); - if( ! ent->sym ) - { - free(ent); - return 0; - } + if( ! ent->sym ) + { + free(ent); + return 0; + } - strcpy( ent->sym, sym ); + strcpy( ent->sym, sym ); - return ent; + return ent; } static obj_t* obj_list = 0; -void* dlopen(char* file, int mode ) +void* dlopen(char* file, int mode ) { - stat_t st; - obj_t* pobj; - char buf[1024]; - - if( ! file || ! *file ) - { - errno = EINVAL; - return 0; - } - - errno = 0; - errmsg = 0; + stat_t st; + obj_t* pobj; + char buf[1024]; + + if( ! file || ! *file ) + { + errno = EINVAL; + return 0; + } + + errno = 0; + errmsg = 0; #if 0 - if( file[0] != '/' && file[0] != '.' ) - { - for(;;) - { - sprintf(buf, "/lib/%s", file); - - if( stat( buf, &st ) ) - { - file = buf; - break; - } - - sprintf(buf, "/usr/lib/%s", file); - - if( stat( buf, &st ) ) - { - file = buf; - break; - } - - if( stat( file, &st ) ) - break; - - return 0; - } - } - else + if( file[0] != '/' && file[0] != '.' ) + { + for(;;) + { + sprintf(buf, "/lib/%s", file); + + if( stat( buf, &st ) ) + { + file = buf; + break; + } + + sprintf(buf, "/usr/lib/%s", file); + + if( stat( buf, &st ) ) + { + file = buf; + break; + } + + if( stat( file, &st ) ) + break; + + return 0; + } + } + else #endif - if( stat( file, &st ) ) - return 0; + if( stat( file, &st ) ) + return 0; - for( pobj = obj_list; pobj; pobj = pobj->next ) - /* find a match object */ - { - if( pobj->ino == st.st_ino - && pobj->dev == st.st_dev ) - { - /* found a match. increase its - * reference count and return - * its address */ - pobj->refn ++; - return pobj; - } - } + for( pobj = obj_list; pobj; pobj = pobj->next ) + /* find a match object */ + { + if( pobj->ino == st.st_ino + && pobj->dev == st.st_dev ) + { + /* found a match. increase its + * reference count and return + * its address */ + pobj->refn ++; + return pobj; + } + } - pobj = (obj_t*)malloc( sizeof(obj_t) ); + pobj = (obj_t*)malloc( sizeof(obj_t) ); - if( ! pobj ) - return 0; + if( ! pobj ) + return 0; - pobj->path = (char*)malloc( strlen(file) + 1); + pobj->path = (char*)malloc( strlen(file) + 1); - if( ! pobj->path ) - { - free( pobj ); - return 0; - } + if( ! pobj->path ) + { + free( pobj ); + return 0; + } - strcpy( pobj->path, file ); + strcpy( pobj->path, file ); - pobj->dev = st.st_dev; - pobj->ino = st.st_ino; - pobj->refn = 1; + pobj->dev = st.st_dev; + pobj->ino = st.st_ino; + pobj->refn = 1; - pobj->pentry = (int(*)())load(file, 0, 0); + pobj->pentry = (int(*)())load(file, 0, 0); - if( ! pobj->pentry ) - { - free( pobj->path ); - free( pobj ); - return 0; - } + if( ! pobj->pentry ) + { + free( pobj->path ); + free( pobj ); + return 0; + } - init_htab(pobj->htab); + init_htab(pobj->htab); - pobj->next = obj_list; - obj_list = pobj; + pobj->next = obj_list; + obj_list = pobj; - return pobj; + return pobj; } -int dlclose(void* hobj) +int dlclose(void* hobj) { - obj_t* pobj = (obj_t*)hobj; - obj_t* tpobj; - int match = 0; - - if( ! hobj ) - { - errno = EINVAL; - return -1; - } - - errno = 0; - errmsg = 0; - - if( pobj == obj_list ) - { - pobj->refn --; - - if( pobj->refn ) - return 0; - - match = 1; - obj_list = pobj->next; - } - - for( tpobj = obj_list; !match && tpobj; tpobj = tpobj->next ) - { - if( tpobj->next == pobj ) - { - pobj->refn --; - - if( pobj->refn ) - return 0; - - match = 1; - tpobj->next = pobj->next; - } - } - - if(match) - { - unload((void*)(pobj->pentry)); - clean_htab(pobj->htab); - free(pobj->path); - free(pobj); - } - - return 0; + obj_t* pobj = (obj_t*)hobj; + obj_t* tpobj; + int match = 0; + + if( ! hobj ) + { + errno = EINVAL; + return -1; + } + + errno = 0; + errmsg = 0; + + if( pobj == obj_list ) + { + pobj->refn --; + + if( pobj->refn ) + return 0; + + match = 1; + obj_list = pobj->next; + } + + for( tpobj = obj_list; !match && tpobj; tpobj = tpobj->next ) + { + if( tpobj->next == pobj ) + { + pobj->refn --; + + if( pobj->refn ) + return 0; + + match = 1; + tpobj->next = pobj->next; + } + } + + if(match) + { + unload((void*)(pobj->pentry)); + clean_htab(pobj->htab); + free(pobj->path); + free(pobj); + } + + return 0; } -char* dlerror() +char* dlerror() { - extern char* sys_errlist[]; + extern char* sys_errlist[]; - if( ! errmsg || ! errmsg[0] ) - { - if( errno >= 0 ) - return sys_errlist[errno]; - - return ""; - } + if( ! errmsg || ! errmsg[0] ) + { + if( errno >= 0 ) + return sys_errlist[errno]; + + return ""; + } - return errmsg; + return errmsg; } -void* dlsym(void* hdl, char* sym) +void* dlsym(void* hdl, char* sym) { - nlist_t nl[3]; - obj_t* pobj = (obj_t*)hdl; - slot_t* ent; - int (*fp)(); - long lbuf[3]; - - if( !hdl || !(pobj->htab) || !sym || ! *sym ) - { - errno = EINVAL; - return 0; - } - - errno = 0; - errmsg = 0; - - ent = search( pobj->htab, sym ); - - if( ent ) - return ent->fdesc; - -#define n_name _n._n_name - - nl[0].n_name = ENTRY_SYM; - nl[1].n_name = sym; - nl[2].n_name = 0; - - /* There is a potential problem here. If application - * did not pass a full path name, and changed the - * working directory after the load(), then nlist() - * will be unable to open the original shared library - * file to resolve the symbols. there are 3 ways to working - * round this: 1. convert to full pathname in driver - * manager. 2. applications always pass driver's full - * path name. 3. if driver itself don't support - * SQLGetFunctions(), call it with SQL_ALL_FUNCTIONS - * as flag immidately after SQLConnect(), SQLDriverConnect() - * and SQLBrowseConnect() to force the driver manager - * resolving all will be used symbols. - */ - if( nlist( pobj->path, nl) == -1 ) - return 0; - - if( ! nl[0].n_type && ! nl[0].n_value ) - { - errmsg = "can't locate module entry symbol"; - return 0; - } - - /* Note: On AIX 3.x if the object library is not - * built with -g compiling option, .n_type field - * is always 0. While on 4.x it will be 32. - * On AIX 4.x, if the symbol is a entry point, - * n_value will be 0. However, one thing is for sure - * that if a symbol is not existance in the file, - * both .n_type and .n_value would be 0. - */ - - if( ! nl[1].n_type && ! nl[1].n_value ) - { - errmsg = "symbol not existance in this module"; - return 0; - } - - ent = slot_alloc(sym); - - if( ! ent ) - return 0; - - /* catch it with a slot in the hashing table */ - insert(pobj->htab, ent); - - memcpy(ent->fdesc, pobj->pentry, sizeof(ent->fdesc)); - - /* now ent->fdesc[0] is the virtual address of entry point - * and ent->fdesc[1] is the TOC of the module - */ - - /* let's calculate the virtual address of the symbol - * by adding a relative offset getting from the module - * file symbol table, i.e - * - * functin virtual address = entry point virtual address + - * + ( function offset in file - entry point offset in file ) - */ - - (ent->fdesc)[0] = (ent->fdesc)[0] + - ( nl[1].n_value - nl[0].n_value ); - - /* return the function descriptor */ - return ent->fdesc; + nlist_t nl[3]; + obj_t* pobj = (obj_t*)hdl; + slot_t* ent; + int (*fp)(); + long lbuf[3]; + + if( !hdl || !(pobj->htab) || !sym || ! *sym ) + { + errno = EINVAL; + return 0; + } + + errno = 0; + errmsg = 0; + + ent = search( pobj->htab, sym ); + + if( ent ) + return ent->fdesc; + +#define n_name _n._n_name + + nl[0].n_name = ENTRY_SYM; + nl[1].n_name = sym; + nl[2].n_name = 0; + + /* There is a potential problem here. If application + * did not pass a full path name, and changed the + * working directory after the load(), then nlist() + * will be unable to open the original shared library + * file to resolve the symbols. there are 3 ways to working + * round this: 1. convert to full pathname in driver + * manager. 2. applications always pass driver's full + * path name. 3. if driver itself don't support + * SQLGetFunctions(), call it with SQL_ALL_FUNCTIONS + * as flag immidately after SQLConnect(), SQLDriverConnect() + * and SQLBrowseConnect() to force the driver manager + * resolving all will be used symbols. + */ + if( nlist( pobj->path, nl) == -1 ) + return 0; + + if( ! nl[0].n_type && ! nl[0].n_value ) + { + errmsg = "can't locate module entry symbol"; + return 0; + } + + /* Note: On AIX 3.x if the object library is not + * built with -g compiling option, .n_type field + * is always 0. While on 4.x it will be 32. + * On AIX 4.x, if the symbol is a entry point, + * n_value will be 0. However, one thing is for sure + * that if a symbol is not existance in the file, + * both .n_type and .n_value would be 0. + */ + + if( ! nl[1].n_type && ! nl[1].n_value ) + { + errmsg = "symbol not existance in this module"; + return 0; + } + + ent = slot_alloc(sym); + + if( ! ent ) + return 0; + + /* catch it with a slot in the hashing table */ + insert(pobj->htab, ent); + + memcpy(ent->fdesc, pobj->pentry, sizeof(ent->fdesc)); + + /* now ent->fdesc[0] is the virtual address of entry point + * and ent->fdesc[1] is the TOC of the module + */ + + /* let's calculate the virtual address of the symbol + * by adding a relative offset getting from the module + * file symbol table, i.e + * + * functin virtual address = entry point virtual address + + * + ( function offset in file - entry point offset in file ) + */ + + (ent->fdesc)[0] = (ent->fdesc)[0] + + ( nl[1].n_value - nl[0].n_value ); + + /* return the function descriptor */ + return ent->fdesc; } -#endif /* end of IBM AIX Section */ +#endif /* end of IBM AIX Section */ -/********************************* +/********************************* * - * Windows 3.x, 95, NT + * Windows 3.x, 95, NT * *********************************/ -#ifdef DLDAPI_WINDOWS -# define DLDAPI_DEFINED -# include +#ifdef DLDAPI_WINDOWS +# define DLDAPI_DEFINED +# include -void FAR* dlopen(char FAR* dll, int mode) +void FAR* dlopen(char FAR* dll, int mode) { - HINSTANCE hint; + HINSTANCE hint; - if( dll == NULL ) - { - return GetWindowWord( NULL, GWW_HINSTANCE ); - } + if( dll == NULL ) + { + return GetWindowWord( NULL, GWW_HINSTANCE ); + } - hint = LoadLibrary(dll); + hint = LoadLibrary(dll); - if( hint < HINSTANCE_ERROR ) - { - return NULL; - } + if( hint < HINSTANCE_ERROR ) + { + return NULL; + } - return (void FAR*)hint; + return (void FAR*)hint; } -void FAR* dlsym( void FAR* hdll, char FAR* sym ) +void FAR* dlsym( void FAR* hdll, char FAR* sym ) { - return (void FAR*)GetProcAddress(hdll, sym); + return (void FAR*)GetProcAddress(hdll, sym); } -char FAR* dlerror() +char FAR* dlerror() { - return 0L; /* unimplemented yet */ + return 0L; /* unimplemented yet */ } -int dlclose(void FAR* hdll) +int dlclose(void FAR* hdll) { - FreeLibrary((HINSTANCE)hdll); + FreeLibrary((HINSTANCE)hdll); } -#endif /* end of Windows family */ +#endif /* end of Windows family */ -/*********************************** +/********************************* * - * other platforms + * OS/2 2.x, 3.x * - ***********************************/ + *********************************/ #ifdef DLDAPI_OS2 -# define DLDAPI_DEFINED +# define DLDAPI_DEFINED /* - * DosLoadModule(), DosQueryProcAddress(), DosFreeModule(), ... + * DosLoadModule(), DosQueryProcAddress(), DosFreeModule(), ... */ + +void FAR* dlopen(char FAR* dll, int mode) +{ + APIRET rc = NO_ERROR; /* API return code */ + UCHAR LoadError[256] = ""; /* Area for Load fail. info */ + HMODULE ModuleHandle = NULLHANDLE; /* Module handle */ + + if( dll == NULL || '\0' == *dll ) + { + return NULL; + } + + rc = NO_ERROR; + rc = DosLoadModule( LoadError, /* Failure info buffer */ + sizeof(LoadError), /* Size of buffer */ + dll, /* Module to load */ + &ModuleHandle ); /* Module handle returned */ + if (rc != NO_ERROR) + { +#ifdef DEBUG + fprintf( stderr, + "[dlf.c] dlopen: DosLoadModule(0x%08lX, %d, \"%s\", 0x%08lX) = %d\n", + &LoadError, sizeof(LoadError), dll, &ModuleHandle, rc + ); + fprintf( stderr, + " ---> missing module '%s'\n", + LoadError ); #endif + return NULL; + } -#ifdef DLDAPI_MAC -# define DLDAPI_DEFINED + return (void FAR*) ModuleHandle; + +} + +void FAR* dlsym( void FAR* hdll, char FAR* sym ) +{ + APIRET rc = NO_ERROR; /* API return code */ + PFN ModuleAddress = NULL; /* Module address */ + + rc = DosQueryProcAddr( (HMODULE) hdll, 0, sym, &ModuleAddress ); + + return (void FAR*) (NO_ERROR == rc) ? ModuleAddress + : NULL; +} + +char FAR* dlerror() +{ + return 0L; /* unimplemented yet */ +} + +int dlclose(void FAR* hdll) +{ + return DosFreeModule( (HMODULE) hdll ); +} + +#endif + +/*********************************** + * + * other platforms + * + ***********************************/ +#ifdef DLDAPI_MAC +# define DLDAPI_DEFINED #endif #ifdef DLDAPI_NEXT -# define DLDAPI_DEFINED +# define DLDAPI_DEFINED #endif #ifndef DLDAPI_DEFINED -# error "dynamic load editor undefined" +# error "dynamic load editor undefined" #endif diff --git a/src/iodbc/dlf.h b/src/iodbc/dlf.h index 185b478c07..2d04cf39b2 100644 --- a/src/iodbc/dlf.h +++ b/src/iodbc/dlf.h @@ -1,35 +1,24 @@ -#ifndef _DLF_H +#ifndef _DLF_H # define _DLF_H #define DLDAPI_SVR4_DLFCN -#ifdef __HPUX__ -#define DLDAPI_HP_SHL -#endif - -#ifdef __AIX__ -#define DLDAPI_AIX_LOAD -#endif - -# include <../iodbc/config.h> -# include <../iodbc/windows.h> - # ifdef DLDAPI_SVR4_DLFCN -# include +# include # else - extern void FAR* dlopen(char FAR* path, int mode); - extern void FAR* dlsym(void FAR* hdll, char FAR* sym); - extern char FAR* dlerror(); - extern int dlclose(void FAR* hdll); + extern void FAR* dlopen(char FAR* path, int mode); + extern void FAR* dlsym(void FAR* hdll, char FAR* sym); + extern char FAR* dlerror(); + extern int dlclose(void FAR* hdll); # endif -# ifndef RTLD_LAZY -# define RTLD_LAZY 1 +# ifndef RTLD_LAZY +# define RTLD_LAZY 1 # endif -# define DLL_OPEN(dll) (void*)dlopen((char*)(path), RTLD_LAZY) -# define DLL_PROC(hdll, sym) (void*)dlsym((void*)(hdll), (char*)sym) -# define DLL_ERROR() (char*)dlerror() -# define DLL_CLOSE(hdll) dlclose((void*)(hdll)) +# define DLL_OPEN(dll) (void*)dlopen((char*)(path), RTLD_LAZY) +# define DLL_PROC(hdll, sym) (void*)dlsym((void*)(hdll), (char*)sym) +# define DLL_ERROR() (char*)dlerror() +# define DLL_CLOSE(hdll) dlclose((void*)(hdll)) #endif diff --git a/src/iodbc/dlproc.c b/src/iodbc/dlproc.c index db23fa2562..24f1bfda9c 100644 --- a/src/iodbc/dlproc.c +++ b/src/iodbc/dlproc.c @@ -1,6 +1,6 @@ -/** Load driver and resolve driver's function entry point - - Copyright (C) 1995 by Ke Jin +/** Load driver and resolve driver's function entry point + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,6 +13,7 @@ GNU General Public License for more details. **/ + #include <../iodbc/iodbc.h> #include <../iodbc/isql.h> @@ -28,72 +29,72 @@ #include "../iodbc/henv.ci" -HPROC _iodbcdm_getproc( HDBC hdbc, int idx ) +HPROC _iodbcdm_getproc( HDBC hdbc, int idx ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - ENV_t FAR* penv; -/* HDLL hdll; */ - HPROC FAR* phproc; - - if( idx <= 0 || idx > SQL_EXT_API_LAST ) - /* first entry naver used */ - { - return SQL_NULL_HPROC; - } - - penv = (ENV_t FAR*)(pdbc->henv); - - if( penv == NULL ) - { - return SQL_NULL_HPROC; - } - - phproc = penv->dllproc_tab + idx; - - if( *phproc == SQL_NULL_HPROC ) - { - int i, en_idx; - - for( i=0 ; ; i++ ) - { - en_idx = odbcapi_symtab[i].en_idx; - - if( en_idx == en_NullProc ) - { - break; - } - - if( en_idx == idx ) - { - *phproc = _iodbcdm_dllproc( penv->hdll, - odbcapi_symtab[i].symbol ); - - break; - } - } - } - - return *phproc; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + ENV_t FAR* penv; + HDLL hdll; + static HPROC FAR* phproc; + + if( idx <= 0 || idx > SQL_EXT_API_LAST ) + /* first entry never used */ + { + return SQL_NULL_HPROC; + } + + penv = (ENV_t FAR*)(pdbc->henv); + + if( penv == NULL ) + { + return SQL_NULL_HPROC; + } + + phproc = penv->dllproc_tab + idx; + + if( *phproc == SQL_NULL_HPROC ) + { + int i, en_idx; + + for( i=0 ; ; i++ ) + { + en_idx = odbcapi_symtab[i].en_idx; + + if( en_idx == en_NullProc ) + { + break; + } + + if( en_idx == idx ) + { + *phproc = _iodbcdm_dllproc( penv->hdll, + odbcapi_symtab[i].symbol ); + + break; + } + } + } + + return *phproc; } -HDLL _iodbcdm_dllopen( char FAR* path ) +HDLL _iodbcdm_dllopen( char FAR* path ) { - return (HDLL)DLL_OPEN( path ); + return (HDLL)DLL_OPEN( path ); } -HPROC _iodbcdm_dllproc( HDLL hdll, char FAR* sym ) +HPROC _iodbcdm_dllproc( HDLL hdll, char FAR* sym ) { - return (HPROC)DLL_PROC( hdll, sym ); + return (HPROC)DLL_PROC( hdll, sym ); } -int _iodbcdm_dllclose( HDLL hdll ) +int _iodbcdm_dllclose( HDLL hdll ) { - DLL_CLOSE( hdll ); + DLL_CLOSE( hdll ); - return 0; + return 0; } -char* _iodbcdm_dllerror( ) +char* _iodbcdm_dllerror( ) { - return DLL_ERROR(); + return DLL_ERROR(); } diff --git a/src/iodbc/dlproc.h b/src/iodbc/dlproc.h index 127b0d4c64..b757369a8b 100644 --- a/src/iodbc/dlproc.h +++ b/src/iodbc/dlproc.h @@ -1,31 +1,39 @@ -#ifndef _DLPROC_H -# define _DLPROC_H +#ifndef _DLPROC_H +# define _DLPROC_H -# include <../iodbc/dlf.h> +# include <../iodbc/dlf.h> - typedef RETCODE (FAR* HPROC)(); +# ifdef OS2 + typedef RETCODE (FAR* _System HPROC)(); +# else + typedef RETCODE (FAR* HPROC)(); +# endif -# ifdef DLDAPI_SVR4_DLFCN -# include - typedef void* HDLL; +# ifdef DLDAPI_SVR4_DLFCN +# include + typedef void* HDLL; # endif # ifdef DLDAPI_HP_SHL -# include - typedef shl_t HDLL; +# include + typedef shl_t HDLL; +# endif + +# ifdef DLDAPI_AIX_LOAD + typedef void* HDLL; # endif -# ifdef DLDAPI_AIX_LOAD - typedef void* HDLL; +# ifdef DLDAPI_OS2 + typedef HMODULE HDLL; # endif -extern HPROC _iodbcdm_getproc(); -extern HDLL _iodbcdm_dllopen(char FAR* dll); -extern HPROC _iodbcdm_dllproc(HDLL hdll, char FAR* sym); -extern char FAR* _iodbcdm_dllerror(); -extern int _iodbcdm_dllclose(HDLL hdll); +extern HPROC _iodbcdm_getproc(); +extern HDLL _iodbcdm_dllopen(char FAR* dll); +extern HPROC _iodbcdm_dllproc(HDLL hdll, char FAR* sym); +extern char FAR* _iodbcdm_dllerror(); +extern int _iodbcdm_dllclose(HDLL hdll); -#define SQL_NULL_HDLL ((HDLL)NULL) -#define SQL_NULL_HPROC ((HPROC)NULL) +#define SQL_NULL_HDLL ((HDLL)NULL) +#define SQL_NULL_HPROC ((HPROC)NULL) #endif diff --git a/src/iodbc/execute.c b/src/iodbc/execute.c index eb2633a6ed..bdb8f7dcd8 100644 --- a/src/iodbc/execute.c +++ b/src/iodbc/execute.c @@ -1,6 +1,6 @@ -/** Invoke a query - - Copyright (C) 1995 by Ke Jin +/** Invoke a query + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,763 +27,763 @@ #include <../iodbc/itrace.h> -static void do_cursoropen(STMT_t FAR* pstmt) +static void do_cursoropen(STMT_t FAR* pstmt) { - RETCODE retcode; - SWORD ncol; - - pstmt->state = en_stmt_executed; - - retcode = SQLNumResultCols( pstmt, &ncol ); - - if( retcode == SQL_SUCCESS - || retcode == SQL_SUCCESS_WITH_INFO ) - { - if( ncol ) - { - pstmt->state = en_stmt_cursoropen; - pstmt->cursor_state = en_stmt_cursor_opened; - } - else - { - pstmt->state = en_stmt_executed; - pstmt->cursor_state = en_stmt_cursor_no; - } - } + RETCODE retcode; + SWORD ncol; + + pstmt->state = en_stmt_executed; + + retcode = SQLNumResultCols( pstmt, &ncol ); + + if( retcode == SQL_SUCCESS + || retcode == SQL_SUCCESS_WITH_INFO ) + { + if( ncol ) + { + pstmt->state = en_stmt_cursoropen; + pstmt->cursor_state = en_stmt_cursor_opened; + } + else + { + pstmt->state = en_stmt_executed; + pstmt->cursor_state = en_stmt_cursor_no; + } + } } -RETCODE SQL_API SQLExecute ( HSTMT hstmt ) +RETCODE SQL_API SQLExecute ( HSTMT hstmt ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - sqlstat = en_S1010; - break; - - case en_stmt_executed: - if( ! pstmt->prep_state ) - { - sqlstat = en_S1010; - } - break; - - case en_stmt_cursoropen: - if( ! pstmt->prep_state ) - { - sqlstat = en_S1010; - } - break; - - case en_stmt_fetched: - case en_stmt_xfetched: - if( ! pstmt->prep_state ) - { - sqlstat = en_S1010; - } - else - { - sqlstat = en_24000; - } - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != en_Execute ) - { - sqlstat = en_S1010; - } - - if( sqlstat == en_00000 ) - { - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Execute ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, - en_Execute, ( pstmt->dhstmt ) ) - + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + sqlstat = en_S1010; + break; + + case en_stmt_executed: + if( ! pstmt->prep_state ) + { + sqlstat = en_S1010; + } + break; + + case en_stmt_cursoropen: + if( ! pstmt->prep_state ) + { + sqlstat = en_S1010; + } + break; + + case en_stmt_fetched: + case en_stmt_xfetched: + if( ! pstmt->prep_state ) + { + sqlstat = en_S1010; + } + else + { + sqlstat = en_24000; + } + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != en_Execute ) + { + sqlstat = en_S1010; + } + + if( sqlstat == en_00000 ) + { + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Execute ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, + en_Execute, ( pstmt->dhstmt ) ) + #if 0 - retcode = hproc ( pstmt->dhstmt ); + retcode = hproc ( pstmt->dhstmt ); #endif - /* stmt state transition */ - if( pstmt->asyn_on == en_Execute ) - { - switch ( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NEED_DATA: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_prepared: - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - do_cursoropen(hstmt); - break; - - case SQL_NEED_DATA: - pstmt->state = en_stmt_needdata; - pstmt->need_on = en_Execute; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_Execute; - break; - - default: - break; - } - break; - - case en_stmt_executed: - switch( retcode ) - { - case SQL_ERROR: - pstmt->state = en_stmt_allocated; - pstmt->cursor_state = en_stmt_cursor_no; - pstmt->prep_state = 0; - break; - - case SQL_NEED_DATA: - pstmt->state = en_stmt_needdata; - pstmt->need_on = en_Execute; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_Execute; - break; - - default: - break; - } - break; - - default: - break; - } - - return retcode; + /* stmt state transition */ + if( pstmt->asyn_on == en_Execute ) + { + switch ( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NEED_DATA: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_prepared: + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + do_cursoropen(hstmt); + break; + + case SQL_NEED_DATA: + pstmt->state = en_stmt_needdata; + pstmt->need_on = en_Execute; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_Execute; + break; + + default: + break; + } + break; + + case en_stmt_executed: + switch( retcode ) + { + case SQL_ERROR: + pstmt->state = en_stmt_allocated; + pstmt->cursor_state = en_stmt_cursor_no; + pstmt->prep_state = 0; + break; + + case SQL_NEED_DATA: + pstmt->state = en_stmt_needdata; + pstmt->need_on = en_Execute; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_Execute; + break; + + default: + break; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLExecDirect ( - HSTMT hstmt, - UCHAR FAR* szSqlStr, - SDWORD cbSqlStr ) +RETCODE SQL_API SQLExecDirect ( + HSTMT hstmt, + UCHAR FAR* szSqlStr, + SDWORD cbSqlStr ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - - int sqlstat = en_00000; - RETCODE retcode = SQL_SUCCESS; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( szSqlStr == NULL ) - { - sqlstat = en_S1009; - } - else if( cbSqlStr < 0 && cbSqlStr != SQL_NTS ) - { - sqlstat = en_S1090; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch ( pstmt->state ) - { - case en_stmt_fetched: - case en_stmt_xfetched: - sqlstat = en_24000; - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != en_ExecDirect ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExecDirect); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExecDirect, ( - pstmt->dhstmt, szSqlStr, cbSqlStr) ) - + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + + int sqlstat = en_00000; + RETCODE retcode = SQL_SUCCESS; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( szSqlStr == NULL ) + { + sqlstat = en_S1009; + } + else if( cbSqlStr < 0 && cbSqlStr != SQL_NTS ) + { + sqlstat = en_S1090; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch ( pstmt->state ) + { + case en_stmt_fetched: + case en_stmt_xfetched: + sqlstat = en_24000; + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != en_ExecDirect ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExecDirect); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExecDirect, ( + pstmt->dhstmt, szSqlStr, cbSqlStr) ) + #if 0 - retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr ); + retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr ); #endif - /* stmt state transition */ - if( pstmt->asyn_on == en_ExecDirect ) - { - switch ( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NEED_DATA: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - if( pstmt->state <= en_stmt_executed ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - do_cursoropen(hstmt); - break; - - case SQL_NEED_DATA: - pstmt->state = en_stmt_needdata; - pstmt->need_on = en_ExecDirect; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_ExecDirect; - break; - - case SQL_ERROR: - pstmt->state = en_stmt_allocated; - pstmt->cursor_state = en_stmt_cursor_no; - pstmt->prep_state = 0; - break; - - default: - break; - } - } - - return retcode; + /* stmt state transition */ + if( pstmt->asyn_on == en_ExecDirect ) + { + switch ( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NEED_DATA: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + if( pstmt->state <= en_stmt_executed ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + do_cursoropen(hstmt); + break; + + case SQL_NEED_DATA: + pstmt->state = en_stmt_needdata; + pstmt->need_on = en_ExecDirect; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_ExecDirect; + break; + + case SQL_ERROR: + pstmt->state = en_stmt_allocated; + pstmt->cursor_state = en_stmt_cursor_no; + pstmt->prep_state = 0; + break; + + default: + break; + } + } + + return retcode; } -RETCODE SQL_API SQLPutData( - HSTMT hstmt, - PTR rgbValue, - SDWORD cbValue ) +RETCODE SQL_API SQLPutData( + HSTMT hstmt, + PTR rgbValue, + SDWORD cbValue ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument value */ - if( rgbValue == NULL - && ( cbValue != SQL_DEFAULT_PARAM - && cbValue != SQL_NULL_DATA ) ) - { - PUSHSQLERR ( pstmt->herr, en_S1009 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - if( pstmt->state <= en_stmt_xfetched ) - { - PUSHSQLERR( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - } - else if( pstmt->asyn_on != en_PutData ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_PutData ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PutData, ( - pstmt->dhstmt, rgbValue, cbValue ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument value */ + if( rgbValue == NULL + && ( cbValue != SQL_DEFAULT_PARAM + && cbValue != SQL_NULL_DATA ) ) + { + PUSHSQLERR ( pstmt->herr, en_S1009 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + if( pstmt->state <= en_stmt_xfetched ) + { + PUSHSQLERR( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + } + else if( pstmt->asyn_on != en_PutData ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_PutData ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_PutData, ( + pstmt->dhstmt, rgbValue, cbValue ) ) #if 0 - retcode = hproc(pstmt->dhstmt, rgbValue, cbValue ); + retcode = hproc(pstmt->dhstmt, rgbValue, cbValue ); #endif - /* state transition */ - if( pstmt->asyn_on == en_PutData ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - /* must in mustput or canput states */ - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - pstmt->state = en_stmt_canput; - break; - - case SQL_ERROR: - switch( pstmt->need_on ) - { - case en_ExecDirect: - pstmt->state = en_stmt_allocated; - pstmt->need_on = en_NullProc; - break; - - case en_Execute: - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - pstmt->need_on = en_NullProc; - } - break; - - case en_SetPos: - /* Is this possible ???? */ - pstmt->state = en_stmt_xfetched; - break; - - default: - break; - } - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_PutData; - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_PutData ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + /* must in mustput or canput states */ + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + pstmt->state = en_stmt_canput; + break; + + case SQL_ERROR: + switch( pstmt->need_on ) + { + case en_ExecDirect: + pstmt->state = en_stmt_allocated; + pstmt->need_on = en_NullProc; + break; + + case en_Execute: + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + pstmt->need_on = en_NullProc; + } + break; + + case en_SetPos: + /* Is this possible ???? */ + pstmt->state = en_stmt_xfetched; + break; + + default: + break; + } + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_PutData; + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLParamData ( - HSTMT hstmt, - PTR FAR* prgbValue ) +RETCODE SQL_API SQLParamData ( + HSTMT hstmt, + PTR FAR* prgbValue ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } - /* check argument */ + /* check argument */ - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - if( pstmt->state <= en_stmt_xfetched ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + if( pstmt->state <= en_stmt_xfetched ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } - } - else if( pstmt->asyn_on != en_ParamData ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + } + } + else if( pstmt->asyn_on != en_ParamData ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ParamData ); + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ParamData ); - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamData, ( - pstmt->dhstmt, prgbValue ) ) + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamData, ( + pstmt->dhstmt, prgbValue ) ) #if 0 - retcode = hproc ( pstmt->dhstmt, prgbValue ); + retcode = hproc ( pstmt->dhstmt, prgbValue ); #endif - /* state transition */ - if( pstmt->asyn_on == en_ParamData ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - if( pstmt->state < en_stmt_needdata ) - { - return retcode; - } - - switch( retcode ) - { - case SQL_ERROR: - switch( pstmt->need_on ) - { - case en_ExecDirect: - pstmt->state = en_stmt_allocated; - break; - - case en_Execute: - pstmt->state = en_stmt_prepared; - break; - - case en_SetPos: - pstmt->state = en_stmt_xfetched; - pstmt->cursor_state - = en_stmt_cursor_xfetched; - break; - - default: - break; - } - pstmt->need_on = en_NullProc; - break; - - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - switch( pstmt->state ) - { - case en_stmt_needdata: - pstmt->state = en_stmt_mustput; - break; - - case en_stmt_canput: - switch( pstmt->need_on ) - { - case en_SetPos: - pstmt->state - = en_stmt_xfetched; - pstmt->cursor_state - = en_stmt_cursor_xfetched; - break; - - case en_ExecDirect: - case en_Execute: - do_cursoropen(hstmt); - break; - - default: - break; - } - break; - - default: - break; - } - pstmt->need_on = en_NullProc; - break; - - case SQL_NEED_DATA: - pstmt->state = en_stmt_mustput; - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_ParamData ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + if( pstmt->state < en_stmt_needdata ) + { + return retcode; + } + + switch( retcode ) + { + case SQL_ERROR: + switch( pstmt->need_on ) + { + case en_ExecDirect: + pstmt->state = en_stmt_allocated; + break; + + case en_Execute: + pstmt->state = en_stmt_prepared; + break; + + case en_SetPos: + pstmt->state = en_stmt_xfetched; + pstmt->cursor_state + = en_stmt_cursor_xfetched; + break; + + default: + break; + } + pstmt->need_on = en_NullProc; + break; + + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + switch( pstmt->state ) + { + case en_stmt_needdata: + pstmt->state = en_stmt_mustput; + break; + + case en_stmt_canput: + switch( pstmt->need_on ) + { + case en_SetPos: + pstmt->state + = en_stmt_xfetched; + pstmt->cursor_state + = en_stmt_cursor_xfetched; + break; + + case en_ExecDirect: + case en_Execute: + do_cursoropen(hstmt); + break; + + default: + break; + } + break; + + default: + break; + } + pstmt->need_on = en_NullProc; + break; + + case SQL_NEED_DATA: + pstmt->state = en_stmt_mustput; + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLNumParams ( - HSTMT hstmt, - SWORD FAR* pcpar ) +RETCODE SQL_API SQLNumParams ( + HSTMT hstmt, + SWORD FAR* pcpar ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - - default: - break; - } - } - else if( pstmt->asyn_on != en_NumParams ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc ( pstmt->hdbc, en_NumParams ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_NumParams, ( - pstmt->dhstmt, pcpar) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + + default: + break; + } + } + else if( pstmt->asyn_on != en_NumParams ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc ( pstmt->hdbc, en_NumParams ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_NumParams, ( + pstmt->dhstmt, pcpar) ) #if 0 - retcode = hproc ( pstmt->dhstmt, pcpar ); + retcode = hproc ( pstmt->dhstmt, pcpar ); #endif - /* state transition */ - if( pstmt->asyn_on == en_NumParams ) - { - switch ( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - break; - - default: - return retcode; - } - } - - if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_NumParams; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_NumParams ) + { + switch ( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + break; + + default: + return retcode; + } + } + + if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_NumParams; + } + + return retcode; } -RETCODE SQL_API SQLDescribeParam ( - HSTMT hstmt, - UWORD ipar, - SWORD FAR* pfSqlType, - UDWORD FAR* pcbColDef, - SWORD FAR* pibScale, - SWORD FAR* pfNullable ) +RETCODE SQL_API SQLDescribeParam ( + HSTMT hstmt, + UWORD ipar, + SWORD FAR* pfSqlType, + UDWORD FAR* pcbColDef, + SWORD FAR* pibScale, + SWORD FAR* pfNullable ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( ipar == 0 ) - { - PUSHSQLERR ( pstmt->herr, en_S1093 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - - default: - break; - } - } - else if( pstmt->asyn_on != en_DescribeParam ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc ( pstmt->hdbc, en_DescribeParam ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeParam, ( - pstmt->dhstmt, - ipar, - pfSqlType, - pcbColDef, - pibScale, - pfNullable ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( ipar == 0 ) + { + PUSHSQLERR ( pstmt->herr, en_S1093 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + + default: + break; + } + } + else if( pstmt->asyn_on != en_DescribeParam ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc ( pstmt->hdbc, en_DescribeParam ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeParam, ( + pstmt->dhstmt, + ipar, + pfSqlType, + pcbColDef, + pibScale, + pfNullable ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - ipar, - pfSqlType, - pcbColDef, - pibScale, - pfNullable ); + retcode = hproc(pstmt->dhstmt, + ipar, + pfSqlType, + pcbColDef, + pibScale, + pfNullable ); #endif - /* state transition */ - if( pstmt->asyn_on == en_DescribeParam ) - { - switch ( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - break; - - default: - return retcode; - } - } - - if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_DescribeParam; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_DescribeParam ) + { + switch ( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + break; + + default: + return retcode; + } + } + + if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_DescribeParam; + } + + return retcode; } diff --git a/src/iodbc/fetch.c b/src/iodbc/fetch.c index 85bd13e59f..d7c8db3e50 100644 --- a/src/iodbc/fetch.c +++ b/src/iodbc/fetch.c @@ -1,6 +1,6 @@ /** Fetch query result - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,663 +13,663 @@ GNU General Public License for more details. **/ -#include <../iodbc/iodbc.h> +#include -#include <../iodbc/isql.h> -#include <../iodbc/isqlext.h> +#include +#include -#include <../iodbc/dlproc.h> +#include -#include <../iodbc/herr.h> -#include <../iodbc/henv.h> -#include <../iodbc/hdbc.h> -#include <../iodbc/hstmt.h> +#include +#include +#include +#include -#include <../iodbc/itrace.h> +#include -RETCODE SQL_API SQLFetch ( HSTMT hstmt ) +RETCODE SQL_API SQLFetch ( HSTMT hstmt ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - case en_stmt_xfetched: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - - default: - break; - } - } - else if( pstmt->asyn_on != en_Fetch ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Fetch ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Fetch, (pstmt->dhstmt) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + case en_stmt_xfetched: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + + default: + break; + } + } + else if( pstmt->asyn_on != en_Fetch ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Fetch ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Fetch, (pstmt->dhstmt) ) #if 0 - retcode = hproc( pstmt->dhstmt ); + retcode = hproc( pstmt->dhstmt ); #endif - /* state transition */ - if( pstmt->asyn_on == en_Fetch ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NO_DATA_FOUND: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_cursoropen: - case en_stmt_fetched: - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - pstmt->state = en_stmt_fetched; - pstmt->cursor_state = en_stmt_cursor_fetched; - break; - - case SQL_NO_DATA_FOUND: - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - } - else - { - - pstmt->state = en_stmt_allocated; - } - pstmt->cursor_state = en_stmt_cursor_no; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_Fetch; - break; - - default: - break; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_Fetch ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NO_DATA_FOUND: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_cursoropen: + case en_stmt_fetched: + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + pstmt->state = en_stmt_fetched; + pstmt->cursor_state = en_stmt_cursor_fetched; + break; + + case SQL_NO_DATA_FOUND: + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + } + else + { + + pstmt->state = en_stmt_allocated; + } + pstmt->cursor_state = en_stmt_cursor_no; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_Fetch; + break; + + default: + break; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLExtendedFetch ( - HSTMT hstmt, - UWORD fFetchType, - SDWORD irow, - UDWORD FAR* pcrow, - UWORD FAR* rgfRowStatus ) +RETCODE SQL_API SQLExtendedFetch ( + HSTMT hstmt, + UWORD fFetchType, + SDWORD irow, + UDWORD FAR* pcrow, + UWORD FAR* rgfRowStatus ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check fetch type */ - if( fFetchType < SQL_FETCH_NEXT - || fFetchType > SQL_FETCH_BOOKMARK ) - { - /* Unlike MS driver manager(i.e. DM), - * we don't check driver's ODBC version - * against SQL_FETCH_RESUME (only 1.0) - * and SQL_FETCH_BOOKMARK (only 2.0). - */ - PUSHSQLERR ( pstmt->herr, en_S1106 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - case en_stmt_fetched: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - - default: - break; - } - } - else if( pstmt->asyn_on != en_ExtendedFetch ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExtendedFetch ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExtendedFetch, ( - pstmt->dhstmt, - fFetchType, - irow, - pcrow, - rgfRowStatus ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check fetch type */ + if( fFetchType < SQL_FETCH_NEXT + || fFetchType > SQL_FETCH_BOOKMARK ) + { + /* Unlike MS driver manager(i.e. DM), + * we don't check driver's ODBC version + * against SQL_FETCH_RESUME (only 1.0) + * and SQL_FETCH_BOOKMARK (only 2.0). + */ + PUSHSQLERR ( pstmt->herr, en_S1106 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + case en_stmt_fetched: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + + default: + break; + } + } + else if( pstmt->asyn_on != en_ExtendedFetch ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ExtendedFetch ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ExtendedFetch, ( + pstmt->dhstmt, + fFetchType, + irow, + pcrow, + rgfRowStatus ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - fFetchType, - irow, - pcrow, - rgfRowStatus ); + retcode = hproc(pstmt->dhstmt, + fFetchType, + irow, + pcrow, + rgfRowStatus ); #endif - /* state transition */ - if( pstmt->asyn_on == en_ExtendedFetch ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NO_DATA_FOUND: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_cursoropen: - case en_stmt_xfetched: - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NO_DATA_FOUND: - pstmt->state = en_stmt_xfetched; - pstmt->cursor_state = en_stmt_cursor_xfetched; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_ExtendedFetch; - break; - - default: - break; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_ExtendedFetch ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NO_DATA_FOUND: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_cursoropen: + case en_stmt_xfetched: + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NO_DATA_FOUND: + pstmt->state = en_stmt_xfetched; + pstmt->cursor_state = en_stmt_cursor_xfetched; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_ExtendedFetch; + break; + + default: + break; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLGetData( - HSTMT hstmt, - UWORD icol, - SWORD fCType, - PTR rgbValue, - SDWORD cbValueMax, - SDWORD FAR* pcbValue ) +RETCODE SQL_API SQLGetData( + HSTMT hstmt, + UWORD icol, + SWORD fCType, + PTR rgbValue, + SDWORD cbValueMax, + SDWORD FAR* pcbValue ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( rgbValue == NULL ) - { - sqlstat = en_S1009; - } - else if( cbValueMax < 0 ) - { - sqlstat = en_S1090; - } - else - { - switch(fCType) - { - case SQL_C_DEFAULT: - case SQL_C_CHAR: - case SQL_C_BINARY: - case SQL_C_BIT: - case SQL_C_TINYINT: - case SQL_C_STINYINT: - case SQL_C_UTINYINT: - case SQL_C_SHORT: - case SQL_C_SSHORT: - case SQL_C_USHORT: - case SQL_C_LONG: - case SQL_C_SLONG: - case SQL_C_ULONG: - case SQL_C_FLOAT: - case SQL_C_DOUBLE: - case SQL_C_DATE: - case SQL_C_TIME: - case SQL_C_TIMESTAMP: - break; - - default: - sqlstat = en_S1003; - break; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - case en_stmt_executed: - case en_stmt_cursoropen: - sqlstat = en_24000; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != en_GetData ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetData ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetData, ( - pstmt->dhstmt, - icol, - fCType, - rgbValue, - cbValueMax, - pcbValue ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( rgbValue == NULL ) + { + sqlstat = en_S1009; + } + else if( cbValueMax < 0 ) + { + sqlstat = en_S1090; + } + else + { + switch(fCType) + { + case SQL_C_DEFAULT: + case SQL_C_CHAR: + case SQL_C_BINARY: + case SQL_C_BIT: + case SQL_C_TINYINT: + case SQL_C_STINYINT: + case SQL_C_UTINYINT: + case SQL_C_SHORT: + case SQL_C_SSHORT: + case SQL_C_USHORT: + case SQL_C_LONG: + case SQL_C_SLONG: + case SQL_C_ULONG: + case SQL_C_FLOAT: + case SQL_C_DOUBLE: + case SQL_C_DATE: + case SQL_C_TIME: + case SQL_C_TIMESTAMP: + break; + + default: + sqlstat = en_S1003; + break; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + case en_stmt_executed: + case en_stmt_cursoropen: + sqlstat = en_24000; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != en_GetData ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetData ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetData, ( + pstmt->dhstmt, + icol, + fCType, + rgbValue, + cbValueMax, + pcbValue ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - icol, - fCType, - rgbValue, - cbValueMax, - pcbValue ); + retcode = hproc(pstmt->dhstmt, + icol, + fCType, + rgbValue, + cbValueMax, + pcbValue ); #endif - /* state transition */ - if( pstmt->asyn_on == en_GetData ) - { - switch ( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NO_DATA_FOUND: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_fetched: - case en_stmt_xfetched: - if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_GetData; - break; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_GetData ) + { + switch ( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NO_DATA_FOUND: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_fetched: + case en_stmt_xfetched: + if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_GetData; + break; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLMoreResults( HSTMT hstmt ) +RETCODE SQL_API SQLMoreResults( HSTMT hstmt ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - return SQL_NO_DATA_FOUND; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - - default: - break; - } - } - else if( pstmt->asyn_on != en_MoreResults ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_MoreResults ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_MoreResults, (pstmt->dhstmt) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + return SQL_NO_DATA_FOUND; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + + default: + break; + } + } + else if( pstmt->asyn_on != en_MoreResults ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_MoreResults ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_MoreResults, (pstmt->dhstmt) ) #if 0 - retcode = hproc( pstmt->dhstmt ); + retcode = hproc( pstmt->dhstmt ); #endif - /* state transition */ - if( pstmt->asyn_on == en_MoreResults ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NO_DATA_FOUND: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - /* driver should return SQL_NO_DATA_FOUND */ - break; - - case en_stmt_executed: - if( retcode == SQL_NO_DATA_FOUND ) - { - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - } - else - { - pstmt->state = en_stmt_allocated; - } - } - else if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_MoreResults; - } - break; - - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( retcode == SQL_SUCCESS ) - { - break; - } - else if( retcode == SQL_NO_DATA_FOUND ) - { - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - } - else - { - pstmt->state = en_stmt_allocated; - } - } - else if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_MoreResults; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_MoreResults ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NO_DATA_FOUND: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + /* driver should return SQL_NO_DATA_FOUND */ + break; + + case en_stmt_executed: + if( retcode == SQL_NO_DATA_FOUND ) + { + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + } + else + { + pstmt->state = en_stmt_allocated; + } + } + else if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_MoreResults; + } + break; + + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( retcode == SQL_SUCCESS ) + { + break; + } + else if( retcode == SQL_NO_DATA_FOUND ) + { + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + } + else + { + pstmt->state = en_stmt_allocated; + } + } + else if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_MoreResults; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLSetPos ( - HSTMT hstmt, - UWORD irow, - UWORD fOption, - UWORD fLock ) +RETCODE SQL_API SQLSetPos ( + HSTMT hstmt, + UWORD irow, + UWORD fOption, + UWORD fLock ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument value */ - if( fOption > SQL_ADD - || fLock > SQL_LOCK_UNLOCK ) - { - PUSHSQLERR ( pstmt->herr, en_S1009 ); - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - case en_stmt_fetched: - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - case en_stmt_executed: - case en_stmt_cursoropen: - sqlstat = en_24000; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != en_SetPos ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetPos ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetPos, ( - pstmt->dhstmt, - irow, - fOption, - fLock ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument value */ + if( fOption > SQL_ADD + || fLock > SQL_LOCK_UNLOCK ) + { + PUSHSQLERR ( pstmt->herr, en_S1009 ); + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + case en_stmt_fetched: + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + case en_stmt_executed: + case en_stmt_cursoropen: + sqlstat = en_24000; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != en_SetPos ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetPos ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetPos, ( + pstmt->dhstmt, + irow, + fOption, + fLock ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - irow, - fOption, - fLock ); + retcode = hproc(pstmt->dhstmt, + irow, + fOption, + fLock ); #endif - /* state transition */ - if( pstmt->asyn_on == en_SetPos ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_NEED_DATA: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - /* now, the only possible init state is 'xfetched' */ - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - break; - - case SQL_NEED_DATA: - pstmt->state = en_stmt_needdata; - pstmt->need_on = en_SetPos; - break; - - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_SetPos; - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_SetPos ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_NEED_DATA: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + /* now, the only possible init state is 'xfetched' */ + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + break; + + case SQL_NEED_DATA: + pstmt->state = en_stmt_needdata; + pstmt->need_on = en_SetPos; + break; + + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_SetPos; + break; + + default: + break; + } + + return retcode; } diff --git a/src/iodbc/hdbc.c b/src/iodbc/hdbc.c index 7157480dd1..1d47da84f5 100644 --- a/src/iodbc/hdbc.c +++ b/src/iodbc/hdbc.c @@ -1,6 +1,6 @@ /** data source connect object management functions - Copyright (C) 1995 by Ke Jin + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,777 +30,777 @@ extern RETCODE _iodbcdm_driverunload(); -RETCODE SQL_API SQLAllocConnect( - HENV henv, - HDBC FAR* phdbc ) +RETCODE SQL_API SQLAllocConnect( + HENV henv, + HDBC FAR* phdbc ) { - GENV_t FAR* genv = (GENV_t FAR*)henv; - DBC_t FAR* pdbc; + GENV_t FAR* genv = (GENV_t FAR*)henv; + DBC_t FAR* pdbc; #if (ODBCVER >= 0x0300) - if( henv == SQL_NULL_HENV - || genv->type != SQL_HANDLE_ENV ) + if( henv == SQL_NULL_HENV + || genv->type != SQL_HANDLE_ENV ) #else - if( henv == SQL_NULL_HENV ) + if( henv == SQL_NULL_HENV ) #endif - { - return SQL_INVALID_HANDLE; - } + { + return SQL_INVALID_HANDLE; + } - if( phdbc == NULL ) - { - PUSHSQLERR ( genv->herr, en_S1009 ); + if( phdbc == NULL ) + { + PUSHSQLERR ( genv->herr, en_S1009 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - pdbc = (DBC_t FAR*)MEM_ALLOC (sizeof(DBC_t)); + pdbc = (DBC_t FAR*)MEM_ALLOC (sizeof(DBC_t)); - if( pdbc == NULL ) - { - *phdbc = SQL_NULL_HDBC; + if( pdbc == NULL ) + { + *phdbc = SQL_NULL_HDBC; - PUSHSQLERR ( genv->herr, en_S1001 ); + PUSHSQLERR ( genv->herr, en_S1001 ); - return SQL_ERROR; - } + return SQL_ERROR; + } #if (ODBCVER >= 0x0300) - pdbc->type = SQL_HANDLE_DBC; + pdbc->type = SQL_HANDLE_DBC; #endif - /* insert this dbc entry into the link list */ - pdbc->next = genv->hdbc; - genv->hdbc = pdbc; - pdbc->genv = henv; - - pdbc->henv = SQL_NULL_HENV; - pdbc->hstmt= SQL_NULL_HSTMT; - pdbc->herr = SQL_NULL_HERR; - pdbc->dhdbc= SQL_NULL_HDBC; - pdbc->state= en_dbc_allocated; - pdbc->trace = 0; - pdbc->tstm = NULL; - pdbc->tfile = NULL; - - /* set connect options to default values */ - pdbc->access_mode = SQL_MODE_DEFAULT; - pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; - pdbc->current_qualifier = NULL; - pdbc->login_timeout = 0UL; - pdbc->odbc_cursors = SQL_CUR_DEFAULT; - pdbc->packet_size = 0UL; - pdbc->quiet_mode = (UDWORD)NULL; - pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; - pdbc->cb_commit = (SWORD)SQL_CB_DELETE; - pdbc->cb_rollback = (SWORD)SQL_CB_DELETE; - - *phdbc = (HDBC)pdbc; - - return SQL_SUCCESS; + /* insert this dbc entry into the link list */ + pdbc->next = genv->hdbc; + genv->hdbc = pdbc; + pdbc->genv = henv; + + pdbc->henv = SQL_NULL_HENV; + pdbc->hstmt= SQL_NULL_HSTMT; + pdbc->herr = SQL_NULL_HERR; + pdbc->dhdbc= SQL_NULL_HDBC; + pdbc->state= en_dbc_allocated; + pdbc->trace = 0; + pdbc->tstm = NULL; + pdbc->tfile = NULL; + + /* set connect options to default values */ + pdbc->access_mode = SQL_MODE_DEFAULT; + pdbc->autocommit = SQL_AUTOCOMMIT_DEFAULT; + pdbc->current_qualifier = NULL; + pdbc->login_timeout = 0UL; + pdbc->odbc_cursors = SQL_CUR_DEFAULT; + pdbc->packet_size = 0UL; + pdbc->quiet_mode = (UDWORD)NULL; + pdbc->txn_isolation = SQL_TXN_READ_UNCOMMITTED; + pdbc->cb_commit = (SWORD)SQL_CB_DELETE; + pdbc->cb_rollback = (SWORD)SQL_CB_DELETE; + + *phdbc = (HDBC)pdbc; + + return SQL_SUCCESS; } -RETCODE SQL_API SQLFreeConnect( HDBC hdbc ) +RETCODE SQL_API SQLFreeConnect( HDBC hdbc ) { - GENV_t FAR* genv; - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - DBC_t FAR* tpdbc; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pdbc->state != en_dbc_allocated ) - { - PUSHSQLERR ( pdbc->herr, en_S1010 ); - - return SQL_ERROR; - } - - genv = (GENV_t FAR*)pdbc->genv; - - for( tpdbc = (DBC_t FAR*)genv->hdbc; - tpdbc != NULL; - tpdbc = tpdbc->next ) - { - if( pdbc == tpdbc ) - { - genv->hdbc = pdbc->next; - break; - } - - if( pdbc == tpdbc->next ) - { - tpdbc->next = pdbc->next; - break; - } - } - - /* free this dbc */ - _iodbcdm_driverunload(pdbc); - _iodbcdm_freesqlerrlist( pdbc->herr ); - - if( pdbc->tfile ) - { - MEM_FREE( pdbc->tfile ); - } - - SQLSetConnectOption( pdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF); - - MEM_FREE ( pdbc ); - - return SQL_SUCCESS; + GENV_t FAR* genv; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + DBC_t FAR* tpdbc; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pdbc->state != en_dbc_allocated ) + { + PUSHSQLERR ( pdbc->herr, en_S1010 ); + + return SQL_ERROR; + } + + genv = (GENV_t FAR*)pdbc->genv; + + for( tpdbc = (DBC_t FAR*)genv->hdbc; + tpdbc != NULL; + tpdbc = tpdbc->next ) + { + if( pdbc == tpdbc ) + { + genv->hdbc = pdbc->next; + break; + } + + if( pdbc == tpdbc->next ) + { + tpdbc->next = pdbc->next; + break; + } + } + + /* free this dbc */ + _iodbcdm_driverunload(pdbc); + _iodbcdm_freesqlerrlist( pdbc->herr ); + + if( pdbc->tfile ) + { + MEM_FREE( pdbc->tfile ); + } + + SQLSetConnectOption( pdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF); + + MEM_FREE ( pdbc ); + + return SQL_SUCCESS; } -RETCODE SQL_API SQLSetConnectOption( - HDBC hdbc, - UWORD fOption, - UDWORD vParam ) +RETCODE SQL_API SQLSetConnectOption( + HDBC hdbc, + UWORD fOption, + UDWORD vParam ) { -/* GENV_t FAR* genv; */ - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - STMT_t FAR* pstmt; - HPROC hproc = SQL_NULL_HPROC; - int sqlstat = en_00000; - RETCODE retcode = SQL_SUCCESS; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check option */ - if( fOption < SQL_CONN_OPT_MIN - || ( fOption > SQL_CONN_OPT_MAX - && fOption < SQL_CONNECT_OPT_DRVR_START ) ) - { - PUSHSQLERR ( pdbc->herr, en_S1092 ); - - return SQL_ERROR; - } - - /* check state of connection handle */ - switch( pdbc->state ) - { - case en_dbc_allocated: - if( fOption == SQL_TRANSLATE_DLL - || fOption == SQL_TRANSLATE_OPTION ) - { - /* This two options are only meaningful - * for specified driver. So, has to be - * set after a dirver has been loaded. - */ - sqlstat = en_08003; - break; - } - - if( fOption >= SQL_CONNECT_OPT_DRVR_START - && pdbc->henv == SQL_NULL_HENV ) - /* An option only meaningful for drivers - * is passed before loading a driver. - * We classify this as an invalid option error. - * This is not documented by MS SDK guide. - */ - { - sqlstat = en_S1092; - break; - } - break; - - case en_dbc_needdata: - sqlstat = en_S1010; - break; - - case en_dbc_connected: - case en_dbc_hstmt: - if( fOption == SQL_ODBC_CURSORS ) - { - sqlstat = en_08002; - } - break; - - default: - break; - } - - /* check state of statement handle(s) */ - for( pstmt = (STMT_t FAR*)pdbc->hstmt; - pstmt != NULL && sqlstat == en_00000; - pstmt = (STMT_t FAR*)pstmt->next ) - { - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - sqlstat = en_S1010; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pdbc->herr, sqlstat ); - - return SQL_ERROR; - } - - if( fOption == SQL_OPT_TRACE ) - /* tracing flag can be set before and after connect - * and only meaningful for driver manager(actually - * there is only one tracing file under one global - * environment). - */ - { - switch( vParam ) - { - case SQL_OPT_TRACE_ON: - if( pdbc->tfile == NULL ) - { - pdbc->tfile = (char FAR*)MEM_ALLOC( 1 + - STRLEN(SQL_OPT_TRACE_FILE_DEFAULT) ); - - if( pdbc->tfile == NULL ) - { - PUSHSQLERR( pdbc->herr, en_S1001 ); - - return SQL_ERROR; - } - - STRCPY( pdbc->tfile, SQL_OPT_TRACE_FILE_DEFAULT ); - } - - if( pdbc->tstm == NULL ) - { -#if defined(stderr) && defined(stdout) - if(STREQ( pdbc->tfile, "stderr")) - { - pdbc->tstm = stderr; - } - else - if(STREQ(pdbc->tfile, "stdout")) - { - pdbc->tstm = stdout; - } - else -#endif - { - pdbc->tstm - = fopen(pdbc->tfile, "a+"); - } - - if(pdbc->tstm ) - { - pdbc->trace = 1; - } - else - { - pdbc->trace = 0; - - sqlstat = en_IM013; - retcode = SQL_ERROR; - } - } - break; - - case SQL_OPT_TRACE_OFF: - if( pdbc->trace && pdbc->tstm ) - { -#if defined(stderr) && defined(stdout) - if( stderr != (FILE FAR*)(pdbc->tstm) - && stdout != (FILE FAR*)(pdbc->tstm) ) + GENV_t FAR* genv; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + STMT_t FAR* pstmt; + HPROC hproc = SQL_NULL_HPROC; + int sqlstat = en_00000; + RETCODE retcode = SQL_SUCCESS; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check option */ + if( fOption < SQL_CONN_OPT_MIN + || ( fOption > SQL_CONN_OPT_MAX + && fOption < SQL_CONNECT_OPT_DRVR_START ) ) + { + PUSHSQLERR ( pdbc->herr, en_S1092 ); + + return SQL_ERROR; + } + + /* check state of connection handle */ + switch( pdbc->state ) + { + case en_dbc_allocated: + if( fOption == SQL_TRANSLATE_DLL + || fOption == SQL_TRANSLATE_OPTION ) + { + /* This two options are only meaningful + * for specified driver. So, has to be + * set after a dirver has been loaded. + */ + sqlstat = en_08003; + break; + } + + if( fOption >= SQL_CONNECT_OPT_DRVR_START + && pdbc->henv == SQL_NULL_HENV ) + /* An option only meaningful for drivers + * is passed before loading a driver. + * We classify this as an invalid option error. + * This is not documented by MS SDK guide. + */ + { + sqlstat = en_S1092; + break; + } + break; + + case en_dbc_needdata: + sqlstat = en_S1010; + break; + + case en_dbc_connected: + case en_dbc_hstmt: + if( fOption == SQL_ODBC_CURSORS ) + { + sqlstat = en_08002; + } + break; + + default: + break; + } + + /* check state of statement handle(s) */ + for( pstmt = (STMT_t FAR*)pdbc->hstmt; + pstmt != NULL && sqlstat == en_00000; + pstmt = (STMT_t FAR*)pstmt->next ) + { + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + sqlstat = en_S1010; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pdbc->herr, sqlstat ); + + return SQL_ERROR; + } + + if( fOption == SQL_OPT_TRACE ) + /* tracing flag can be set before and after connect + * and only meaningful for driver manager(actually + * there is only one tracing file under one global + * environment). + */ + { + switch( vParam ) + { + case SQL_OPT_TRACE_ON: + if( pdbc->tfile == NULL ) + { + pdbc->tfile = (char FAR*)MEM_ALLOC( 1 + + STRLEN(SQL_OPT_TRACE_FILE_DEFAULT) ); + + if( pdbc->tfile == NULL ) + { + PUSHSQLERR( pdbc->herr, en_S1001 ); + + return SQL_ERROR; + } + + STRCPY( pdbc->tfile, SQL_OPT_TRACE_FILE_DEFAULT ); + } + + if( pdbc->tstm == NULL ) + { +#if defined(stderr) && defined(stdout) + if(STREQ( pdbc->tfile, "stderr")) + { + pdbc->tstm = stderr; + } + else + if(STREQ(pdbc->tfile, "stdout")) + { + pdbc->tstm = stdout; + } + else #endif - { - fclose(pdbc->tstm); - } - } - pdbc->tstm = NULL; - pdbc->trace = 0; - break; - - default: - PUSHSQLERR (pdbc->herr, en_S1009); - retcode = SQL_ERROR; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pdbc->herr, sqlstat ); - } - - return retcode; - } - - if( fOption == SQL_OPT_TRACEFILE ) - /* Tracing file can be set before and after connect - * and only meaningful for driver manager. - */ - { - if( vParam == 0UL - || ((char FAR*)vParam)[0] == 0 ) - { - PUSHSQLERR ( pdbc->herr, en_S1009 ); - - return SQL_ERROR; - } - - if( pdbc->tfile && STREQ (pdbc->tfile, vParam) ) - { - return SQL_SUCCESS; - } - - if( pdbc->trace ) - { - PUSHSQLERR ( pdbc->herr, en_IM014 ); - - return SQL_ERROR; - } - - if( pdbc->tfile ) - { - MEM_FREE( pdbc->tfile ); - } - - pdbc->tfile = (char FAR*)MEM_ALLOC( 1 + STRLEN( vParam ) ); - - if( pdbc->tfile == NULL ) - { - PUSHSQLERR( pdbc->herr, en_S1001 ); - - return SQL_ERROR; - } - - STRCPY ( pdbc->tfile, vParam ); - - return SQL_SUCCESS; - } - - if( pdbc->state != en_dbc_allocated ) - { - /* If already connected, then, driver's odbc call - * will be invoked. Otherwise, we only save the options - * and delay the setting process until the connection - * been established. - */ - hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_SetConnectOption, ( - pdbc->dhdbc, fOption, vParam ) ) + { + pdbc->tstm + = fopen(pdbc->tfile, "a+"); + } + + if(pdbc->tstm ) + { + pdbc->trace = 1; + } + else + { + pdbc->trace = 0; + + sqlstat = en_IM013; + retcode = SQL_ERROR; + } + } + break; + + case SQL_OPT_TRACE_OFF: + if( pdbc->trace && pdbc->tstm ) + { +#if defined(stderr) && defined(stdout) + if( stderr != (FILE FAR*)(pdbc->tstm) + && stdout != (FILE FAR*)(pdbc->tstm) ) +#endif + { + fclose(pdbc->tstm); + } + } + pdbc->tstm = NULL; + pdbc->trace = 0; + break; + + default: + PUSHSQLERR (pdbc->herr, en_S1009); + retcode = SQL_ERROR; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pdbc->herr, sqlstat ); + } + + return retcode; + } + + if( fOption == SQL_OPT_TRACEFILE ) + /* Tracing file can be set before and after connect + * and only meaningful for driver manager. + */ + { + if( vParam == 0UL + || ((char FAR*)vParam)[0] == 0 ) + { + PUSHSQLERR ( pdbc->herr, en_S1009 ); + + return SQL_ERROR; + } + + if( pdbc->tfile && STREQ (pdbc->tfile, vParam) ) + { + return SQL_SUCCESS; + } + + if( pdbc->trace ) + { + PUSHSQLERR ( pdbc->herr, en_IM014 ); + + return SQL_ERROR; + } + + if( pdbc->tfile ) + { + MEM_FREE( pdbc->tfile ); + } + + pdbc->tfile = (char FAR*)MEM_ALLOC( 1 + STRLEN( vParam ) ); + + if( pdbc->tfile == NULL ) + { + PUSHSQLERR( pdbc->herr, en_S1001 ); + + return SQL_ERROR; + } + + STRCPY ( pdbc->tfile, vParam ); + + return SQL_SUCCESS; + } + + if( pdbc->state != en_dbc_allocated ) + { + /* If already connected, then, driver's odbc call + * will be invoked. Otherwise, we only save the options + * and delay the setting process until the connection + * been established. + */ + hproc = _iodbcdm_getproc( hdbc, en_SetConnectOption ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_SetConnectOption, ( + pdbc->dhdbc, fOption, vParam ) ) #if 0 - retcode = hproc( pdbc->dhdbc, fOption, vParam); + retcode = hproc( pdbc->dhdbc, fOption, vParam); #endif - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - return retcode; - } - } - - /* - * Now, either driver's odbc call was successed or - * driver has not been loaded yet. In the first case, we - * need flip flag for(such as access_mode, autocommit, ...) - * for our finit state machine. While in the second case, - * we need save option values(such as current_qualifier, ...) - * for delaied setting. So, ... - */ - - /* No matter what state we are(i.e. allocated or connected, ..) - * we need to flip the flag. - */ - switch( fOption ) - { - case SQL_ACCESS_MODE: - pdbc->access_mode = vParam; - break; - - case SQL_AUTOCOMMIT: - pdbc->autocommit = vParam; - break; - } - - /* state transition */ - if( pdbc->state != en_dbc_allocated ) - { - return retcode; - } - - /* Only 'allocated' state is possible here, and we need to - * save the options for delaied setting. - */ - switch( fOption ) - { - case SQL_CURRENT_QUALIFIER: - if( pdbc->current_qualifier != NULL ) - { - MEM_FREE ( pdbc->current_qualifier ); - } - - if( vParam == 0UL ) - { - pdbc->current_qualifier = NULL; - - break; - } - - pdbc->current_qualifier - = (char FAR*)MEM_ALLOC ( - STRLEN (vParam) + 1 ); - - if( pdbc->current_qualifier == NULL ) - { - PUSHSQLERR ( pdbc->herr, en_S1001 ); - return SQL_ERROR; - } - - STRCPY ( pdbc->current_qualifier, vParam ); - break; - - case SQL_LOGIN_TIMEOUT: - pdbc->login_timeout = vParam; - break; - - case SQL_ODBC_CURSORS: - pdbc->odbc_cursors = vParam; - break; - - case SQL_PACKET_SIZE: - pdbc->packet_size = vParam; - break; - - case SQL_QUIET_MODE: - pdbc->quiet_mode = vParam; - break; - - case SQL_TXN_ISOLATION: - pdbc->txn_isolation = vParam; - break; - - default: - /* Since we didn't save the option value for delaied - * setting, we should raise an error here. - */ - break; - } - - return retcode; + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + return retcode; + } + } + + /* + * Now, either driver's odbc call was successed or + * driver has not been loaded yet. In the first case, we + * need flip flag for(such as access_mode, autocommit, ...) + * for our finit state machine. While in the second case, + * we need save option values(such as current_qualifier, ...) + * for delaied setting. So, ... + */ + + /* No matter what state we are(i.e. allocated or connected, ..) + * we need to flip the flag. + */ + switch( fOption ) + { + case SQL_ACCESS_MODE: + pdbc->access_mode = vParam; + break; + + case SQL_AUTOCOMMIT: + pdbc->autocommit = vParam; + break; + } + + /* state transition */ + if( pdbc->state != en_dbc_allocated ) + { + return retcode; + } + + /* Only 'allocated' state is possible here, and we need to + * save the options for delaied setting. + */ + switch( fOption ) + { + case SQL_CURRENT_QUALIFIER: + if( pdbc->current_qualifier != NULL ) + { + MEM_FREE ( pdbc->current_qualifier ); + } + + if( vParam == 0UL ) + { + pdbc->current_qualifier = NULL; + + break; + } + + pdbc->current_qualifier + = (char FAR*)MEM_ALLOC ( + STRLEN (vParam) + 1 ); + + if( pdbc->current_qualifier == NULL ) + { + PUSHSQLERR ( pdbc->herr, en_S1001 ); + return SQL_ERROR; + } + + STRCPY ( pdbc->current_qualifier, vParam ); + break; + + case SQL_LOGIN_TIMEOUT: + pdbc->login_timeout = vParam; + break; + + case SQL_ODBC_CURSORS: + pdbc->odbc_cursors = vParam; + break; + + case SQL_PACKET_SIZE: + pdbc->packet_size = vParam; + break; + + case SQL_QUIET_MODE: + pdbc->quiet_mode = vParam; + break; + + case SQL_TXN_ISOLATION: + pdbc->txn_isolation = vParam; + break; + + default: + /* Since we didn't save the option value for delaied + * setting, we should raise an error here. + */ + break; + } + + return retcode; } -RETCODE SQL_API SQLGetConnectOption( - HDBC hdbc, - UWORD fOption, - PTR pvParam ) +RETCODE SQL_API SQLGetConnectOption( + HDBC hdbc, + UWORD fOption, + PTR pvParam ) { -/* GENV_t FAR* genv; */ - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - int sqlstat = en_00000; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check option */ - if( fOption < SQL_CONN_OPT_MIN - || ( fOption > SQL_CONN_OPT_MAX - && fOption < SQL_CONNECT_OPT_DRVR_START ) ) - { - PUSHSQLERR ( pdbc->herr, en_S1092 ); - - return SQL_ERROR; - } - - /* check state */ - switch( pdbc->state ) - { - case en_dbc_allocated: - if( fOption != SQL_ACCESS_MODE - && fOption != SQL_AUTOCOMMIT - && fOption != SQL_LOGIN_TIMEOUT - && fOption != SQL_OPT_TRACE - && fOption != SQL_OPT_TRACEFILE ) - { - sqlstat = en_08003; - } - /* MS ODBC SDK document only - * allows SQL_ACCESS_MODE - * and SQL_AUTOCOMMIT in this - * dbc state. We allow another - * two options, because they - * are only meaningful for driver - * manager. - */ - break; - - case en_dbc_needdata: - sqlstat = en_S1010; - break; - - default: - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pdbc->herr, sqlstat ); - - return SQL_ERROR; - } - - /* Tracing and tracing file options are only - * meaningful for driver manager - */ - if( fOption == SQL_OPT_TRACE ) - { - if( pdbc->trace ) - *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_ON; - else - *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_OFF; - - return SQL_SUCCESS; - } - - if( fOption == SQL_OPT_TRACEFILE ) - { - STRCPY (pvParam, pdbc->tfile ); - - return SQL_ERROR; - } - - if( pdbc->state != en_dbc_allocated ) - /* if already connected, we will invoke driver's function */ - { - hproc = _iodbcdm_getproc( hdbc, en_GetConnectOption ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_GetConnectOption, ( - pdbc->dhdbc, fOption, pvParam ) ) + GENV_t FAR* genv; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + int sqlstat = en_00000; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check option */ + if( fOption < SQL_CONN_OPT_MIN + || ( fOption > SQL_CONN_OPT_MAX + && fOption < SQL_CONNECT_OPT_DRVR_START ) ) + { + PUSHSQLERR ( pdbc->herr, en_S1092 ); + + return SQL_ERROR; + } + + /* check state */ + switch( pdbc->state ) + { + case en_dbc_allocated: + if( fOption != SQL_ACCESS_MODE + && fOption != SQL_AUTOCOMMIT + && fOption != SQL_LOGIN_TIMEOUT + && fOption != SQL_OPT_TRACE + && fOption != SQL_OPT_TRACEFILE ) + { + sqlstat = en_08003; + } + /* MS ODBC SDK document only + * allows SQL_ACCESS_MODE + * and SQL_AUTOCOMMIT in this + * dbc state. We allow another + * two options, because they + * are only meaningful for driver + * manager. + */ + break; + + case en_dbc_needdata: + sqlstat = en_S1010; + break; + + default: + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pdbc->herr, sqlstat ); + + return SQL_ERROR; + } + + /* Tracing and tracing file options are only + * meaningful for driver manager + */ + if( fOption == SQL_OPT_TRACE ) + { + if( pdbc->trace ) + *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_ON; + else + *((UDWORD*)pvParam) = (UDWORD)SQL_OPT_TRACE_OFF; + + return SQL_SUCCESS; + } + + if( fOption == SQL_OPT_TRACEFILE ) + { + STRCPY (pvParam, pdbc->tfile ); + + return SQL_ERROR; + } + + if( pdbc->state != en_dbc_allocated ) + /* if already connected, we will invoke driver's function */ + { + hproc = _iodbcdm_getproc( hdbc, en_GetConnectOption ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_GetConnectOption, ( + pdbc->dhdbc, fOption, pvParam ) ) #if 0 - retcode = hproc(pdbc->dhdbc, fOption, pvParam); + retcode = hproc(pdbc->dhdbc, fOption, pvParam); #endif - - return retcode; - } - - /* We needn't to handle options which are not allowed - * to be *get* at a allocated dbc state(and two tracing - * options which has been handled and returned). Thus, - * there are only two possible cases. - */ - switch( fOption ) - { - case SQL_ACCESS_MODE: - *((UDWORD*)pvParam) = pdbc->access_mode; - break; - - case SQL_AUTOCOMMIT: - *((UDWORD*)pvParam) = pdbc->autocommit; - break; - - case SQL_LOGIN_TIMEOUT: - *((UDWORD*)pvParam) = pdbc->login_timeout; - break; - - default: - break; - } - - return SQL_SUCCESS; + + return retcode; + } + + /* We needn't to handle options which are not allowed + * to be *get* at a allocated dbc state(and two tracing + * options which has been handled and returned). Thus, + * there are only two possible cases. + */ + switch( fOption ) + { + case SQL_ACCESS_MODE: + *((UDWORD*)pvParam) = pdbc->access_mode; + break; + + case SQL_AUTOCOMMIT: + *((UDWORD*)pvParam) = pdbc->autocommit; + break; + + case SQL_LOGIN_TIMEOUT: + *((UDWORD*)pvParam) = pdbc->login_timeout; + break; + + default: + break; + } + + return SQL_SUCCESS; } -static RETCODE _iodbcdm_transact( - HDBC hdbc, - UWORD fType ) +static RETCODE _iodbcdm_transact( + HDBC hdbc, + UWORD fType ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - STMT_t FAR* pstmt; - HPROC hproc; - RETCODE retcode; - - /* check state */ - switch( pdbc->state ) - { - case en_dbc_allocated: - case en_dbc_needdata: - PUSHSQLERR ( pdbc->herr, en_08003 ); - return SQL_ERROR; - - case en_dbc_connected: - return SQL_SUCCESS; - - case en_dbc_hstmt: - default: - break; - } - - for( pstmt = (STMT_t FAR*)(pdbc->hstmt); - pstmt != NULL; - pstmt = pstmt->next ) - { - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pdbc->herr, en_S1010 ); - - return SQL_ERROR; - } - } - - hproc = _iodbcdm_getproc( hdbc, en_Transact ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_Transact, ( - SQL_NULL_HENV, pdbc->dhdbc, fType ) ) + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + STMT_t FAR* pstmt; + HPROC hproc; + RETCODE retcode; + + /* check state */ + switch( pdbc->state ) + { + case en_dbc_allocated: + case en_dbc_needdata: + PUSHSQLERR ( pdbc->herr, en_08003 ); + return SQL_ERROR; + + case en_dbc_connected: + return SQL_SUCCESS; + + case en_dbc_hstmt: + default: + break; + } + + for( pstmt = (STMT_t FAR*)(pdbc->hstmt); + pstmt != NULL; + pstmt = pstmt->next ) + { + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pdbc->herr, en_S1010 ); + + return SQL_ERROR; + } + } + + hproc = _iodbcdm_getproc( hdbc, en_Transact ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_Transact, ( + SQL_NULL_HENV, pdbc->dhdbc, fType ) ) #if 0 - retcode = hproc( SQL_NULL_HENV, pdbc->dhdbc, fType ); + retcode = hproc( SQL_NULL_HENV, pdbc->dhdbc, fType ); #endif - /* state transition */ - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - return retcode; - } - - pdbc->state = en_dbc_hstmt; - - for( pstmt = (STMT_t FAR*)(pdbc->hstmt); - pstmt != NULL; - pstmt = pstmt->next ) - { - switch( pstmt->state ) - { - case en_stmt_prepared: - if( pdbc->cb_commit == SQL_CB_DELETE - || pdbc->cb_rollback == SQL_CB_DELETE ) - { - pstmt->state = en_stmt_allocated; - pstmt->prep_state = 0; - break; - } - break; - - case en_stmt_executed: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( ! pstmt->prep_state - && pdbc->cb_commit != SQL_CB_PRESERVE - && pdbc->cb_rollback != SQL_CB_PRESERVE ) - { - pstmt->state = en_stmt_allocated; - pstmt->prep_state = 0; - pstmt->cursor_state = en_stmt_cursor_no; - break; - } - - if( pstmt->prep_state ) - { - if( pdbc->cb_commit == SQL_CB_DELETE - || pdbc->cb_rollback== SQL_CB_DELETE ) - { - pstmt->state = en_stmt_allocated; - pstmt->prep_state = 0; - pstmt->cursor_state = en_stmt_cursor_no; - break; - } - - if( pdbc->cb_commit == SQL_CB_CLOSE - || pdbc->cb_rollback== SQL_CB_CLOSE ) - { - pstmt->state - = en_stmt_prepared; - pstmt->cursor_state - = en_stmt_cursor_no; - break; - } - break; - } - break; - - default: - break; - } - } - - return retcode; + /* state transition */ + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + return retcode; + } + + pdbc->state = en_dbc_hstmt; + + for( pstmt = (STMT_t FAR*)(pdbc->hstmt); + pstmt != NULL; + pstmt = pstmt->next ) + { + switch( pstmt->state ) + { + case en_stmt_prepared: + if( pdbc->cb_commit == SQL_CB_DELETE + || pdbc->cb_rollback == SQL_CB_DELETE ) + { + pstmt->state = en_stmt_allocated; + pstmt->prep_state = 0; + break; + } + break; + + case en_stmt_executed: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( ! pstmt->prep_state + && pdbc->cb_commit != SQL_CB_PRESERVE + && pdbc->cb_rollback != SQL_CB_PRESERVE ) + { + pstmt->state = en_stmt_allocated; + pstmt->prep_state = 0; + pstmt->cursor_state = en_stmt_cursor_no; + break; + } + + if( pstmt->prep_state ) + { + if( pdbc->cb_commit == SQL_CB_DELETE + || pdbc->cb_rollback== SQL_CB_DELETE ) + { + pstmt->state = en_stmt_allocated; + pstmt->prep_state = 0; + pstmt->cursor_state = en_stmt_cursor_no; + break; + } + + if( pdbc->cb_commit == SQL_CB_CLOSE + || pdbc->cb_rollback== SQL_CB_CLOSE ) + { + pstmt->state + = en_stmt_prepared; + pstmt->cursor_state + = en_stmt_cursor_no; + break; + } + break; + } + break; + + default: + break; + } + } + + return retcode; } -RETCODE SQL_API SQLTransact( - HENV henv, - HDBC hdbc, - UWORD fType ) +RETCODE SQL_API SQLTransact( + HENV henv, + HDBC hdbc, + UWORD fType ) { - GENV_t FAR* genv = (GENV_t FAR*)henv; - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - HERR herr; - RETCODE retcode = 0; - - if( hdbc != SQL_NULL_HDBC ) - { - herr = pdbc->herr; - } - else if( henv != SQL_NULL_HENV ) - { - herr = genv->herr; - } - else - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( fType != SQL_COMMIT - && fType != SQL_ROLLBACK ) - { - PUSHSQLERR ( herr, en_S1012 ); - - return SQL_ERROR; - } - - if( hdbc != SQL_NULL_HDBC ) - { - retcode = _iodbcdm_transact( hdbc, fType ); - } - else - { - for( pdbc = (DBC_t FAR*)(genv->hdbc); - pdbc != NULL; - pdbc = pdbc->next ) - { - retcode |= _iodbcdm_transact( hdbc, fType ); - } - } - - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - /* fail on one of the connection */ - return SQL_ERROR; - } - - return retcode; + GENV_t FAR* genv = (GENV_t FAR*)henv; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + HERR herr; + RETCODE retcode; + + if( hdbc != SQL_NULL_HDBC ) + { + herr = pdbc->herr; + } + else if( henv != SQL_NULL_HENV ) + { + herr = genv->herr; + } + else + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( fType != SQL_COMMIT + && fType != SQL_ROLLBACK ) + { + PUSHSQLERR ( herr, en_S1012 ); + + return SQL_ERROR; + } + + if( hdbc != SQL_NULL_HDBC ) + { + retcode = _iodbcdm_transact( hdbc, fType ); + } + else + { + for( pdbc = (DBC_t FAR*)(genv->hdbc); + pdbc != NULL; + pdbc = pdbc->next ) + { + retcode |= _iodbcdm_transact( hdbc, fType ); + } + } + + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + /* fail on one of the connection */ + return SQL_ERROR; + } + + return retcode; } diff --git a/src/iodbc/hdbc.h b/src/iodbc/hdbc.h index 88f953983b..ef62292432 100644 --- a/src/iodbc/hdbc.h +++ b/src/iodbc/hdbc.h @@ -1,55 +1,55 @@ -#ifndef _HDBC_H -#define _HDBC_H +#ifndef _HDBC_H +#define _HDBC_H -typedef struct DBC +typedef struct DBC { - int type; /* must be 1st field */ - struct DBC FAR* - next; + int type; /* must be 1st field */ + struct DBC FAR* + next; - HENV genv; /* back point to global env object */ + HENV genv; /* back point to global env object */ - HDBC dhdbc; /* driver's private dbc */ - HENV henv; /* back point to instant env object */ - HSTMT hstmt; /* list of statement object handle(s) */ - HERR herr; + HDBC dhdbc; /* driver's private dbc */ + HENV henv; /* back point to instant env object */ + HSTMT hstmt; /* list of statement object handle(s) */ + HERR herr; - int state; + int state; - /* options */ - UDWORD access_mode; - UDWORD autocommit; + /* options */ + UDWORD access_mode; + UDWORD autocommit; - UDWORD login_timeout; - UDWORD odbc_cursors; - UDWORD packet_size; - UDWORD quiet_mode; - UDWORD txn_isolation; - SWORD cb_commit; - SWORD cb_rollback; + UDWORD login_timeout; + UDWORD odbc_cursors; + UDWORD packet_size; + UDWORD quiet_mode; + UDWORD txn_isolation; + SWORD cb_commit; + SWORD cb_rollback; - char FAR* - current_qualifier; + char FAR* + current_qualifier; - int trace; /* trace flag */ - char FAR* - tfile; - void FAR* - tstm; /* trace stream */ + int trace; /* trace flag */ + char FAR* + tfile; + void FAR* + tstm; /* trace stream */ } DBC_t; -/* +/* * Note: - * - ODBC applications can see address of driver manager's - * connection object, i.e connection handle -- a void pointer, - * but not detail of it. ODBC applications can neither see + * - ODBC applications can see address of driver manager's + * connection object, i.e connection handle -- a void pointer, + * but not detail of it. ODBC applications can neither see * detail driver's connection object nor its address. * * - ODBC driver manager knows its own connection objects and * exposes their address to an ODBC application. Driver manager * also knows address of driver's connection objects and keeps * it via dhdbc field in driver manager's connection object. - * + * * - ODBC driver exposes address of its own connection object to * driver manager without detail. * @@ -57,11 +57,11 @@ typedef struct DBC * SQLGetInfo() with fInfoType equals to SQL_DRIVER_HDBC. */ -enum { - en_dbc_allocated, - en_dbc_needdata, - en_dbc_connected, - en_dbc_hstmt +enum { + en_dbc_allocated, + en_dbc_needdata, + en_dbc_connected, + en_dbc_hstmt }; #endif diff --git a/src/iodbc/henv.c b/src/iodbc/henv.c index be4b4ae8d5..2ee89b2feb 100644 --- a/src/iodbc/henv.c +++ b/src/iodbc/henv.c @@ -1,6 +1,6 @@ /** Environment object managment functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,51 +25,51 @@ #include <../iodbc/itrace.h> -RETCODE SQL_API SQLAllocEnv( HENV FAR* phenv ) +RETCODE SQL_API SQLAllocEnv( HENV FAR* phenv ) { - GENV_t FAR* genv; + GENV_t FAR* genv; - genv = (GENV_t*)MEM_ALLOC( sizeof(GENV_t) ); + genv = (GENV_t*)MEM_ALLOC( sizeof(GENV_t) ); - if( genv == NULL ) - { - *phenv = SQL_NULL_HENV; + if( genv == NULL ) + { + *phenv = SQL_NULL_HENV; - return SQL_ERROR; - } + return SQL_ERROR; + } #if (ODBCVER >= 0x0300 ) - genv->type = SQL_HANDLE_ENV; + genv->type = SQL_HANDLE_ENV; #endif - genv->henv = SQL_NULL_HENV; /* driver's env list */ - genv->hdbc = SQL_NULL_HDBC; /* driver's dbc list */ - genv->herr = SQL_NULL_HERR; /* err list */ + genv->henv = SQL_NULL_HENV; /* driver's env list */ + genv->hdbc = SQL_NULL_HDBC; /* driver's dbc list */ + genv->herr = SQL_NULL_HERR; /* err list */ - *phenv = (HENV)genv; + *phenv = (HENV)genv; - return SQL_SUCCESS; + return SQL_SUCCESS; } -RETCODE SQL_API SQLFreeEnv ( HENV henv ) +RETCODE SQL_API SQLFreeEnv ( HENV henv ) { - GENV_t FAR* genv = (GENV_t*)henv; + GENV_t FAR* genv = (GENV_t*)henv; - if( henv == SQL_NULL_HENV ) - { - return SQL_INVALID_HANDLE; - } + if( henv == SQL_NULL_HENV ) + { + return SQL_INVALID_HANDLE; + } - if( genv->hdbc != SQL_NULL_HDBC ) - { - PUSHSQLERR ( genv->herr, en_S1010 ); + if( genv->hdbc != SQL_NULL_HDBC ) + { + PUSHSQLERR ( genv->herr, en_S1010 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - _iodbcdm_freesqlerrlist( genv->herr ); + _iodbcdm_freesqlerrlist( genv->herr ); - MEM_FREE( henv ); + MEM_FREE( henv ); - return SQL_SUCCESS; + return SQL_SUCCESS; } diff --git a/src/iodbc/henv.ci b/src/iodbc/henv.ci index 639c6ec842..b8df08fe55 100644 --- a/src/iodbc/henv.ci +++ b/src/iodbc/henv.ci @@ -1,95 +1,86 @@ - -#ifdef __HPUX__ -#define CLI_NAME_PREFIX "_SQL" -#endif - -#ifdef __AIX__ -#define CLI_NAME_PREFIX ".SQL" -#endif - -#ifndef CLI_NAME_PREFIX +#ifndef CLI_NAME_PREFIX /* There are some exceptions : * on FreeBSD 2.x CLI_NAME_PREFIX is defined in Config.mk as "_SQL" - * on HP/UX s300/s400, CLI_NAME_PREFIX is defined in Config.mk as "_SQL" - * on AIX 3.x 4.x, CLI_NAME_PREFIX is defined in Config.mk as ".SQL" + * on HP/UX s300/s400, CLI_NAME_PREFIX is defined in Config.mk as "_SQL" + * on AIX 3.x 4.x, CLI_NAME_PREFIX is defined in Config.mk as ".SQL" */ -# define CLI_NAME_PREFIX "SQL" /* using call by value prefix */ +# define CLI_NAME_PREFIX "SQL" /* using call by value prefix */ #endif static struct { - int en_idx; - char* symbol; + int en_idx; + char* symbol; } odbcapi_symtab[] = { #if (ODBCVER >= 0x0300) - en_AllocHandle CLI_NAME_PREFIX "AllocHandle", - en_FreeHandle CLI_NAME_PREFIX "FreeHandle", + en_AllocHandle CLI_NAME_PREFIX "AllocHandle", + en_FreeHandle CLI_NAME_PREFIX "FreeHandle", #endif - en_AllocEnv, CLI_NAME_PREFIX "AllocEnv", - en_AllocConnect, CLI_NAME_PREFIX "AllocConnect", - en_Connect, CLI_NAME_PREFIX "Connect", - en_DriverConnect, CLI_NAME_PREFIX "DriverConnect", - en_BrowseConnect, CLI_NAME_PREFIX "BrowseConnect", + en_AllocEnv, CLI_NAME_PREFIX "AllocEnv", + en_AllocConnect, CLI_NAME_PREFIX "AllocConnect", + en_Connect, CLI_NAME_PREFIX "Connect", + en_DriverConnect, CLI_NAME_PREFIX "DriverConnect", + en_BrowseConnect, CLI_NAME_PREFIX "BrowseConnect", - en_DataSources, CLI_NAME_PREFIX "DataSources", - en_Drivers, CLI_NAME_PREFIX "Driver", - en_GetInfo, CLI_NAME_PREFIX "GetInfo", - en_GetFunctions, CLI_NAME_PREFIX "GetFunctions", - en_GetTypeInfo, CLI_NAME_PREFIX "GetTypeInfo", + en_DataSources, CLI_NAME_PREFIX "DataSources", + en_Drivers, CLI_NAME_PREFIX "Driver", + en_GetInfo, CLI_NAME_PREFIX "GetInfo", + en_GetFunctions, CLI_NAME_PREFIX "GetFunctions", + en_GetTypeInfo, CLI_NAME_PREFIX "GetTypeInfo", - en_SetConnectOption, CLI_NAME_PREFIX "SetConnectOption", - en_GetConnectOption, CLI_NAME_PREFIX "GetConnectOption", - en_SetStmtOption, CLI_NAME_PREFIX "SetStmtOption", - en_GetStmtOption, CLI_NAME_PREFIX "GetStmtOption", + en_SetConnectOption, CLI_NAME_PREFIX "SetConnectOption", + en_GetConnectOption, CLI_NAME_PREFIX "GetConnectOption", + en_SetStmtOption, CLI_NAME_PREFIX "SetStmtOption", + en_GetStmtOption, CLI_NAME_PREFIX "GetStmtOption", - en_AllocStmt, CLI_NAME_PREFIX "AllocStmt", - en_Prepare, CLI_NAME_PREFIX "Prepare", - en_BindParameter, CLI_NAME_PREFIX "BindParameter", - en_ParamOptions, CLI_NAME_PREFIX "ParamOptions", - en_GetCursorName, CLI_NAME_PREFIX "GetCursorName", - en_SetCursorName, CLI_NAME_PREFIX "SetCursorName", - en_SetScrollOptions, CLI_NAME_PREFIX "SetScrollOptions", - en_SetParam, CLI_NAME_PREFIX "SetParam", + en_AllocStmt, CLI_NAME_PREFIX "AllocStmt", + en_Prepare, CLI_NAME_PREFIX "Prepare", + en_BindParameter, CLI_NAME_PREFIX "BindParameter", + en_ParamOptions, CLI_NAME_PREFIX "ParamOptions", + en_GetCursorName, CLI_NAME_PREFIX "GetCursorName", + en_SetCursorName, CLI_NAME_PREFIX "SetCursorName", + en_SetScrollOptions, CLI_NAME_PREFIX "SetScrollOptions", + en_SetParam, CLI_NAME_PREFIX "SetParam", - en_Execute, CLI_NAME_PREFIX "Execute", - en_ExecDirect, CLI_NAME_PREFIX "ExecDirect", - en_NativeSql, CLI_NAME_PREFIX "NativeSql", - en_DescribeParam, CLI_NAME_PREFIX "DescribeParam", - en_NumParams, CLI_NAME_PREFIX "NumParams", - en_ParamData, CLI_NAME_PREFIX "ParamData", - en_PutData, CLI_NAME_PREFIX "PutData", + en_Execute, CLI_NAME_PREFIX "Execute", + en_ExecDirect, CLI_NAME_PREFIX "ExecDirect", + en_NativeSql, CLI_NAME_PREFIX "NativeSql", + en_DescribeParam, CLI_NAME_PREFIX "DescribeParam", + en_NumParams, CLI_NAME_PREFIX "NumParams", + en_ParamData, CLI_NAME_PREFIX "ParamData", + en_PutData, CLI_NAME_PREFIX "PutData", - en_RowCount, CLI_NAME_PREFIX "RowCount", - en_NumResultCols, CLI_NAME_PREFIX "NumResultCols", - en_DescribeCol, CLI_NAME_PREFIX "DescribeCol", - en_ColAttributes, CLI_NAME_PREFIX "ColAttributes", - en_BindCol, CLI_NAME_PREFIX "BindCol", - en_Fetch, CLI_NAME_PREFIX "Fetch", - en_ExtendedFetch, CLI_NAME_PREFIX "ExtendedFetch", - en_GetData, CLI_NAME_PREFIX "GetData", - en_SetPos, CLI_NAME_PREFIX "SetPos", - en_MoreResults, CLI_NAME_PREFIX "MoreResults", - en_Error, CLI_NAME_PREFIX "Error", + en_RowCount, CLI_NAME_PREFIX "RowCount", + en_NumResultCols, CLI_NAME_PREFIX "NumResultCols", + en_DescribeCol, CLI_NAME_PREFIX "DescribeCol", + en_ColAttributes, CLI_NAME_PREFIX "ColAttributes", + en_BindCol, CLI_NAME_PREFIX "BindCol", + en_Fetch, CLI_NAME_PREFIX "Fetch", + en_ExtendedFetch, CLI_NAME_PREFIX "ExtendedFetch", + en_GetData, CLI_NAME_PREFIX "GetData", + en_SetPos, CLI_NAME_PREFIX "SetPos", + en_MoreResults, CLI_NAME_PREFIX "MoreResults", + en_Error, CLI_NAME_PREFIX "Error", - en_ColumnPrivileges, CLI_NAME_PREFIX "ColumnPrivileges", - en_Columns, CLI_NAME_PREFIX "Columns", - en_ForeignKeys, CLI_NAME_PREFIX "ForeignKeys", - en_PrimaryKeys, CLI_NAME_PREFIX "PrimaryKeys", - en_ProcedureColumns, CLI_NAME_PREFIX "ProcedureColumns", - en_Procedures, CLI_NAME_PREFIX "Procedures", - en_SpecialColumns, CLI_NAME_PREFIX "SpecialColumns", - en_Statistics, CLI_NAME_PREFIX "Statistics", - en_TablePrivileges, CLI_NAME_PREFIX "TablePrivileges", - en_Tables, CLI_NAME_PREFIX "Tables", + en_ColumnPrivileges, CLI_NAME_PREFIX "ColumnPrivileges", + en_Columns, CLI_NAME_PREFIX "Columns", + en_ForeignKeys, CLI_NAME_PREFIX "ForeignKeys", + en_PrimaryKeys, CLI_NAME_PREFIX "PrimaryKeys", + en_ProcedureColumns, CLI_NAME_PREFIX "ProcedureColumns", + en_Procedures, CLI_NAME_PREFIX "Procedures", + en_SpecialColumns, CLI_NAME_PREFIX "SpecialColumns", + en_Statistics, CLI_NAME_PREFIX "Statistics", + en_TablePrivileges, CLI_NAME_PREFIX "TablePrivileges", + en_Tables, CLI_NAME_PREFIX "Tables", - en_FreeStmt, CLI_NAME_PREFIX "FreeStmt", - en_Cancel, CLI_NAME_PREFIX "Cancel", - en_Transact, CLI_NAME_PREFIX "Transact", + en_FreeStmt, CLI_NAME_PREFIX "FreeStmt", + en_Cancel, CLI_NAME_PREFIX "Cancel", + en_Transact, CLI_NAME_PREFIX "Transact", - en_Disconnect, CLI_NAME_PREFIX "Disconnect", - en_FreeConnect, CLI_NAME_PREFIX "FreeConnect", - en_FreeEnv, CLI_NAME_PREFIX "FreeEnv", + en_Disconnect, CLI_NAME_PREFIX "Disconnect", + en_FreeConnect, CLI_NAME_PREFIX "FreeConnect", + en_FreeEnv, CLI_NAME_PREFIX "FreeEnv", - en_NullProc, NULL + en_NullProc, NULL }; diff --git a/src/iodbc/henv.h b/src/iodbc/henv.h index 8dc260c996..191476d28d 100644 --- a/src/iodbc/henv.h +++ b/src/iodbc/henv.h @@ -1,109 +1,109 @@ -#ifndef _HENV_H -#define _HENV_H +#ifndef _HENV_H +#define _HENV_H -# include <../iodbc/config.h> -# include <../iodbc/dlproc.h> +# include +# include -# include <../iodbc/isql.h> -# include <../iodbc/isqlext.h> +# include +# include enum { #if (ODBCVER >= 0x0300) - en_AllocHandle = SQL_API_SQLALLOCHANDLE, - en_FreeHandle = SQL_API_SQLFREEHANDLE, + en_AllocHandle = SQL_API_SQLALLOCHANDLE, + en_FreeHandle = SQL_API_SQLFREEHANDLE, #endif - en_AllocEnv = SQL_API_SQLALLOCENV, - en_AllocConnect = SQL_API_SQLALLOCCONNECT, - en_Connect = SQL_API_SQLCONNECT, - en_DriverConnect = SQL_API_SQLDRIVERCONNECT, - en_BrowseConnect = SQL_API_SQLBROWSECONNECT, - - en_DataSources = SQL_API_SQLDATASOURCES, - en_Drivers = SQL_API_SQLDRIVERS, - en_GetInfo = SQL_API_SQLGETINFO, - en_GetFunctions = SQL_API_SQLGETFUNCTIONS, - en_GetTypeInfo = SQL_API_SQLGETTYPEINFO, - - en_SetConnectOption = SQL_API_SQLSETCONNECTOPTION, - en_GetConnectOption = SQL_API_SQLGETCONNECTOPTION, - en_SetStmtOption = SQL_API_SQLSETSTMTOPTION, - en_GetStmtOption = SQL_API_SQLGETSTMTOPTION, - - en_AllocStmt = SQL_API_SQLALLOCSTMT, - en_Prepare = SQL_API_SQLPREPARE, - en_BindParameter = SQL_API_SQLBINDPARAMETER, - en_ParamOptions = SQL_API_SQLPARAMOPTIONS, - en_GetCursorName = SQL_API_SQLGETCURSORNAME, - en_SetCursorName = SQL_API_SQLSETCURSORNAME, - en_SetScrollOptions = SQL_API_SQLSETSCROLLOPTIONS, - en_SetParam = SQL_API_SQLSETPARAM, - - en_Execute = SQL_API_SQLEXECUTE, - en_ExecDirect = SQL_API_SQLEXECDIRECT, - en_NativeSql = SQL_API_SQLNATIVESQL, - en_DescribeParam = SQL_API_SQLDESCRIBEPARAM, - en_NumParams = SQL_API_SQLNUMPARAMS, - en_ParamData = SQL_API_SQLPARAMDATA, - en_PutData = SQL_API_SQLPUTDATA, - - en_RowCount = SQL_API_SQLROWCOUNT, - en_NumResultCols = SQL_API_SQLNUMRESULTCOLS, - en_DescribeCol = SQL_API_SQLDESCRIBECOL, - en_ColAttributes = SQL_API_SQLCOLATTRIBUTES, - en_BindCol = SQL_API_SQLBINDCOL, - en_Fetch = SQL_API_SQLFETCH, - en_ExtendedFetch = SQL_API_SQLEXTENDEDFETCH, - en_GetData = SQL_API_SQLGETDATA, - en_SetPos = SQL_API_SQLSETPOS, - en_MoreResults = SQL_API_SQLMORERESULTS, - en_Error = SQL_API_SQLERROR, - - en_ColumnPrivileges = SQL_API_SQLCOLUMNPRIVILEGES, - en_Columns = SQL_API_SQLCOLUMNS, - en_ForeignKeys = SQL_API_SQLFOREIGNKEYS, - en_PrimaryKeys = SQL_API_SQLPRIMARYKEYS, - en_ProcedureColumns = SQL_API_SQLPROCEDURECOLUMNS, - en_Procedures = SQL_API_SQLPROCEDURES, - en_SpecialColumns = SQL_API_SQLSPECIALCOLUMNS, - en_Statistics = SQL_API_SQLSTATISTICS, - en_TablePrivileges = SQL_API_SQLTABLEPRIVILEGES, - en_Tables = SQL_API_SQLTABLES, - - en_FreeStmt = SQL_API_SQLFREESTMT, - en_Cancel = SQL_API_SQLCANCEL, - en_Transact = SQL_API_SQLTRANSACT, - - en_Disconnect = SQL_API_SQLDISCONNECT, - en_FreeConnect = SQL_API_SQLFREECONNECT, - en_FreeEnv = SQL_API_SQLFREEENV, - - en_NullProc = SYSERR + en_AllocEnv = SQL_API_SQLALLOCENV, + en_AllocConnect = SQL_API_SQLALLOCCONNECT, + en_Connect = SQL_API_SQLCONNECT, + en_DriverConnect = SQL_API_SQLDRIVERCONNECT, + en_BrowseConnect = SQL_API_SQLBROWSECONNECT, + + en_DataSources = SQL_API_SQLDATASOURCES, + en_Drivers = SQL_API_SQLDRIVERS, + en_GetInfo = SQL_API_SQLGETINFO, + en_GetFunctions = SQL_API_SQLGETFUNCTIONS, + en_GetTypeInfo = SQL_API_SQLGETTYPEINFO, + + en_SetConnectOption = SQL_API_SQLSETCONNECTOPTION, + en_GetConnectOption = SQL_API_SQLGETCONNECTOPTION, + en_SetStmtOption = SQL_API_SQLSETSTMTOPTION, + en_GetStmtOption = SQL_API_SQLGETSTMTOPTION, + + en_AllocStmt = SQL_API_SQLALLOCSTMT, + en_Prepare = SQL_API_SQLPREPARE, + en_BindParameter = SQL_API_SQLBINDPARAMETER, + en_ParamOptions = SQL_API_SQLPARAMOPTIONS, + en_GetCursorName = SQL_API_SQLGETCURSORNAME, + en_SetCursorName = SQL_API_SQLSETCURSORNAME, + en_SetScrollOptions = SQL_API_SQLSETSCROLLOPTIONS, + en_SetParam = SQL_API_SQLSETPARAM, + + en_Execute = SQL_API_SQLEXECUTE, + en_ExecDirect = SQL_API_SQLEXECDIRECT, + en_NativeSql = SQL_API_SQLNATIVESQL, + en_DescribeParam = SQL_API_SQLDESCRIBEPARAM, + en_NumParams = SQL_API_SQLNUMPARAMS, + en_ParamData = SQL_API_SQLPARAMDATA, + en_PutData = SQL_API_SQLPUTDATA, + + en_RowCount = SQL_API_SQLROWCOUNT, + en_NumResultCols = SQL_API_SQLNUMRESULTCOLS, + en_DescribeCol = SQL_API_SQLDESCRIBECOL, + en_ColAttributes = SQL_API_SQLCOLATTRIBUTES, + en_BindCol = SQL_API_SQLBINDCOL, + en_Fetch = SQL_API_SQLFETCH, + en_ExtendedFetch = SQL_API_SQLEXTENDEDFETCH, + en_GetData = SQL_API_SQLGETDATA, + en_SetPos = SQL_API_SQLSETPOS, + en_MoreResults = SQL_API_SQLMORERESULTS, + en_Error = SQL_API_SQLERROR, + + en_ColumnPrivileges = SQL_API_SQLCOLUMNPRIVILEGES, + en_Columns = SQL_API_SQLCOLUMNS, + en_ForeignKeys = SQL_API_SQLFOREIGNKEYS, + en_PrimaryKeys = SQL_API_SQLPRIMARYKEYS, + en_ProcedureColumns = SQL_API_SQLPROCEDURECOLUMNS, + en_Procedures = SQL_API_SQLPROCEDURES, + en_SpecialColumns = SQL_API_SQLSPECIALCOLUMNS, + en_Statistics = SQL_API_SQLSTATISTICS, + en_TablePrivileges = SQL_API_SQLTABLEPRIVILEGES, + en_Tables = SQL_API_SQLTABLES, + + en_FreeStmt = SQL_API_SQLFREESTMT, + en_Cancel = SQL_API_SQLCANCEL, + en_Transact = SQL_API_SQLTRANSACT, + + en_Disconnect = SQL_API_SQLDISCONNECT, + en_FreeConnect = SQL_API_SQLFREECONNECT, + en_FreeEnv = SQL_API_SQLFREEENV, + + en_NullProc = SYSERR }; -typedef struct { - int type; /* must be 1st field */ +typedef struct { + int type; /* must be 1st field */ - HENV henv; /* driver's env list */ - HDBC hdbc; /* driver's dbc list */ - HERR herr; /* err list */ - int state; + HENV henv; /* driver's env list */ + HDBC hdbc; /* driver's dbc list */ + HERR herr; /* err list */ + int state; } GENV_t; -typedef struct { - HENV next; /* next attached env handle */ - int refcount; /* Driver's bookkeeping reference count */ - HPROC dllproc_tab[SQL_EXT_API_LAST + 1]; /* driver api calls */ +typedef struct { + HENV next; /* next attached env handle */ + int refcount; /* Driver's bookkeeping reference count */ + HPROC dllproc_tab[SQL_EXT_API_LAST + 1]; /* driver api calls */ - HENV dhenv; /* driver env handle */ - HDLL hdll; /* drvier share library handle */ + HENV dhenv; /* driver env handle */ + HDLL hdll; /* driver share library handle */ } ENV_t; /* Note: * - * - ODBC applications only know about global environment handle, + * - ODBC applications only know about global environment handle, * a void pointer points to a GENV_t object. There is only one * this object per process(however, to make the library reentrant, - * we still keep this object on heap). Applications only know + * we still keep this object on heap). Applications only know * address of this object and needn't care about its detail. * * - ODBC driver manager knows about instance environment handles, @@ -120,6 +120,6 @@ typedef struct { * * - Applications can get driver's environment object handle by * SQLGetInfo() with fInfoType equals to SQL_DRIVER_HENV - */ + */ #endif diff --git a/src/iodbc/herr.c b/src/iodbc/herr.c index 9c299e6597..b860b834b0 100644 --- a/src/iodbc/herr.c +++ b/src/iodbc/herr.c @@ -1,6 +1,6 @@ /** Error stack management functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,336 +31,336 @@ #include #include -static HERR _iodbcdm_popsqlerr( HERR herr ) +static HERR _iodbcdm_popsqlerr( HERR herr ) { - sqlerr_t* list = (sqlerr_t*)herr; - sqlerr_t* next; + sqlerr_t* list = (sqlerr_t*)herr; + sqlerr_t* next; + + if( herr == SQL_NULL_HERR ) + { + return herr; + } - if( herr == SQL_NULL_HERR ) - { - return herr; - } - - next = list->next; + next = list->next; - MEM_FREE (list); + MEM_FREE (list); - return next; + return next; } -void _iodbcdm_freesqlerrlist( HERR herrlist ) +void _iodbcdm_freesqlerrlist( HERR herrlist ) { - HERR list; + HERR list; - for(list = herrlist; list!= 0; ) - { - list = _iodbcdm_popsqlerr(list); - } + for(list = herrlist; list!= 0; ) + { + list = _iodbcdm_popsqlerr(list); + } } -HERR _iodbcdm_pushsqlerr ( - HERR herr, - sqlstcode_t code, - char* msg ) +HERR _iodbcdm_pushsqlerr ( + HERR herr, + sqlstcode_t code, + char* msg ) { - sqlerr_t* ebuf; - sqlerr_t* perr = (sqlerr_t*)herr; - int idx = 0; - - if(herr != SQL_NULL_HERR ) - { - idx = perr->idx + 1; - } - - if( idx == 64 ) - /* over wirte the top entry to prevent error stack blow out */ - { - perr->code = code; - perr->msg = msg; - - return herr; - } - - ebuf = (sqlerr_t*)MEM_ALLOC (sizeof(sqlerr_t)); - - if( ebuf == NULL ) - { - return NULL; - } - - ebuf->msg = msg; - ebuf->code = code; - ebuf->idx = idx; - ebuf->next = (sqlerr_t*)herr; - - return (HERR)ebuf; + sqlerr_t* ebuf; + sqlerr_t* perr = (sqlerr_t*)herr; + int idx = 0; + + if(herr != SQL_NULL_HERR ) + { + idx = perr->idx + 1; + } + + if( idx == 64 ) + /* over wirte the top entry to prevent error stack blow out */ + { + perr->code = code; + perr->msg = msg; + + return herr; + } + + ebuf = (sqlerr_t*)MEM_ALLOC (sizeof(sqlerr_t)); + + if( ebuf == NULL ) + { + return NULL; + } + + ebuf->msg = msg; + ebuf->code = code; + ebuf->idx = idx; + ebuf->next = (sqlerr_t*)herr; + + return (HERR)ebuf; } -static char FAR* _iodbcdm_getsqlstate ( - HERR herr, - void FAR* tab ) +static char FAR* _iodbcdm_getsqlstate ( + HERR herr, + void FAR* tab ) { - sqlerr_t* perr = (sqlerr_t*)herr; - sqlerrmsg_t* ptr; - - if( herr == SQL_NULL_HERR || tab == NULL ) - { - return (char FAR*)NULL; - } - - for( ptr = tab; - ptr->code != en_sqlstat_total; - ptr++ ) - { - if(ptr->code == perr->code) - { - return (char FAR*)(ptr->stat); - } - } - - return (char FAR*)NULL; + sqlerr_t* perr = (sqlerr_t*)herr; + sqlerrmsg_t* ptr; + + if( herr == SQL_NULL_HERR || tab == NULL ) + { + return (char FAR*)NULL; + } + + for( ptr = tab; + ptr->code != en_sqlstat_total; + ptr++ ) + { + if(ptr->code == perr->code) + { + return (char FAR*)(ptr->stat); + } + } + + return (char FAR*)NULL; } -static char FAR* _iodbcdm_getsqlerrmsg( - HERR herr, - void FAR* errtab ) +static char FAR* _iodbcdm_getsqlerrmsg( + HERR herr, + void FAR* errtab ) { sqlerr_t* perr = (sqlerr_t*)herr; - sqlerrmsg_t* ptr; + sqlerrmsg_t* ptr; if( herr == SQL_NULL_HERR ) { return NULL; } - if( perr->msg == NULL && errtab == NULL ) - { - return NULL; - } - - if( perr->msg != NULL ) - { - return perr->msg; - } - - for( ptr = (sqlerrmsg_t*)errtab; - ptr->code != en_sqlstat_total; - ptr++ ) - { - if( ptr->code == perr->code ) - { - return (char FAR*)ptr->msg; - } - } - - return (char FAR*)NULL; + if( perr->msg == NULL && errtab == NULL ) + { + return NULL; + } + + if( perr->msg != NULL ) + { + return perr->msg; + } + + for( ptr = (sqlerrmsg_t*)errtab; + ptr->code != en_sqlstat_total; + ptr++ ) + { + if( ptr->code == perr->code ) + { + return (char FAR*)ptr->msg; + } + } + + return (char FAR*)NULL; } -RETCODE SQL_API SQLError ( - HENV henv, - HDBC hdbc, - HSTMT hstmt, - UCHAR FAR* szSqlstate, - SDWORD FAR* pfNativeError, - UCHAR FAR* szErrorMsg, - SWORD cbErrorMsgMax, - SWORD FAR* pcbErrorMsg ) +RETCODE SQL_API SQLError ( + HENV henv, + HDBC hdbc, + HSTMT hstmt, + UCHAR FAR* szSqlstate, + SDWORD FAR* pfNativeError, + UCHAR FAR* szErrorMsg, + SWORD cbErrorMsgMax, + SWORD FAR* pcbErrorMsg ) { - GENV_t FAR* genv = (GENV_t FAR*) henv; - DBC_t FAR* pdbc = (DBC_t FAR*) hdbc; - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HDBC thdbc; - - HENV dhenv = SQL_NULL_HENV; - HDBC dhdbc = SQL_NULL_HDBC; - HSTMT dhstmt = SQL_NULL_HSTMT; - - HERR herr = SQL_NULL_HERR; - HPROC hproc = SQL_NULL_HPROC; - - char FAR* errmsg = NULL; - char FAR* ststr = NULL; - - int handle = 0; - RETCODE retcode = SQL_SUCCESS; - - if( hstmt != SQL_NULL_HSTMT ) /* retrive stmt err */ - { - herr = pstmt->herr; - thdbc = pstmt->hdbc; - - if( thdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - hproc = _iodbcdm_getproc( thdbc, en_Error ); - dhstmt = pstmt->dhstmt; - handle = 3; - } - else if( hdbc != SQL_NULL_HDBC ) /* retrive dbc err */ - { - herr = pdbc->herr; - thdbc = hdbc; - if( thdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - hproc = _iodbcdm_getproc( thdbc, en_Error ); - dhdbc = pdbc->dhdbc; - handle = 2; - - if( herr == SQL_NULL_HERR - && pdbc->henv == SQL_NULL_HENV ) - { - return SQL_NO_DATA_FOUND; - } - } - else if( henv != SQL_NULL_HENV ) /* retrive env err */ - { - herr = genv->herr; - - /* Drivers shouldn't push error message - * on envoriment handle */ - - if( herr == SQL_NULL_HERR ) - { - return SQL_NO_DATA_FOUND; - } - - handle = 1; - } - else - { - return SQL_INVALID_HANDLE; - } - - if( szErrorMsg != NULL ) - { - if( cbErrorMsgMax < 0 - || cbErrorMsgMax > SQL_MAX_MESSAGE_LENGTH - 1 ) - { - return SQL_ERROR; - /* SQLError() doesn't post error for itself */ - } - } - - if( herr == SQL_NULL_HERR ) /* no err on drv mng */ - { - /* call driver */ - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( thdbc, retcode, hproc, en_Error, ( - dhenv, dhdbc, dhstmt, - szSqlstate, pfNativeError, - szErrorMsg, cbErrorMsgMax, pcbErrorMsg) ) + GENV_t FAR* genv = (GENV_t FAR*) henv; + DBC_t FAR* pdbc = (DBC_t FAR*) hdbc; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HDBC thdbc; + + HENV dhenv = SQL_NULL_HENV; + HDBC dhdbc = SQL_NULL_HDBC; + HSTMT dhstmt = SQL_NULL_HSTMT; + + HERR herr = SQL_NULL_HERR; + HPROC hproc = SQL_NULL_HPROC; + + char FAR* errmsg = NULL; + char FAR* ststr = NULL; + + int handle = 0; + RETCODE retcode = SQL_SUCCESS; + + if( hstmt != SQL_NULL_HSTMT ) /* retrive stmt err */ + { + herr = pstmt->herr; + thdbc = pstmt->hdbc; + + if( thdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + hproc = _iodbcdm_getproc( thdbc, en_Error ); + dhstmt = pstmt->dhstmt; + handle = 3; + } + else if( hdbc != SQL_NULL_HDBC ) /* retrive dbc err */ + { + herr = pdbc->herr; + thdbc = hdbc; + if( thdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + hproc = _iodbcdm_getproc( thdbc, en_Error ); + dhdbc = pdbc->dhdbc; + handle = 2; + + if( herr == SQL_NULL_HERR + && pdbc->henv == SQL_NULL_HENV ) + { + return SQL_NO_DATA_FOUND; + } + } + else if( henv != SQL_NULL_HENV ) /* retrive env err */ + { + herr = genv->herr; + + /* Drivers shouldn't push error message + * on envoriment handle */ + + if( herr == SQL_NULL_HERR ) + { + return SQL_NO_DATA_FOUND; + } + + handle = 1; + } + else + { + return SQL_INVALID_HANDLE; + } + + if( szErrorMsg != NULL ) + { + if( cbErrorMsgMax < 0 + || cbErrorMsgMax > SQL_MAX_MESSAGE_LENGTH - 1 ) + { + return SQL_ERROR; + /* SQLError() doesn't post error for itself */ + } + } + + if( herr == SQL_NULL_HERR ) /* no err on drv mng */ + { + /* call driver */ + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( thdbc, retcode, hproc, en_Error, ( + dhenv, dhdbc, dhstmt, + szSqlstate, pfNativeError, + szErrorMsg, cbErrorMsgMax, pcbErrorMsg) ) #if 0 - retcode = hproc(dhenv, dhdbc, dhstmt, - szSqlstate, pfNativeError, - szErrorMsg, cbErrorMsgMax, pcbErrorMsg); + retcode = hproc(dhenv, dhdbc, dhstmt, + szSqlstate, pfNativeError, + szErrorMsg, cbErrorMsgMax, pcbErrorMsg); #endif - return retcode; - } - - if( szSqlstate != NULL ) - { - int len; - - /* get sql state string */ - ststr = (char FAR*)_iodbcdm_getsqlstate( herr, - (void FAR*)sqlerrmsg_tab ); - - if( ststr == NULL) - { - len = 0; - } - else - { - len = (int)STRLEN(ststr); - } - - STRNCPY ( szSqlstate, ststr, len ); - szSqlstate[len] = 0; - /* buffer size of szSqlstate is not checked. Applications - * suppose provide enough ( not less than 6 bytes ) buffer - * or NULL for it. - */ - } - - if( pfNativeError != NULL ) - { - /* native error code is specific to data source */ - *pfNativeError = (SDWORD)0L; - } - - if( szErrorMsg == NULL || cbErrorMsgMax == 0 ) - { - if( pcbErrorMsg != NULL ) - { - *pcbErrorMsg = (SWORD)0; - } - } - else - { - int len; - char msgbuf[256] = { '\0' }; - - /* get sql state message */ - errmsg = _iodbcdm_getsqlerrmsg(herr, - (void FAR*)sqlerrmsg_tab); - - if(errmsg == NULL) - { - errmsg = (char FAR*)""; - } - - sprintf(msgbuf, "%s%s", sqlerrhd, errmsg); - - len = STRLEN( msgbuf ); - - if( len < cbErrorMsgMax - 1 ) - { - retcode = SQL_SUCCESS; - } - else - { - len = cbErrorMsgMax - 1; - retcode = SQL_SUCCESS_WITH_INFO; - /* and not posts error for itself */ - } - - STRNCPY((char*)szErrorMsg, msgbuf, len); - szErrorMsg[len] = 0; - - if( pcbErrorMsg != NULL) - { - *pcbErrorMsg = (SWORD)len; - } - } - - switch(handle) /* free this err */ - { - case 1: - genv->herr = _iodbcdm_popsqlerr(genv->herr); - break; - - case 2: - pdbc->herr = _iodbcdm_popsqlerr(pdbc->herr); - break; - - case 3: - pstmt->herr= _iodbcdm_popsqlerr(pstmt->herr); - break; - - default: - break; - } - - return retcode; + return retcode; + } + + if( szSqlstate != NULL ) + { + int len; + + /* get sql state string */ + ststr = (char FAR*)_iodbcdm_getsqlstate( herr, + (void FAR*)sqlerrmsg_tab ); + + if( ststr == NULL) + { + len = 0; + } + else + { + len = (int)STRLEN(ststr); + } + + STRNCPY ( szSqlstate, ststr, len ); + szSqlstate[len] = 0; + /* buffer size of szSqlstate is not checked. Applications + * suppose provide enough ( not less than 6 bytes ) buffer + * or NULL for it. + */ + } + + if( pfNativeError != NULL ) + { + /* native error code is specific to data source */ + *pfNativeError = (SDWORD)0L; + } + + if( szErrorMsg == NULL || cbErrorMsgMax == 0 ) + { + if( pcbErrorMsg != NULL ) + { + *pcbErrorMsg = (SWORD)0; + } + } + else + { + int len; + char msgbuf[256] = { '\0' }; + + /* get sql state message */ + errmsg = _iodbcdm_getsqlerrmsg(herr, + (void FAR*)sqlerrmsg_tab); + + if(errmsg == NULL) + { + errmsg = (char FAR*)""; + } + + sprintf(msgbuf, "%s%s", sqlerrhd, errmsg); + + len = STRLEN( msgbuf ); + + if( len < cbErrorMsgMax - 1 ) + { + retcode = SQL_SUCCESS; + } + else + { + len = cbErrorMsgMax - 1; + retcode = SQL_SUCCESS_WITH_INFO; + /* and not posts error for itself */ + } + + STRNCPY((char*)szErrorMsg, msgbuf, len); + szErrorMsg[len] = 0; + + if( pcbErrorMsg != NULL) + { + *pcbErrorMsg = (SWORD)len; + } + } + + switch(handle) /* free this err */ + { + case 1: + genv->herr = _iodbcdm_popsqlerr(genv->herr); + break; + + case 2: + pdbc->herr = _iodbcdm_popsqlerr(pdbc->herr); + break; + + case 3: + pstmt->herr= _iodbcdm_popsqlerr(pstmt->herr); + break; + + default: + break; + } + + return retcode; } diff --git a/src/iodbc/herr.ci b/src/iodbc/herr.ci index d502850933..b9dbe0ba75 100644 --- a/src/iodbc/herr.ci +++ b/src/iodbc/herr.ci @@ -1,98 +1,98 @@ static const sqlerrmsg_t sqlerrmsg_tab[] = { - en_00000, "00000", "", - en_01000, "01000", "General warning", - en_01002, "01002", "Disconnect error", - en_01004, "01004", "Data truncated", - en_01006, "01006", "Privilege not revoked", - en_01S00, "01S00", "Invalid connection string attribute", - en_01S01, "01S01", "Error in row", - en_01S02, "01S02", "Optional value changed", - en_01S03, "01S03", "No rows updated or deleted", - en_01S04, "01S04", "More than one row updated or deleted", - en_07001, "07001", "Wrong number of parameters", - en_07006, "07006", "Restricted data type attribute violation", - en_08001, "08001", "Unable to connect to data source", - en_08002, "08002", "Connection in use", - en_08003, "08003", "Connect not open", - en_08004, "08004", "Data source rejected establishment of connection", - en_08007, "08007", "Connection failure during transaction", - en_08S01, "08S01", "Communication link failure", - en_21S01, "21S01", "Insert value list does not match", - en_21S02, "21S02", "Degree of derived table does not match column list", - en_22001, "22001", "String data right truncation", - en_22003, "22003", "Numeric value out of range", - en_22005, "22005", "Error in assignment", - en_22008, "22008", "Datetime field overflow", - en_22012, "22012", "Division by zero", - en_22026, "22026", "String data, length mismatch", - en_23000, "23000", "Integrity constraint violation", - en_24000, "24000", "Invalid cursor state", - en_25000, "25000", "Invalid transaction state", - en_28000, "28000", "Invalid authorization specification", - en_34000, "34000", "Invalid cursor name", - en_37000, "37000", "Syntex error or access violation", - en_3C000, "3C000", "Duplicate cursor name", - en_40001, "40001", "Serialization failure", - en_42000, "42000", "Syntax error or access violation", - en_70100, "70100", "Operation aborted", - en_IM001, "IM001", "Driver does not support this function", - en_IM002, "IM002", "Data source name not found and no default " - "driver specified. Driver could not be loaded", - en_IM003, "IM003", "Specified driver could not be loaded", - en_IM004, "IM004", "Driver's SQLAllocEnv() failed", - en_IM005, "IM005", "Driver's SQLAllocConnect() failed", - en_IM006, "IM006", "Driver's SQLSetConnectOption failed", - en_IM007, "IM007", "No data source or driver specified, dialog prohibited", - en_IM008, "IM008", "Dialog failed", - en_IM009, "IM009", "Unable to load translation DLL", - en_IM010, "IM010", "Data source name too long", - en_IM011, "IM011", "Driver name too long", - en_IM012, "IM012", "DRIVER keyword syntax error", - en_IM013, "IM013", "Trace file error", - en_IM014, "IM014", "Try to change tracing file while tracing is on", - en_S0001, "S0001", "Base table or view already exists", - en_S0002, "S0002", "Base table not found", - en_S0011, "S0011", "Index already exists", - en_S0012, "S0012", "Index not found", - en_S0021, "S0021", "Column already exists", - en_S0022, "S0022", "Column not found", - en_S0023, "S0023", "No default for column", - en_S1000, "S1000", "General error", - en_S1001, "S1001", "Memory allocation failure", - en_S1002, "S1002", "Invalid column number", - en_S1003, "S1003", "Program type out of range", - en_S1004, "S1004", "SQL data type out of range", - en_S1008, "S1008", "Operation canceled", - en_S1009, "S1009", "Invalid argument value", - en_S1010, "S1010", "Function sequence error", - en_S1011, "S1011", "Operation invalid at this time", - en_S1012, "S1012", "Invalid transaction operation code specified", - en_S1015, "S1015", "No cursor name available", - en_S1090, "S1090", "Invalid string or buffer length", - en_S1091, "S1091", "Descriptor type out of range", - en_S1092, "S1092", "Option type out of range", - en_S1093, "S1093", "Invalid parameter", - en_S1094, "S1094", "Invalid scale value", - en_S1095, "S1095", "Function type out of range", - en_S1096, "S1096", "Information type out of range", - en_S1097, "S1097", "Column type out of range", - en_S1098, "S1098", "Scope type out of range", - en_S1099, "S1099", "Nullable type out of range", - en_S1100, "S1100", "Uniquenss option type out of range", - en_S1101, "S1101", "Accuracy option type out of range", - en_S1103, "S1103", "Direction option out of range", - en_S1104, "S1104", "Invalid precision value", - en_S1105, "S1105", "Invalid parameter type", - en_S1106, "S1106", "Fetch type out of range", - en_S1107, "S1107", "Row value out of range", - en_S1108, "S1108", "Concurrency option out of range", - en_S1109, "S1109", "Invalid cursor position", - en_S1110, "S1110", "Invalid driver completion", - en_S1111, "S1111", "Invalid bookmark value", - en_S1C00, "S1C00", "Driver not capable", - en_S1T00, "S1T00", "Timeout expired", - en_sqlstat_total, NULL, NULL + en_00000, "00000", "", + en_01000, "01000", "General warning", + en_01002, "01002", "Disconnect error", + en_01004, "01004", "Data truncated", + en_01006, "01006", "Privilege not revoked", + en_01S00, "01S00", "Invalid connection string attribute", + en_01S01, "01S01", "Error in row", + en_01S02, "01S02", "Optional value changed", + en_01S03, "01S03", "No rows updated or deleted", + en_01S04, "01S04", "More than one row updated or deleted", + en_07001, "07001", "Wrong number of parameters", + en_07006, "07006", "Restricted data type attribute violation", + en_08001, "08001", "Unable to connect to data source", + en_08002, "08002", "Connection in use", + en_08003, "08003", "Connect not open", + en_08004, "08004", "Data source rejected establishment of connection", + en_08007, "08007", "Connection failure during transaction", + en_08S01, "08S01", "Communication link failure", + en_21S01, "21S01", "Insert value list does not match", + en_21S02, "21S02", "Degree of derived table does not match column list", + en_22001, "22001", "String data right truncation", + en_22003, "22003", "Numeric value out of range", + en_22005, "22005", "Error in assignment", + en_22008, "22008", "Datetime field overflow", + en_22012, "22012", "Division by zero", + en_22026, "22026", "String data, length mismatch", + en_23000, "23000", "Integrity constraint violation", + en_24000, "24000", "Invalid cursor state", + en_25000, "25000", "Invalid transaction state", + en_28000, "28000", "Invalid authorization specification", + en_34000, "34000", "Invalid cursor name", + en_37000, "37000", "Syntex error or access violation", + en_3C000, "3C000", "Duplicate cursor name", + en_40001, "40001", "Serialization failure", + en_42000, "42000", "Syntax error or access violation", + en_70100, "70100", "Operation aborted", + en_IM001, "IM001", "Driver does not support this function", + en_IM002, "IM002", "Data source name not found and no default " + "driver specified. Driver could not be loaded", + en_IM003, "IM003", "Specified driver could not be loaded", + en_IM004, "IM004", "Driver's SQLAllocEnv() failed", + en_IM005, "IM005", "Driver's SQLAllocConnect() failed", + en_IM006, "IM006", "Driver's SQLSetConnectOption failed", + en_IM007, "IM007", "No data source or driver specified, dialog prohibited", + en_IM008, "IM008", "Dialog failed", + en_IM009, "IM009", "Unable to load translation DLL", + en_IM010, "IM010", "Data source name too long", + en_IM011, "IM011", "Driver name too long", + en_IM012, "IM012", "DRIVER keyword syntax error", + en_IM013, "IM013", "Trace file error", + en_IM014, "IM014", "Try to change tracing file while tracing is on", + en_S0001, "S0001", "Base table or view already exists", + en_S0002, "S0002", "Base table not found", + en_S0011, "S0011", "Index already exists", + en_S0012, "S0012", "Index not found", + en_S0021, "S0021", "Column already exists", + en_S0022, "S0022", "Column not found", + en_S0023, "S0023", "No default for column", + en_S1000, "S1000", "General error", + en_S1001, "S1001", "Memory allocation failure", + en_S1002, "S1002", "Invalid column number", + en_S1003, "S1003", "Program type out of range", + en_S1004, "S1004", "SQL data type out of range", + en_S1008, "S1008", "Operation canceled", + en_S1009, "S1009", "Invalid argument value", + en_S1010, "S1010", "Function sequence error", + en_S1011, "S1011", "Operation invalid at this time", + en_S1012, "S1012", "Invalid transaction operation code specified", + en_S1015, "S1015", "No cursor name available", + en_S1090, "S1090", "Invalid string or buffer length", + en_S1091, "S1091", "Descriptor type out of range", + en_S1092, "S1092", "Option type out of range", + en_S1093, "S1093", "Invalid parameter", + en_S1094, "S1094", "Invalid scale value", + en_S1095, "S1095", "Function type out of range", + en_S1096, "S1096", "Information type out of range", + en_S1097, "S1097", "Column type out of range", + en_S1098, "S1098", "Scope type out of range", + en_S1099, "S1099", "Nullable type out of range", + en_S1100, "S1100", "Uniquenss option type out of range", + en_S1101, "S1101", "Accuracy option type out of range", + en_S1103, "S1103", "Direction option out of range", + en_S1104, "S1104", "Invalid precision value", + en_S1105, "S1105", "Invalid parameter type", + en_S1106, "S1106", "Fetch type out of range", + en_S1107, "S1107", "Row value out of range", + en_S1108, "S1108", "Concurrency option out of range", + en_S1109, "S1109", "Invalid cursor position", + en_S1110, "S1110", "Invalid driver completion", + en_S1111, "S1111", "Invalid bookmark value", + en_S1C00, "S1C00", "Driver not capable", + en_S1T00, "S1T00", "Timeout expired", + en_sqlstat_total, NULL, NULL }; -static char FAR* sqlerrhd = "[iODBC][Driver Manager]"; +static char FAR* sqlerrhd = "[iODBC][Driver Manager]"; diff --git a/src/iodbc/herr.h b/src/iodbc/herr.h index e01941d463..0ab2c1c66e 100644 --- a/src/iodbc/herr.h +++ b/src/iodbc/herr.h @@ -1,125 +1,125 @@ -#ifndef _HERR_H -#define _HERR_H +#ifndef _HERR_H +#define _HERR_H typedef enum { - en_00000 = 0, - en_01000, - en_01002, - en_01004, - en_01006, - en_01S00, - en_01S01, - en_01S02, - en_01S03, - en_01S04, - en_07001, - en_07006, - en_08001, - en_08002, - en_08003, - en_08004, - en_08007, - en_08S01, - en_21S01, - en_21S02, - en_22001, - en_22003, - en_22005, - en_22008, - en_22012, - en_22026, - en_23000, - en_24000, - en_25000, - en_28000, - en_34000, - en_37000, - en_3C000, - en_40001, - en_42000, - en_70100, - en_IM001, - en_IM002, - en_IM003, - en_IM004, - en_IM005, - en_IM006, - en_IM007, - en_IM008, - en_IM009, - en_IM010, - en_IM011, - en_IM012, - en_IM013, - en_IM014, - en_S0001, - en_S0002, - en_S0011, - en_S0012, - en_S0021, - en_S0022, - en_S0023, - en_S1000, - en_S1001, - en_S1002, - en_S1003, - en_S1004, - en_S1008, - en_S1009, - en_S1010, - en_S1011, - en_S1012, - en_S1015, - en_S1090, - en_S1091, - en_S1092, - en_S1093, - en_S1094, - en_S1095, - en_S1096, - en_S1097, - en_S1098, - en_S1099, - en_S1100, - en_S1101, - en_S1103, - en_S1104, - en_S1105, - en_S1106, - en_S1107, - en_S1108, - en_S1109, - en_S1110, - en_S1111, - en_S1C00, - en_S1T00, - en_sqlstat_total + en_00000 = 0, + en_01000, + en_01002, + en_01004, + en_01006, + en_01S00, + en_01S01, + en_01S02, + en_01S03, + en_01S04, + en_07001, + en_07006, + en_08001, + en_08002, + en_08003, + en_08004, + en_08007, + en_08S01, + en_21S01, + en_21S02, + en_22001, + en_22003, + en_22005, + en_22008, + en_22012, + en_22026, + en_23000, + en_24000, + en_25000, + en_28000, + en_34000, + en_37000, + en_3C000, + en_40001, + en_42000, + en_70100, + en_IM001, + en_IM002, + en_IM003, + en_IM004, + en_IM005, + en_IM006, + en_IM007, + en_IM008, + en_IM009, + en_IM010, + en_IM011, + en_IM012, + en_IM013, + en_IM014, + en_S0001, + en_S0002, + en_S0011, + en_S0012, + en_S0021, + en_S0022, + en_S0023, + en_S1000, + en_S1001, + en_S1002, + en_S1003, + en_S1004, + en_S1008, + en_S1009, + en_S1010, + en_S1011, + en_S1012, + en_S1015, + en_S1090, + en_S1091, + en_S1092, + en_S1093, + en_S1094, + en_S1095, + en_S1096, + en_S1097, + en_S1098, + en_S1099, + en_S1100, + en_S1101, + en_S1103, + en_S1104, + en_S1105, + en_S1106, + en_S1107, + en_S1108, + en_S1109, + en_S1110, + en_S1111, + en_S1C00, + en_S1T00, + en_sqlstat_total } sqlstcode_t; -typedef void FAR* HERR; -# define SQL_NULL_HERR ((HERR)NULL) +typedef void FAR* HERR; +# define SQL_NULL_HERR ((HERR)NULL) typedef struct { - sqlstcode_t code; - char FAR* stat; - char FAR* msg; + sqlstcode_t code; + char FAR* stat; + char FAR* msg; } sqlerrmsg_t; -typedef struct sqlerr { - sqlstcode_t code; - int idx; - char FAR* msg; - struct sqlerr* next; +typedef struct sqlerr { + sqlstcode_t code; + int idx; + char FAR* msg; + struct sqlerr* next; } sqlerr_t; -extern void _iodbcdm_freesqlerrlist( HERR herr ); -extern HERR _iodbcdm_pushsqlerr ( HERR list, sqlstcode_t code, char* sysmsg ); +extern void _iodbcdm_freesqlerrlist( HERR herr ); +extern HERR _iodbcdm_pushsqlerr ( HERR list, sqlstcode_t code, char* sysmsg ); -# define PUSHSYSERR(list, msg) \ - list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), 0, (char*)msg ) -# define PUSHSQLERR(list, code) \ - list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), (int)(code), NULL ) - +# define PUSHSYSERR(list, msg) \ + list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), 0, (char*)msg ) +# define PUSHSQLERR(list, code) \ + list = (HERR)_iodbcdm_pushsqlerr( (HERR)(list), (int)(code), NULL ) -#endif /* _SQLERR_H */ + +#endif /* _SQLERR_H */ diff --git a/src/iodbc/hstmt.c b/src/iodbc/hstmt.c index 0aec8ef807..425fe8b2e2 100644 --- a/src/iodbc/hstmt.c +++ b/src/iodbc/hstmt.c @@ -1,6 +1,6 @@ /** Query statement object management functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,572 +27,572 @@ #include <../iodbc/itrace.h> -RETCODE SQL_API SQLAllocStmt ( - HDBC hdbc, - HSTMT FAR* phstmt ) +RETCODE SQL_API SQLAllocStmt ( + HDBC hdbc, + HSTMT FAR* phstmt ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - STMT_t FAR* pstmt = NULL; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode = SQL_SUCCESS; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + STMT_t FAR* pstmt = NULL; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode = SQL_SUCCESS; #if (ODBCVER >= 0x0300) - if( hdbc == SQL_NULL_HDBC - || pdbc->type != SQL_HANDLE_DBC ) + if( hdbc == SQL_NULL_HDBC + || pdbc->type != SQL_HANDLE_DBC ) #else - if( hdbc == SQL_NULL_HDBC ) + if( hdbc == SQL_NULL_HDBC ) #endif - { - return SQL_INVALID_HANDLE; - } - - if( phstmt == NULL ) - { - PUSHSQLERR ( pdbc->herr, en_S1009 ); - - return SQL_ERROR; - } - - /* check state */ - switch( pdbc->state ) - { - case en_dbc_connected: - case en_dbc_hstmt: - break; - - case en_dbc_allocated: - case en_dbc_needdata: - PUSHSQLERR ( pdbc->herr, en_08003 ); - *phstmt = SQL_NULL_HSTMT; - return SQL_ERROR; - - default: - return SQL_INVALID_HANDLE; - } - - pstmt = (STMT_t FAR*)MEM_ALLOC(sizeof(STMT_t)); - - if( pstmt == NULL ) - { - PUSHSQLERR ( pdbc->herr, en_S1001 ); - *phstmt = SQL_NULL_HSTMT; - - return SQL_ERROR; - } + { + return SQL_INVALID_HANDLE; + } + + if( phstmt == NULL ) + { + PUSHSQLERR ( pdbc->herr, en_S1009 ); + + return SQL_ERROR; + } + + /* check state */ + switch( pdbc->state ) + { + case en_dbc_connected: + case en_dbc_hstmt: + break; + + case en_dbc_allocated: + case en_dbc_needdata: + PUSHSQLERR ( pdbc->herr, en_08003 ); + *phstmt = SQL_NULL_HSTMT; + return SQL_ERROR; + + default: + return SQL_INVALID_HANDLE; + } + + pstmt = (STMT_t FAR*)MEM_ALLOC(sizeof(STMT_t)); + + if( pstmt == NULL ) + { + PUSHSQLERR ( pdbc->herr, en_S1001 ); + *phstmt = SQL_NULL_HSTMT; + + return SQL_ERROR; + } #if (ODBCVER >= 0x0300) - pstmt->type = SQL_HANDLE_STMT; + pstmt->type = SQL_HANDLE_STMT; #endif - /* initiate the object */ - pstmt->herr = SQL_NULL_HERR; - pstmt->hdbc = hdbc; - pstmt->state = en_stmt_allocated; - pstmt->cursor_state = en_stmt_cursor_no; - pstmt->prep_state = 0; - pstmt->asyn_on = en_NullProc; - pstmt->need_on = en_NullProc; - - /* call driver's function */ + /* initiate the object */ + pstmt->herr = SQL_NULL_HERR; + pstmt->hdbc = hdbc; + pstmt->state = en_stmt_allocated; + pstmt->cursor_state = en_stmt_cursor_no; + pstmt->prep_state = 0; + pstmt->asyn_on = en_NullProc; + pstmt->need_on = en_NullProc; + + /* call driver's function */ #if (ODBCVER >= 0x0300) - hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); - - if( hproc ) - { - CALL_DRIVER ( pstmt->hdbc, hdbc, retcode, hproc, - en_AllocHandle, ( - SQL_HANDLE_STMT, - pdbc->dhdbc, - &(pstmt->dhstmt) ) ) - } - else + hproc = _iodbcdm_getproc( hdbc, en_AllocHandle ); + + if( hproc ) + { + CALL_DRIVER ( pstmt->hdbc, hdbc, retcode, hproc, + en_AllocHandle, ( + SQL_HANDLE_STMT, + pdbc->dhdbc, + &(pstmt->dhstmt) ) ) + } + else #endif - { - hproc = _iodbcdm_getproc( hdbc, en_AllocStmt ); + { + hproc = _iodbcdm_getproc( hdbc, en_AllocStmt ); - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - *phstmt = SQL_NULL_HSTMT; - MEM_FREE ( pstmt ); + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + *phstmt = SQL_NULL_HSTMT; + MEM_FREE ( pstmt ); - return SQL_ERROR; - } + return SQL_ERROR; + } - CALL_DRIVER ( hdbc, retcode, hproc, en_AllocStmt, ( - pdbc->dhdbc, &(pstmt->dhstmt) ) ) - } + CALL_DRIVER ( hdbc, retcode, hproc, en_AllocStmt, ( + pdbc->dhdbc, &(pstmt->dhstmt) ) ) + } - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - *phstmt = SQL_NULL_HSTMT; - MEM_FREE ( pstmt ); + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + *phstmt = SQL_NULL_HSTMT; + MEM_FREE ( pstmt ); - return retcode; - } + return retcode; + } - /* insert into list */ - pstmt->next = pdbc->hstmt; - pdbc->hstmt = pstmt; + /* insert into list */ + pstmt->next = pdbc->hstmt; + pdbc->hstmt = pstmt; - *phstmt = (HSTMT)pstmt; + *phstmt = (HSTMT)pstmt; - /* state transition */ - pdbc->state = en_dbc_hstmt; + /* state transition */ + pdbc->state = en_dbc_hstmt; - return SQL_SUCCESS; + return SQL_SUCCESS; } RETCODE _iodbcdm_dropstmt( HSTMT hstmt ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - STMT_t FAR* tpstmt; - DBC_t FAR* pdbc; - - if( hstmt == SQL_NULL_HSTMT ) - { - return SQL_INVALID_HANDLE; - } - - pdbc = (DBC_t FAR*)(pstmt->hdbc); - - for(tpstmt = (STMT_t FAR*)pdbc->hstmt; - tpstmt != NULL; - tpstmt = tpstmt->next ) - { - if(tpstmt == pstmt) - { - pdbc->hstmt = (HSTMT)pstmt->next; - break; - } - - if(tpstmt->next == pstmt) - { - tpstmt->next = pstmt->next; - break; - } - } - - if( tpstmt == NULL ) - { - return SQL_INVALID_HANDLE; - } - - _iodbcdm_freesqlerrlist(pstmt->herr); - MEM_FREE(hstmt); - - return SQL_SUCCESS; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + STMT_t FAR* tpstmt; + DBC_t FAR* pdbc; + + if( hstmt == SQL_NULL_HSTMT ) + { + return SQL_INVALID_HANDLE; + } + + pdbc = (DBC_t FAR*)(pstmt->hdbc); + + for(tpstmt = (STMT_t FAR*)pdbc->hstmt; + tpstmt != NULL; + tpstmt = tpstmt->next ) + { + if(tpstmt == pstmt) + { + pdbc->hstmt = (HSTMT)pstmt->next; + break; + } + + if(tpstmt->next == pstmt) + { + tpstmt->next = pstmt->next; + break; + } + } + + if( tpstmt == NULL ) + { + return SQL_INVALID_HANDLE; + } + + _iodbcdm_freesqlerrlist(pstmt->herr); + MEM_FREE(hstmt); + + return SQL_SUCCESS; } -RETCODE SQL_API SQLFreeStmt ( - HSTMT hstmt, - UWORD fOption ) +RETCODE SQL_API SQLFreeStmt ( + HSTMT hstmt, + UWORD fOption ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; -/* STMT_t FAR* tpstmt; */ - DBC_t FAR* pdbc; - - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - pdbc = (DBC_t FAR*)(pstmt->hdbc); - - /* check option */ - switch( fOption ) - { - case SQL_DROP: - case SQL_CLOSE: - case SQL_UNBIND: - case SQL_RESET_PARAMS: - break; - - default: - PUSHSQLERR ( pstmt->herr, en_S1092 ); - return SQL_ERROR; - } - - /* check state */ - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - hproc = SQL_NULL_HPROC; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + STMT_t FAR* tpstmt; + DBC_t FAR* pdbc; + + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + pdbc = (DBC_t FAR*)(pstmt->hdbc); + + /* check option */ + switch( fOption ) + { + case SQL_DROP: + case SQL_CLOSE: + case SQL_UNBIND: + case SQL_RESET_PARAMS: + break; + + default: + PUSHSQLERR ( pstmt->herr, en_S1092 ); + return SQL_ERROR; + } + + /* check state */ + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + hproc == SQL_NULL_HPROC; #if (ODBCVER >= 0x0300) - if( fOption == SQL_DROP ) - { - hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeHandle ); - - if( hproc ) - { - CALL_DRIVER( pstmt->hdbc, retcode, hproc, en_FreeHandle, ( - SQL_HANDLE_STMT, pstmt->dhstmt ) - } - } + if( fOption == SQL_DROP ) + { + hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeHandle ); + + if( hproc ) + { + CALL_DRIVER( pstmt->hdbc, retcode, hproc, en_FreeHandle, ( + SQL_HANDLE_STMT, pstmt->dhstmt ) + } + } #endif - if( hproc == SQL_NULL_HPROC ) - { - hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeStmt); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_FreeStmt, ( - pstmt->dhstmt, fOption) ) - } - - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - return retcode; - } - - /* state transition */ - switch( fOption ) - { - case SQL_DROP: - /* delet this object (ignore return) */ - _iodbcdm_dropstmt( hstmt ); - break; - - case SQL_CLOSE: - pstmt->cursor_state = en_stmt_cursor_no; - /* This means cursor name set by - * SQLSetCursorName() call will also - * be erased. - */ - - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - break; - - case en_stmt_executed: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( pstmt->prep_state ) - { - pstmt->state = - en_stmt_prepared; - } - else - { - pstmt->state = - en_stmt_allocated; - } - break; - - default: - break; - } - break; - - case SQL_UNBIND: - case SQL_RESET_PARAMS: - default: - break; - } - - return retcode; + if( hproc == SQL_NULL_HPROC ) + { + hproc = _iodbcdm_getproc( pstmt->hdbc, en_FreeStmt); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_FreeStmt, ( + pstmt->dhstmt, fOption) ) + } + + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + return retcode; + } + + /* state transition */ + switch( fOption ) + { + case SQL_DROP: + /* delet this object (ignore return) */ + _iodbcdm_dropstmt( hstmt ); + break; + + case SQL_CLOSE: + pstmt->cursor_state = en_stmt_cursor_no; + /* This means cursor name set by + * SQLSetCursorName() call will also + * be erased. + */ + + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + break; + + case en_stmt_executed: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( pstmt->prep_state ) + { + pstmt->state = + en_stmt_prepared; + } + else + { + pstmt->state = + en_stmt_allocated; + } + break; + + default: + break; + } + break; + + case SQL_UNBIND: + case SQL_RESET_PARAMS: + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLSetStmtOption ( - HSTMT hstmt, - UWORD fOption, - UDWORD vParam ) +RETCODE SQL_API SQLSetStmtOption ( + HSTMT hstmt, + UWORD fOption, + UDWORD vParam ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - int sqlstat = en_00000; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check option */ - if(/* fOption < SQL_STMT_OPT_MIN || */ - fOption > SQL_STMT_OPT_MAX ) - { - PUSHSQLERR ( pstmt->herr, en_S1092 ); - - return SQL_ERROR; - } - - if( fOption == SQL_CONCURRENCY - || fOption == SQL_CURSOR_TYPE - || fOption == SQL_SIMULATE_CURSOR - || fOption == SQL_USE_BOOKMARKS ) - { - if( pstmt->asyn_on != en_NullProc ) - { - if( pstmt->prep_state ) - { - sqlstat = en_S1011; - } - } - else - { - switch( pstmt->state ) - { - case en_stmt_prepared: - sqlstat = en_S1011; - break; - - case en_stmt_executed: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - sqlstat = en_24000; - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - if( pstmt->prep_state ) - { - sqlstat = en_S1011; - } - break; - - default: - break; - } - } - } - else - { - if( pstmt->asyn_on != en_NullProc ) - { - if( ! pstmt->prep_state ) - { - sqlstat = en_S1010; - } - } - else - { - if( pstmt->state >= en_stmt_needdata ) - { - sqlstat = en_S1010; - } - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetStmtOption ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetStmtOption, ( - pstmt->dhstmt, fOption, vParam ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + int sqlstat = en_00000; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check option */ + if(/* fOption < SQL_STMT_OPT_MIN || */ + fOption > SQL_STMT_OPT_MAX ) + { + PUSHSQLERR ( pstmt->herr, en_S1092 ); + + return SQL_ERROR; + } + + if( fOption == SQL_CONCURRENCY + || fOption == SQL_CURSOR_TYPE + || fOption == SQL_SIMULATE_CURSOR + || fOption == SQL_USE_BOOKMARKS ) + { + if( pstmt->asyn_on != en_NullProc ) + { + if( pstmt->prep_state ) + { + sqlstat = en_S1011; + } + } + else + { + switch( pstmt->state ) + { + case en_stmt_prepared: + sqlstat = en_S1011; + break; + + case en_stmt_executed: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + sqlstat = en_24000; + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + if( pstmt->prep_state ) + { + sqlstat = en_S1011; + } + break; + + default: + break; + } + } + } + else + { + if( pstmt->asyn_on != en_NullProc ) + { + if( ! pstmt->prep_state ) + { + sqlstat = en_S1010; + } + } + else + { + if( pstmt->state >= en_stmt_needdata ) + { + sqlstat = en_S1010; + } + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetStmtOption ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetStmtOption, ( + pstmt->dhstmt, fOption, vParam ) ) #if 0 - retcode = hproc ( pstmt->dhstmt, fOption, vParam ); + retcode = hproc ( pstmt->dhstmt, fOption, vParam ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLGetStmtOption ( - HSTMT hstmt, - UWORD fOption, - PTR pvParam ) +RETCODE SQL_API SQLGetStmtOption ( + HSTMT hstmt, + UWORD fOption, + PTR pvParam ) { - STMT_t FAR* pstmt = (STMT_t*)hstmt; - HPROC hproc; - int sqlstat = en_00000; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check option */ - if( /* fOption < SQL_STMT_OPT_MIN || */ - fOption > SQL_STMT_OPT_MAX ) - { - PUSHSQLERR ( pstmt->herr, en_S1092 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - sqlstat = en_S1010; - } - else - { - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - case en_stmt_executed: - case en_stmt_cursoropen: - if( fOption == SQL_ROW_NUMBER - || fOption == SQL_GET_BOOKMARK ) - { - sqlstat = en_24000; - } - break; - - default: - break; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetStmtOption); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetStmtOption, ( - pstmt->dhstmt, fOption, pvParam ) ) + STMT_t FAR* pstmt = (STMT_t*)hstmt; + HPROC hproc; + int sqlstat = en_00000; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check option */ + if( /* fOption < SQL_STMT_OPT_MIN || */ + fOption > SQL_STMT_OPT_MAX ) + { + PUSHSQLERR ( pstmt->herr, en_S1092 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + sqlstat = en_S1010; + } + else + { + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + case en_stmt_executed: + case en_stmt_cursoropen: + if( fOption == SQL_ROW_NUMBER + || fOption == SQL_GET_BOOKMARK ) + { + sqlstat = en_24000; + } + break; + + default: + break; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_GetStmtOption); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetStmtOption, ( + pstmt->dhstmt, fOption, pvParam ) ) #if 0 - retcode = hproc ( pstmt->dhstmt, fOption, pvParam ); + retcode = hproc ( pstmt->dhstmt, fOption, pvParam ); #endif - - return retcode; + + return retcode; } -RETCODE SQL_API SQLCancel ( HSTMT hstmt ) +RETCODE SQL_API SQLCancel ( HSTMT hstmt ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } - /* check argument */ - /* check state */ + /* check argument */ + /* check state */ - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Cancel ); + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Cancel ); - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Cancel, (pstmt->dhstmt) ) + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Cancel, (pstmt->dhstmt) ) #if 0 - retcode = hproc ( pstmt->dhstmt ); + retcode = hproc ( pstmt->dhstmt ); #endif - /* state transition */ - if( retcode != SQL_SUCCESS - && retcode != SQL_SUCCESS_WITH_INFO ) - { - return retcode; - } - - switch( pstmt->state ) - { - case en_stmt_allocated: - case en_stmt_prepared: - break; - - case en_stmt_executed: - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - } - else - { - pstmt->state = en_stmt_allocated; - } - break; - - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( pstmt->prep_state ) - { - pstmt->state = en_stmt_prepared; - } - else - { - pstmt->state = en_stmt_allocated; - } - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - switch( pstmt->need_on ) - { - case en_ExecDirect: - pstmt->state = en_stmt_allocated; - break; - - case en_Execute: - pstmt->state = en_stmt_prepared; - break; - - case en_SetPos: - pstmt->state = en_stmt_xfetched; - break; - - default: - break; - } - pstmt->need_on = en_NullProc; - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( retcode != SQL_SUCCESS + && retcode != SQL_SUCCESS_WITH_INFO ) + { + return retcode; + } + + switch( pstmt->state ) + { + case en_stmt_allocated: + case en_stmt_prepared: + break; + + case en_stmt_executed: + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + } + else + { + pstmt->state = en_stmt_allocated; + } + break; + + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( pstmt->prep_state ) + { + pstmt->state = en_stmt_prepared; + } + else + { + pstmt->state = en_stmt_allocated; + } + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + switch( pstmt->need_on ) + { + case en_ExecDirect: + pstmt->state = en_stmt_allocated; + break; + + case en_Execute: + pstmt->state = en_stmt_prepared; + break; + + case en_SetPos: + pstmt->state = en_stmt_xfetched; + break; + + default: + break; + } + pstmt->need_on = en_NullProc; + break; + + default: + break; + } + + return retcode; } diff --git a/src/iodbc/hstmt.h b/src/iodbc/hstmt.h index 68403e4603..99e826e5fa 100644 --- a/src/iodbc/hstmt.h +++ b/src/iodbc/hstmt.h @@ -1,48 +1,48 @@ -#ifndef _HSTMT_H -#define _HSTMT_H +#ifndef _HSTMT_H +#define _HSTMT_H -#include <../iodbc/config.h> +#include -#include <../iodbc/isql.h> -#include <../iodbc/isqlext.h> +#include +#include -typedef struct STMT +typedef struct STMT { - int type; /* must be 1st field */ + int type; /* must be 1st field */ - struct STMT* next; + struct STMT* next; - HERR herr; - HDBC hdbc; /* back point to connection object */ - HSTMT dhstmt; /* driver's stmt handle */ + HERR herr; + HDBC hdbc; /* back point to connection object */ + HSTMT dhstmt; /* driver's stmt handle */ - int state; - int cursor_state; - int prep_state; - int asyn_on; /* async executing which odbc call */ - int need_on; /* which call return SQL_NEED_DATA */ + int state; + int cursor_state; + int prep_state; + int asyn_on; /* async executing which odbc call */ + int need_on; /* which call return SQL_NEED_DATA */ } STMT_t; -enum { - en_stmt_allocated = 0, - en_stmt_prepared, - en_stmt_executed, - en_stmt_cursoropen, - en_stmt_fetched, - en_stmt_xfetched, - en_stmt_needdata, /* not call SQLParamData() yet */ - en_stmt_mustput, /* not call SQLPutData() yet */ - en_stmt_canput /* SQLPutData() called */ -}; /* for statement handle state */ - -enum { - en_stmt_cursor_no = 0, - en_stmt_cursor_named, - en_stmt_cursor_opened, - en_stmt_cursor_fetched, - en_stmt_cursor_xfetched -}; /* for statement cursor state */ - -extern RETCODE _iodbcdm_dropstmt(); +enum { + en_stmt_allocated = 0, + en_stmt_prepared, + en_stmt_executed, + en_stmt_cursoropen, + en_stmt_fetched, + en_stmt_xfetched, + en_stmt_needdata, /* not call SQLParamData() yet */ + en_stmt_mustput, /* not call SQLPutData() yet */ + en_stmt_canput /* SQLPutData() called */ +}; /* for statement handle state */ + +enum { + en_stmt_cursor_no = 0, + en_stmt_cursor_named, + en_stmt_cursor_opened, + en_stmt_cursor_fetched, + en_stmt_cursor_xfetched +}; /* for statement cursor state */ + +extern RETCODE _iodbcdm_dropstmt(); #endif diff --git a/src/iodbc/info.c b/src/iodbc/info.c index 600bcc6a3a..34bfdeec64 100644 --- a/src/iodbc/info.c +++ b/src/iodbc/info.c @@ -1,6 +1,6 @@ /** Information functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,363 +30,363 @@ #include #include -RETCODE SQL_API SQLDataSources( - HENV henv, - UWORD fDir, - UCHAR FAR* szDSN, - SWORD cbDSNMax, - SWORD FAR* pcbDSN, - UCHAR FAR* szDesc, - SWORD cbDescMax, - SWORD FAR* pcbDesc ) +RETCODE SQL_API SQLDataSources( + HENV henv, + UWORD fDir, + UCHAR FAR* szDSN, + SWORD cbDSNMax, + SWORD FAR* pcbDSN, + UCHAR FAR* szDesc, + SWORD cbDescMax, + SWORD FAR* pcbDesc ) { - GENV_t FAR* genv = (GENV_t FAR*)henv; - - if( henv == SQL_NULL_HENV ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( cbDSNMax < 0 || cbDescMax < 0 ) - { - PUSHSQLERR ( genv->herr, en_S1090 ); - - return SQL_ERROR; - } - - if( fDir != SQL_FETCH_FIRST - && fDir != SQL_FETCH_NEXT ) - { - PUSHSQLERR ( genv->herr, en_S1103 ); - - return SQL_ERROR; - } - - /*************************/ - - return SQL_NO_DATA_FOUND; -} - -RETCODE SQL_API SQLDrivers( - HENV henv, - UWORD fDir, - UCHAR FAR* szDrvDesc, - SWORD cbDrvDescMax, - SWORD FAR* pcbDrvDesc, - UCHAR FAR* szDrvAttr, - SWORD cbDrvAttrMax, - SWORD FAR* pcbDrvAttr ) + GENV_t FAR* genv = (GENV_t FAR*)henv; + + if( henv == SQL_NULL_HENV ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( cbDSNMax < 0 || cbDescMax < 0 ) + { + PUSHSQLERR ( genv->herr, en_S1090 ); + + return SQL_ERROR; + } + + if( fDir != SQL_FETCH_FIRST + && fDir != SQL_FETCH_NEXT ) + { + PUSHSQLERR ( genv->herr, en_S1103 ); + + return SQL_ERROR; + } + + /*************************/ + + return SQL_SUCCESS; +} + +RETCODE SQL_API SQLDrivers( + HENV henv, + UWORD fDir, + UCHAR FAR* szDrvDesc, + SWORD cbDrvDescMax, + SWORD FAR* pcbDrvDesc, + UCHAR FAR* szDrvAttr, + SWORD cbDrvAttrMax, + SWORD FAR* pcbDrvAttr ) { - GENV_t FAR* genv = (GENV_t FAR*)henv; - - if( henv == SQL_NULL_HENV ) - { - return SQL_INVALID_HANDLE; - } - - if( cbDrvDescMax < 0 - || cbDrvAttrMax < 0 - || cbDrvAttrMax == 1 ) - { - PUSHSQLERR ( genv->herr, en_S1090 ); - - return SQL_ERROR; - } - - if( fDir != SQL_FETCH_FIRST - || fDir != SQL_FETCH_NEXT ) - { - PUSHSQLERR ( genv->herr, en_S1103 ); - - return SQL_ERROR; - } - - /*********************/ - return SQL_SUCCESS; + GENV_t FAR* genv = (GENV_t FAR*)henv; + + if( henv == SQL_NULL_HENV ) + { + return SQL_INVALID_HANDLE; + } + + if( cbDrvDescMax < 0 + || cbDrvAttrMax < 0 + || cbDrvAttrMax == 1 ) + { + PUSHSQLERR ( genv->herr, en_S1090 ); + + return SQL_ERROR; + } + + if( fDir != SQL_FETCH_FIRST + || fDir != SQL_FETCH_NEXT ) + { + PUSHSQLERR ( genv->herr, en_S1103 ); + + return SQL_ERROR; + } + + /*********************/ + return SQL_SUCCESS; } -RETCODE SQL_API SQLGetInfo( - HDBC hdbc, - UWORD fInfoType, - PTR rgbInfoValue, - SWORD cbInfoValueMax, - SWORD FAR* pcbInfoValue ) +RETCODE SQL_API SQLGetInfo( + HDBC hdbc, + UWORD fInfoType, + PTR rgbInfoValue, + SWORD cbInfoValueMax, + SWORD FAR* pcbInfoValue ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - ENV_t FAR* penv; - STMT_t FAR* pstmt = NULL; - STMT_t FAR* tpstmt; - HPROC hproc; - RETCODE retcode = SQL_SUCCESS; - - DWORD dword = 0; - int size = 0, len = 0; - char buf[16] = { '\0' }; - - if( hdbc == SQL_NULL_HDBC - || pdbc->henv == SQL_NULL_HENV ) - { - return SQL_INVALID_HANDLE; - } - - if( cbInfoValueMax < 0 ) - { - PUSHSQLERR ( pdbc->herr, en_S1090 ); - - return SQL_ERROR; - } - - if( /* fInfoType < SQL_INFO_FIRST || */ - ( fInfoType > SQL_INFO_LAST - && fInfoType < SQL_INFO_DRIVER_START ) ) - { - PUSHSQLERR ( pdbc->herr, en_S1096 ); - - return SQL_ERROR; - } - - if( fInfoType == SQL_ODBC_VER ) - { - sprintf( buf, "%02d.%02d", - (ODBCVER)>>8, 0x00FF&(ODBCVER) ); - - - if( rgbInfoValue != NULL - && cbInfoValueMax > 0 ) - { - len = STRLEN( buf ); - - if( len < cbInfoValueMax - 1 ) - { - len = cbInfoValueMax - 1; - PUSHSQLERR ( pdbc->herr, en_01004 ); - - retcode = SQL_SUCCESS_WITH_INFO; - } - - STRNCPY( rgbInfoValue, buf, len ); - ((char FAR*)rgbInfoValue)[len] = '\0'; - } - - if( pcbInfoValue != NULL ) - { - *pcbInfoValue = (SWORD)len; - } - - return retcode; - } - - if( pdbc->state == en_dbc_allocated - || pdbc->state == en_dbc_needdata ) - { - PUSHSQLERR ( pdbc->herr, en_08003 ); - - return SQL_ERROR; - } - - switch( fInfoType ) - { - case SQL_DRIVER_HDBC: - dword = (DWORD)(pdbc->dhdbc); - size = sizeof(dword); - break; - - case SQL_DRIVER_HENV: - penv = (ENV_t FAR*)(pdbc->henv); - dword = (DWORD)(penv->dhenv); - size = sizeof(dword); - break; - - case SQL_DRIVER_HLIB: - penv = (ENV_t FAR*)(pdbc->henv); - dword = (DWORD)(penv->hdll); - size = sizeof(dword); - break; - - case SQL_DRIVER_HSTMT: - if( rgbInfoValue != NULL ) - { - pstmt = *((STMT_t FAR**)rgbInfoValue); - } - - for( tpstmt = (STMT_t FAR*)(pdbc->hstmt); - tpstmt != NULL; - tpstmt = tpstmt->next ) - { - if( tpstmt == pstmt ) - { - break; - } - } - - if( tpstmt == NULL ) - { - PUSHSQLERR ( pdbc->herr, en_S1009 ); - - return SQL_ERROR; - } - - dword = (DWORD)(pstmt->dhstmt); - size = sizeof(dword); - break; - - default: - break; - } - - if( size ) - { - if( rgbInfoValue != NULL ) - { - *((DWORD*)rgbInfoValue) = dword; - } - - if( pcbInfoValue != NULL ) - { - *(pcbInfoValue) = (SWORD)size; - } - - return SQL_SUCCESS; - } - - hproc = _iodbcdm_getproc( hdbc, en_GetInfo ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pdbc->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( hdbc, retcode, hproc, en_GetInfo, ( - pdbc->dhdbc, - fInfoType, - rgbInfoValue, - cbInfoValueMax, - pcbInfoValue ) ) + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + ENV_t FAR* penv; + STMT_t FAR* pstmt = NULL; + STMT_t FAR* tpstmt; + HPROC hproc; + RETCODE retcode = SQL_SUCCESS; + + DWORD dword; + int size = 0, len = 0; + char buf[16] = { '\0' }; + + if( hdbc == SQL_NULL_HDBC + || pdbc->henv == SQL_NULL_HENV ) + { + return SQL_INVALID_HANDLE; + } + + if( cbInfoValueMax < 0 ) + { + PUSHSQLERR ( pdbc->herr, en_S1090 ); + + return SQL_ERROR; + } + + if( /* fInfoType < SQL_INFO_FIRST || */ + ( fInfoType > SQL_INFO_LAST + && fInfoType < SQL_INFO_DRIVER_START ) ) + { + PUSHSQLERR ( pdbc->herr, en_S1096 ); + + return SQL_ERROR; + } + + if( fInfoType == SQL_ODBC_VER ) + { + sprintf( buf, "%02d.%02d", + (ODBCVER)>>8, 0x00FF&(ODBCVER) ); + + + if( rgbInfoValue != NULL + && cbInfoValueMax > 0 ) + { + len = STRLEN( buf ); + + if( len < cbInfoValueMax - 1 ) + { + len = cbInfoValueMax - 1; + PUSHSQLERR ( pdbc->herr, en_01004 ); + + retcode = SQL_SUCCESS_WITH_INFO; + } + + STRNCPY( rgbInfoValue, buf, len ); + ((char FAR*)rgbInfoValue)[len] = '\0'; + } + + if( pcbInfoValue != NULL ) + { + *pcbInfoValue = (SWORD)len; + } + + return retcode; + } + + if( pdbc->state == en_dbc_allocated + || pdbc->state == en_dbc_needdata ) + { + PUSHSQLERR ( pdbc->herr, en_08003 ); + + return SQL_ERROR; + } + + switch( fInfoType ) + { + case SQL_DRIVER_HDBC: + dword = (DWORD)(pdbc->dhdbc); + size = sizeof(dword); + break; + + case SQL_DRIVER_HENV: + penv = (ENV_t FAR*)(pdbc->henv); + dword = (DWORD)(penv->dhenv); + size = sizeof(dword); + break; + + case SQL_DRIVER_HLIB: + penv = (ENV_t FAR*)(pdbc->henv); + dword = (DWORD)(penv->hdll); + size = sizeof(dword); + break; + + case SQL_DRIVER_HSTMT: + if( rgbInfoValue != NULL ) + { + pstmt = *((STMT_t FAR**)rgbInfoValue); + } + + for( tpstmt = (STMT_t FAR*)(pdbc->hstmt); + tpstmt != NULL; + tpstmt = tpstmt->next ) + { + if( tpstmt == pstmt ) + { + break; + } + } + + if( tpstmt == NULL ) + { + PUSHSQLERR ( pdbc->herr, en_S1009 ); + + return SQL_ERROR; + } + + dword = (DWORD)(pstmt->dhstmt); + size = sizeof(dword); + break; + + default: + break; + } + + if( size ) + { + if( rgbInfoValue != NULL ) + { + *((DWORD*)rgbInfoValue) = dword; + } + + if( pcbInfoValue != NULL ) + { + *(pcbInfoValue) = (SWORD)size; + } + + return SQL_SUCCESS; + } + + hproc = _iodbcdm_getproc( hdbc, en_GetInfo ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pdbc->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( hdbc, retcode, hproc, en_GetInfo, ( + pdbc->dhdbc, + fInfoType, + rgbInfoValue, + cbInfoValueMax, + pcbInfoValue ) ) #if 0 - retcode = hproc(pdbc->dhdbc, - fInfoType, - rgbInfoValue, - cbInfoValueMax, - pcbInfoValue ); + retcode = hproc(pdbc->dhdbc, + fInfoType, + rgbInfoValue, + cbInfoValueMax, + pcbInfoValue ); #endif - if( retcode == SQL_ERROR - && fInfoType == SQL_DRIVER_ODBC_VER ) - { - STRCPY( buf, "01.00" ); + if( retcode == SQL_ERROR + && fInfoType == SQL_DRIVER_ODBC_VER ) + { + STRCPY( buf, "01.00" ); - if( rgbInfoValue != NULL - && cbInfoValueMax > 0 ) - { - len = STRLEN( buf ); + if( rgbInfoValue != NULL + && cbInfoValueMax > 0 ) + { + len = STRLEN( buf ); - if( len < cbInfoValueMax - 1 ) - { - len = cbInfoValueMax - 1; - PUSHSQLERR ( pdbc->herr, en_01004 ); - } + if( len < cbInfoValueMax - 1 ) + { + len = cbInfoValueMax - 1; + PUSHSQLERR ( pdbc->herr, en_01004 ); + } - STRNCPY( rgbInfoValue, buf, len ); - ((char FAR*)rgbInfoValue)[len] = '\0'; - } + STRNCPY( rgbInfoValue, buf, len ); + ((char FAR*)rgbInfoValue)[len] = '\0'; + } - if( pcbInfoValue != NULL ) - { - *pcbInfoValue = (SWORD)len; - } + if( pcbInfoValue != NULL ) + { + *pcbInfoValue = (SWORD)len; + } - /* what should we return in this case ???? */ - } + /* what should we return in this case ???? */ + } - return retcode; -} + return retcode; +} RETCODE SQL_API SQLGetFunctions( - HDBC hdbc, - UWORD fFunc, - UWORD FAR* pfExists ) + HDBC hdbc, + UWORD fFunc, + UWORD FAR* pfExists ) { - DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; - HPROC hproc; - RETCODE retcode; + DBC_t FAR* pdbc = (DBC_t FAR*)hdbc; + HPROC hproc; + RETCODE retcode; - if( hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } + if( hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } - if( fFunc > SQL_EXT_API_LAST ) - { - PUSHSQLERR ( pdbc->herr, en_S1095 ); + if( fFunc > SQL_EXT_API_LAST ) + { + PUSHSQLERR ( pdbc->herr, en_S1095 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - if( pdbc->state == en_dbc_allocated - || pdbc->state == en_dbc_needdata ) - { - PUSHSQLERR ( pdbc->herr, en_S1010 ); + if( pdbc->state == en_dbc_allocated + || pdbc->state == en_dbc_needdata ) + { + PUSHSQLERR ( pdbc->herr, en_S1010 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - if( pfExists == NULL ) - { - return SQL_SUCCESS; - } + if( pfExists == NULL ) + { + return SQL_SUCCESS; + } - hproc = _iodbcdm_getproc( hdbc, en_GetFunctions ); + hproc = _iodbcdm_getproc( hdbc, en_GetFunctions ); - if( hproc != SQL_NULL_HPROC ) - { - CALL_DRIVER ( hdbc, retcode, hproc, en_GetFunctions, ( - pdbc->dhdbc, fFunc, pfExists ) ) + if( hproc != SQL_NULL_HPROC ) + { + CALL_DRIVER ( hdbc, retcode, hproc, en_GetFunctions, ( + pdbc->dhdbc, fFunc, pfExists ) ) #if 0 - retcode = hproc( pdbc->dhdbc, fFunc, pfExists ); + retcode = hproc( pdbc->dhdbc, fFunc, pfExists ); #endif - return retcode; - } - - if( fFunc == SQL_API_SQLSETPARAM ) - { - fFunc = SQL_API_SQLBINDPARAMETER; - } - - if( fFunc != SQL_API_ALL_FUNCTIONS ) - { - hproc = _iodbcdm_getproc( hdbc, fFunc ); - - if( hproc == SQL_NULL_HPROC ) - { - *pfExists = (UWORD)0; - } - else - { - *pfExists = (UWORD)1; - } - - return SQL_SUCCESS; - } - - for( fFunc=0 ; fFunc < 100; fFunc ++ ) - { - hproc = _iodbcdm_getproc( hdbc, fFunc ); - - if( hproc == SQL_NULL_HPROC ) - { - pfExists[fFunc] = (UWORD)0; - } - else - { - pfExists[fFunc] = (UWORD)1; - } - } - - return SQL_SUCCESS; + return retcode; + } + + if( fFunc == SQL_API_SQLSETPARAM ) + { + fFunc = SQL_API_SQLBINDPARAMETER; + } + + if( fFunc != SQL_API_ALL_FUNCTIONS ) + { + hproc = _iodbcdm_getproc( hdbc, fFunc ); + + if( hproc == SQL_NULL_HPROC ) + { + *pfExists = (UWORD)0; + } + else + { + *pfExists = (UWORD)1; + } + + return SQL_SUCCESS; + } + + for( fFunc=0 ; fFunc < 100; fFunc ++ ) + { + hproc = _iodbcdm_getproc( hdbc, fFunc ); + + if( hproc == SQL_NULL_HPROC ) + { + pfExists[fFunc] = (UWORD)0; + } + else + { + pfExists[fFunc] = (UWORD)1; + } + } + + return SQL_SUCCESS; } diff --git a/src/iodbc/isql.h b/src/iodbc/isql.h index d26cbe8669..df5df0860f 100644 --- a/src/iodbc/isql.h +++ b/src/iodbc/isql.h @@ -1,91 +1,192 @@ #ifndef _INTRINSIC_SQL_H # define _INTRINSIC_SQL_H -typedef unsigned char UCHAR; -typedef long int SDWORD; -typedef short int SWORD; -typedef unsigned long int UDWORD; -typedef unsigned short int UWORD; - -typedef void FAR* PTR; - -typedef void FAR* HENV; -typedef void FAR* HDBC; -typedef void FAR* HSTMT; - -typedef signed short RETCODE; - -# ifdef WIN32 -# define SQL_API __stdcall -# else -# define SQL_API EXPORT CALLBACK -# endif - -# define ODBCVER 0x0200 - -# define SQL_MAX_MESSAGE_LENGTH 512 -# define SQL_MAX_DSN_LENGTH 32 +#ifndef OS2 +typedef unsigned char UCHAR; +#endif +typedef long int SDWORD; +typedef short int SWORD; +typedef unsigned long int UDWORD; +typedef unsigned short int UWORD; +typedef unsigned int UINT; + +#ifndef FAR +# define FAR +#endif +#ifndef NEAR +# define NEAR +#endif +#ifndef HANDLE + typedef int HANDLE; + #endif +#ifndef HGLOBAL + typedef HANDLE HGLOBAL; + #endif +#ifndef SQL_INDEX_OTHER +#define SQL_INDEX_OTHER 3 + #endif + +# ifndef BOOL +# define BOOL int +# endif +# ifndef CHAR +# define CHAR char +# endif +# ifndef FALSE +# define FALSE (0 != 0) +# endif +# ifndef HWND +# define HWND int +# endif +# ifndef SQLHWND +# define SQLHWND int +# endif +# ifndef LONG +# define LONG long +# endif +# ifndef PASCAL +# define PASCAL +# endif +# ifndef SHORT +# define SHORT short +# endif +# ifndef SQL_API +# define SQL_API +# endif +# ifndef SQL_LOCAL_API +# define SQL_LOCAL_API +# endif +# ifndef TRUE +# define TRUE (0 == 0) +# endif + +typedef struct tagDATE_STRUCT +{ +SWORD year; +UWORD month; +UWORD day; +} DATE_STRUCT; + +typedef struct tagTIME_STRUCT +{ +UWORD hour; +UWORD minute; +UWORD second; +} TIME_STRUCT; + +typedef struct tagTIMESTAMP_STRUCT +{ +SWORD year; +UWORD month; +UWORD day; +UWORD hour; +UWORD minute; +UWORD second; +UDWORD fraction; +} TIMESTAMP_STRUCT; + + + +typedef UCHAR FAR* PTR, + FAR* SQLPTR; + +typedef void FAR* HENV, + FAR* SQLHENV; +typedef void FAR* HDBC, + FAR* SQLHDBC; +typedef void FAR* HSTMT, + FAR* SQLHSTMT; +typedef SDWORD SQLINTEGER; +typedef signed short RETCODE; +typedef UCHAR SQLCHAR; +typedef UWORD SQLUSMALLINT; +typedef PTR SQLPOINTER; +typedef SWORD SQLSMALLINT; +typedef UDWORD SQLUINTEGER; + +# ifdef WIN32 +# define SQL_API __stdcall +# else +# define SQL_API /* giovanni EXPORT CALLBACK */ +# endif +# ifdef OS2 +# ifdef BCPP +# define _Optlink +# define _System _syscall +# endif +# undef SQL_API +# define SQL_API _System +# endif + + +#ifndef ODBCVER +# define ODBCVER 0x0200 +#endif + +# define SQL_MAX_MESSAGE_LENGTH 512 +# define SQL_MAX_DSN_LENGTH 32 /* return code */ -# define SQL_INVALID_HANDLE (-2) -# define SQL_ERROR (-1) -# define SQL_SUCCESS 0 -# define SQL_SUCCESS_WITH_INFO 1 -# define SQL_NO_DATA_FOUND 100 +# define SQL_INVALID_HANDLE (-2) +# define SQL_ERROR (-1) +# define SQL_SUCCESS 0 +# define SQL_SUCCESS_WITH_INFO 1 +# define SQL_NO_DATA_FOUND 100 /* standard SQL datatypes (agree with ANSI type numbering) */ -# define SQL_CHAR 1 -# define SQL_NUMERIC 2 -# define SQL_DECIMAL 3 -# define SQL_INTEGER 4 -# define SQL_SMALLINT 5 -# define SQL_FLOAT 6 -# define SQL_REAL 7 -# define SQL_DOUBLE 8 -# define SQL_VARCHAR 12 - -# define SQL_TYPE_MIN SQL_CHAR -# define SQL_TYPE_NULL 0 -# define SQL_TYPE_MAX SQL_VARCHAR +# define SQL_CHAR 1 +# define SQL_NUMERIC 2 +# define SQL_DECIMAL 3 +# define SQL_INTEGER 4 +# define SQL_SMALLINT 5 +# define SQL_FLOAT 6 +# define SQL_REAL 7 +# define SQL_DOUBLE 8 +# define SQL_VARCHAR 12 + +# define SQL_TYPE_MIN SQL_CHAR +# define SQL_TYPE_NULL 0 +# define SQL_TYPE_MAX SQL_VARCHAR /* C to SQL datatype mapping */ -# define SQL_C_CHAR SQL_CHAR -# define SQL_C_LONG SQL_INTEGER -# define SQL_C_SHORT SQL_SMALLINT -# define SQL_C_FLOAT SQL_REAL -# define SQL_C_DOUBLE SQL_DOUBLE -# define SQL_C_DEFAULT 99 +# define SQL_C_CHAR SQL_CHAR +# define SQL_C_LONG SQL_INTEGER +# define SQL_C_SHORT SQL_SMALLINT +# define SQL_C_FLOAT SQL_REAL +# define SQL_C_DOUBLE SQL_DOUBLE +# define SQL_C_DEFAULT 99 -# define SQL_NO_NULLS 0 -# define SQL_NULLABLE 1 -# define SQL_NULLABLE_UNKNOWN 2 +# define SQL_NO_NULLS 0 +# define SQL_NULLABLE 1 +# define SQL_NULLABLE_UNKNOWN 2 /* some special length values */ -# define SQL_NULL_DATA (-1) -# define SQL_DATA_AT_EXEC (-2) -# define SQL_NTS (-3) +# define SQL_NULL_DATA (-1) +# define SQL_DATA_AT_EXEC (-2) +# define SQL_NTS (-3) /* SQLFreeStmt flag values */ -# define SQL_CLOSE 0 -# define SQL_DROP 1 -# define SQL_UNBIND 2 -# define SQL_RESET_PARAMS 3 +# define SQL_CLOSE 0 +# define SQL_DROP 1 +# define SQL_UNBIND 2 +# define SQL_RESET_PARAMS 3 /* SQLTransact flag values */ -# define SQL_COMMIT 0 -# define SQL_ROLLBACK 1 +# define SQL_COMMIT 0 +# define SQL_ROLLBACK 1 /* SQLColAttributes flag values */ -# define SQL_COLUMN_COUNT 0 -# define SQL_COLUMN_LABEL 18 -# define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL -# define SQL_COLUMN_DRIVER_START 1000 +# define SQL_COLUMN_COUNT 0 +# define SQL_COLUMN_LABEL 18 +# define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL +# define SQL_COLUMN_DRIVER_START 1000 -# define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT +# define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT /* Null handles */ -# define SQL_NULL_HENV 0 -# define SQL_NULL_HDBC 0 -# define SQL_NULL_HSTMT 0 +# define SQL_NULL_HENV 0 +# define SQL_NULL_HDBC 0 +# define SQL_NULL_HSTMT 0 + +#endif -#endif diff --git a/src/iodbc/isqlext.h b/src/iodbc/isqlext.h index a4bae149c4..26e9ee5b5f 100644 --- a/src/iodbc/isqlext.h +++ b/src/iodbc/isqlext.h @@ -1,307 +1,314 @@ -#ifndef _INTRINSIC_SQLEXT_H +#ifndef _INTRINSIC_SQLEXT_H # define _INTRINSIC_SQLEXT_H -# include <../iodbc/isql.h> +# include -# define SQL_STILL_EXECUTING 2 -# define SQL_NEED_DATA 99 +# define SQL_STILL_EXECUTING 2 +# define SQL_NEED_DATA 99 /* extend SQL datatypes */ -# define SQL_DATE 9 -# define SQL_TIME 10 -# define SQL_TIMESTAMP 11 -# define SQL_LONGVARCHAR (-1) -# define SQL_BINARY (-2) -# define SQL_VARBINARY (-3) -# define SQL_LONGVARBINARY (-4) -# define SQL_BIGINT (-5) -# define SQL_TINYINT (-6) -# define SQL_BIT (-7) /* conflict with SQL3 ??? */ -# define SQL_TYPE_DRIVER_START (-80) +# define SQL_DATE 9 +# define SQL_TIME 10 +# define SQL_TIMESTAMP 11 +# define SQL_LONGVARCHAR (-1) +# define SQL_BINARY (-2) +# define SQL_VARBINARY (-3) +# define SQL_LONGVARBINARY (-4) +# define SQL_BIGINT (-5) +# define SQL_TINYINT (-6) +# define SQL_BIT (-7) /* conflict with SQL3 ??? */ +# define SQL_TYPE_DRIVER_START (-80) /* C to SQL datatype mapping */ -# define SQL_C_DATE SQL_DATE -# define SQL_C_TIME SQL_TIME -# define SQL_C_TIMESTAMP SQL_TIMESTAMP -# define SQL_C_BINARY SQL_BINARY -# define SQL_C_BIT SQL_BIT -# define SQL_C_TINYINT SQL_TINYINT - -# define SQL_SIGNED_OFFSET (-20) -# define SQL_UNSIGNED_OFFSET (-22) - -# define SQL_C_SLONG (SQL_C_LONG + SQL_SIGNED_OFFSET) -# define SQL_C_SSHORT (SQL_C_SHORT + SQL_SIGNED_OFFSET) -# define SQL_C_STINYINT (SQL_TINYINT + SQL_SIGNED_OFFSET) -# define SQL_C_ULONG (SQL_C_LONG + SQL_UNSIGNED_OFFSET) -# define SQL_C_USHORT (SQL_C_SHORT + SQL_UNSIGNED_OFFSET) -# define SQL_C_UTINYINT (SQL_TINYINT + SQL_UNSIGNED_OFFSET) -# define SQL_C_BOOKMARK SQL_C_ULONG +# define SQL_C_DATE SQL_DATE +# define SQL_C_TIME SQL_TIME +# define SQL_C_TIMESTAMP SQL_TIMESTAMP +# define SQL_C_BINARY SQL_BINARY +# define SQL_C_BIT SQL_BIT +# define SQL_C_TINYINT SQL_TINYINT + +# define SQL_SIGNED_OFFSET (-20) +# define SQL_UNSIGNED_OFFSET (-22) + +# define SQL_C_SLONG (SQL_C_LONG + SQL_SIGNED_OFFSET) +# define SQL_C_SSHORT (SQL_C_SHORT + SQL_SIGNED_OFFSET) +# define SQL_C_STINYINT (SQL_TINYINT + SQL_SIGNED_OFFSET) +# define SQL_C_ULONG (SQL_C_LONG + SQL_UNSIGNED_OFFSET) +# define SQL_C_USHORT (SQL_C_SHORT + SQL_UNSIGNED_OFFSET) +# define SQL_C_UTINYINT (SQL_TINYINT + SQL_UNSIGNED_OFFSET) +# define SQL_C_BOOKMARK SQL_C_ULONG # if defined(SQL_TYPE_MIN) -# undef SQL_TYPE_MIN -# define SQL_TYPE_MIN SQL_BIT -/* Note:If SQL_BIT uses SQL3 value (i.e. 14) then, - * SQL_TYPE_MIN need to be defined as SQL_TINYINT - * (i.e. -6). +# undef SQL_TYPE_MIN +# define SQL_TYPE_MIN SQL_BIT +/* Note:If SQL_BIT uses SQL3 value (i.e. 14) then, + * SQL_TYPE_MIN need to be defined as SQL_TINYINT + * (i.e. -6). */ # endif -# define SQL_ALL_TYPES 0 +# define SQL_ALL_TYPES 0 /* SQLDriverConnect flag values */ -# define SQL_DRIVER_NOPROMPT 0 -# define SQL_DRIVER_COMPLETE 1 -# define SQL_DRIVER_PROMPT 2 -# define SQL_DRIVER_COMPLETE_REQUIRED 3 +# define SQL_DRIVER_NOPROMPT 0 +# define SQL_DRIVER_COMPLETE 1 +# define SQL_DRIVER_PROMPT 2 +# define SQL_DRIVER_COMPLETE_REQUIRED 3 /* SQLSetParam extensions */ -# define SQL_DEFAULT_PARAM (-5) -# define SQL_IGNORE (-6) +# define SQL_DEFAULT_PARAM (-5) +# define SQL_IGNORE (-6) /* function number for SQLGetFunctions and _iodbcdm_getproc */ -# define SQL_API_SQLALLOCCONNECT 1 -# define SQL_API_SQLALLOCENV 2 -# define SQL_API_SQLALLOCSTMT 3 -# define SQL_API_SQLBINDCOL 4 -# define SQL_API_SQLCANCEL 5 -# define SQL_API_SQLCOLATTRIBUTES 6 -# define SQL_API_SQLCONNECT 7 -# define SQL_API_SQLDESCRIBECOL 8 -# define SQL_API_SQLDISCONNECT 9 -# define SQL_API_SQLERROR 10 -# define SQL_API_SQLEXECDIRECT 11 -# define SQL_API_SQLEXECUTE 12 -# define SQL_API_SQLFETCH 13 -# define SQL_API_SQLFREECONNECT 14 -# define SQL_API_SQLFREEENV 15 -# define SQL_API_SQLFREESTMT 16 -# define SQL_API_SQLGETCURSORNAME 17 -# define SQL_API_SQLNUMRESULTCOLS 18 -# define SQL_API_SQLPREPARE 19 -# define SQL_API_SQLROWCOUNT 20 -# define SQL_API_SQLSETCURSORNAME 21 -# define SQL_API_SQLSETPARAM 22 -# define SQL_API_SQLTRANSACT 23 - -# define SQL_NUM_FUNCTIONS 23 - -# define SQL_EXT_API_START 40 - -# define SQL_API_SQLCOLUMNS 40 - -# define SQL_API_SQLDRIVERCONNECT 41 -# define SQL_API_SQLGETCONNECTOPTION 42 -# define SQL_API_SQLGETDATA 43 -# define SQL_API_SQLGETFUNCTIONS 44 -# define SQL_API_SQLGETINFO 45 -# define SQL_API_SQLGETSTMTOPTION 46 -# define SQL_API_SQLGETTYPEINFO 47 -# define SQL_API_SQLPARAMDATA 48 -# define SQL_API_SQLPUTDATA 49 -# define SQL_API_SQLSETCONNECTOPTION 50 -# define SQL_API_SQLSETSTMTOPTION 51 -# define SQL_API_SQLSPECIALCOLUMNS 52 -# define SQL_API_SQLSTATISTICS 53 -# define SQL_API_SQLTABLES 54 - -# define SQL_API_SQLBROWSECONNECT 55 -# define SQL_API_SQLCOLUMNPRIVILEGES 56 -# define SQL_API_SQLDATASOURCES 57 -# define SQL_API_SQLDESCRIBEPARAM 58 -# define SQL_API_SQLEXTENDEDFETCH 59 -# define SQL_API_SQLFOREIGNKEYS 60 -# define SQL_API_SQLMORERESULTS 61 -# define SQL_API_SQLNATIVESQL 62 -# define SQL_API_SQLNUMPARAMS 63 -# define SQL_API_SQLPARAMOPTIONS 64 -# define SQL_API_SQLPRIMARYKEYS 65 -# define SQL_API_SQLPROCEDURECOLUMNS 66 -# define SQL_API_SQLPROCEDURES 67 -# define SQL_API_SQLSETPOS 68 -# define SQL_API_SQLSETSCROLLOPTIONS 69 -# define SQL_API_SQLTABLEPRIVILEGES 70 - -# define SQL_API_SQLDRIVERS 71 -# define SQL_API_SQLBINDPARAMETER 72 -# define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER - -# define SQL_API_ALL_FUNCTIONS 0 +# define SQL_API_SQLALLOCCONNECT 1 +# define SQL_API_SQLALLOCENV 2 +# define SQL_API_SQLALLOCSTMT 3 +# define SQL_API_SQLBINDCOL 4 +# define SQL_API_SQLCANCEL 5 +# define SQL_API_SQLCOLATTRIBUTES 6 +# define SQL_API_SQLCONNECT 7 +# define SQL_API_SQLDESCRIBECOL 8 +# define SQL_API_SQLDISCONNECT 9 +# define SQL_API_SQLERROR 10 +# define SQL_API_SQLEXECDIRECT 11 +# define SQL_API_SQLEXECUTE 12 +# define SQL_API_SQLFETCH 13 +# define SQL_API_SQLFREECONNECT 14 +# define SQL_API_SQLFREEENV 15 +# define SQL_API_SQLFREESTMT 16 +# define SQL_API_SQLGETCURSORNAME 17 +# define SQL_API_SQLNUMRESULTCOLS 18 +# define SQL_API_SQLPREPARE 19 +# define SQL_API_SQLROWCOUNT 20 +# define SQL_API_SQLSETCURSORNAME 21 +# define SQL_API_SQLSETPARAM 22 +# define SQL_API_SQLTRANSACT 23 + +# define SQL_NUM_FUNCTIONS 23 + +# define SQL_EXT_API_START 40 + +# define SQL_API_SQLCOLUMNS 40 + +# define SQL_API_SQLDRIVERCONNECT 41 +# define SQL_API_SQLGETCONNECTOPTION 42 +# define SQL_API_SQLGETDATA 43 +# define SQL_API_SQLGETFUNCTIONS 44 +# define SQL_API_SQLGETINFO 45 +# define SQL_API_SQLGETSTMTOPTION 46 +# define SQL_API_SQLGETTYPEINFO 47 +# define SQL_API_SQLPARAMDATA 48 +# define SQL_API_SQLPUTDATA 49 +# define SQL_API_SQLSETCONNECTOPTION 50 +# define SQL_API_SQLSETSTMTOPTION 51 +# define SQL_API_SQLSPECIALCOLUMNS 52 +# define SQL_API_SQLSTATISTICS 53 +# define SQL_API_SQLTABLES 54 + +# define SQL_API_SQLBROWSECONNECT 55 +# define SQL_API_SQLCOLUMNPRIVILEGES 56 +# define SQL_API_SQLDATASOURCES 57 +# define SQL_API_SQLDESCRIBEPARAM 58 +# define SQL_API_SQLEXTENDEDFETCH 59 +# define SQL_API_SQLFOREIGNKEYS 60 +# define SQL_API_SQLMORERESULTS 61 +# define SQL_API_SQLNATIVESQL 62 +# define SQL_API_SQLNUMPARAMS 63 +# define SQL_API_SQLPARAMOPTIONS 64 +# define SQL_API_SQLPRIMARYKEYS 65 +# define SQL_API_SQLPROCEDURECOLUMNS 66 +# define SQL_API_SQLPROCEDURES 67 +# define SQL_API_SQLSETPOS 68 +# define SQL_API_SQLSETSCROLLOPTIONS 69 +# define SQL_API_SQLTABLEPRIVILEGES 70 + +# define SQL_API_SQLDRIVERS 71 +# define SQL_API_SQLBINDPARAMETER 72 +# define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER + +# define SQL_API_ALL_FUNCTIONS 0 /* SQLGetInfo infor number */ -# define SQL_INFO_FIRST 0 -# define SQL_DRIVER_HDBC 3 -# define SQL_DRIVER_HENV 4 -# define SQL_DRIVER_HSTMT 5 -# define SQL_DRIVER_NAME 6 -# define SQL_ODBC_VER 10 -# define SQL_CURSOR_COMMIT_BEHAVIOR 23 -# define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 -# define SQL_DEFAULT_TXN_ISOLATION 26 +# define SQL_INFO_FIRST 0 +# define SQL_DRIVER_HDBC 3 +# define SQL_DRIVER_HENV 4 +# define SQL_DRIVER_HSTMT 5 +# define SQL_DRIVER_NAME 6 +# define SQL_ODBC_VER 10 +# define SQL_CURSOR_COMMIT_BEHAVIOR 23 +# define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 +# define SQL_DEFAULT_TXN_ISOLATION 26 -# define SQL_TXN_ISOLATION_OPTION 72 -# define SQL_NON_NULLABLE_COLUMNS 75 +# define SQL_TXN_ISOLATION_OPTION 72 +# define SQL_NON_NULLABLE_COLUMNS 75 -# define SQL_DRIVER_HLIB 76 -# define SQL_DRIVER_ODBC_VER 77 +# define SQL_DRIVER_HLIB 76 +# define SQL_DRIVER_ODBC_VER 77 -# define SQL_QUALIFIER_LOCATION 114 +# define SQL_QUALIFIER_LOCATION 114 -# define SQL_INFO_LAST SQL_QUALIFIER_LOCATION +# define SQL_INFO_LAST SQL_QUALIFIER_LOCATION -# define SQL_INFO_DRIVER_START 1000 +# define SQL_INFO_DRIVER_START 1000 /* SQL_TXN_ISOLATION_OPTION masks */ -# define SQL_TXN_READ_UNCOMMITTED 0x00000001L -# define SQL_TXN_READ_COMMITTED 0x00000002L -# define SQL_TXN_REPEATABLE_READ 0x00000004L -# define SQL_TXN_SERIALIZABLE 0x00000008L -# define SQL_TXN_VERSIONING 0x00000010L +# define SQL_TXN_READ_UNCOMMITTED 0x00000001L +# define SQL_TXN_READ_COMMITTED 0x00000002L +# define SQL_TXN_REPEATABLE_READ 0x00000004L +# define SQL_TXN_SERIALIZABLE 0x00000008L +# define SQL_TXN_VERSIONING 0x00000010L /* SQL_CURSOR_COMMIT_BEHAVIOR and SQL_CURSOR_ROLLBACK_BEHAVIOR values */ -# define SQL_CB_DELETE 0x0000 -# define SQL_CB_CLOSE 0x0001 -# define SQL_CB_PRESERVE 0x0002 +# define SQL_CB_DELETE 0x0000 +# define SQL_CB_CLOSE 0x0001 +# define SQL_CB_PRESERVE 0x0002 /* options for SQLGetStmtOption/SQLSetStmtOption */ -# define SQL_QUERY_TIMEOUT 0 -# define SQL_MAX_ROWS 1 -# define SQL_NOSCAN 2 -# define SQL_MAX_LENGTH 3 -# define SQL_ASYNC_ENABLE 4 -# define SQL_BIND_TYPE 5 -# define SQL_CURSOR_TYPE 6 -# define SQL_CONCURRENCY 7 -# define SQL_KEYSET_SIZE 8 -# define SQL_ROWSET_SIZE 9 -# define SQL_SIMULATE_CURSOR 10 -# define SQL_RETRIEVE_DATA 11 -# define SQL_USE_BOOKMARKS 12 -# define SQL_GET_BOOKMARK 13 /* GetStmtOption Only */ -# define SQL_ROW_NUMBER 14 /* GetStmtOption Only */ -# define SQL_STMT_OPT_MAX SQL_ROW_NUMBER - -# define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT +# define SQL_QUERY_TIMEOUT 0 +# define SQL_MAX_ROWS 1 +# define SQL_NOSCAN 2 +# define SQL_MAX_LENGTH 3 +# define SQL_ASYNC_ENABLE 4 +# define SQL_BIND_TYPE 5 +# define SQL_CURSOR_TYPE 6 +# define SQL_CONCURRENCY 7 +# define SQL_KEYSET_SIZE 8 +# define SQL_ROWSET_SIZE 9 +# define SQL_SIMULATE_CURSOR 10 +# define SQL_RETRIEVE_DATA 11 +# define SQL_USE_BOOKMARKS 12 +# define SQL_GET_BOOKMARK 13 /* GetStmtOption Only */ +# define SQL_ROW_NUMBER 14 /* GetStmtOption Only */ +# define SQL_STMT_OPT_MAX SQL_ROW_NUMBER + +# define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT /* SQL_QUERY_TIMEOUT options */ -# define SQL_QUERY_TIMEOUT_DEFAULT 0UL +# define SQL_QUERY_TIMEOUT_DEFAULT 0UL /* SQL_MAX_ROWS options */ -# define SQL_MAX_ROWS_DEFAULT 0UL +# define SQL_MAX_ROWS_DEFAULT 0UL /* SQL_MAX_LENGTH options */ -# define SQL_MAX_LENGTH_DEFAULT 0UL +# define SQL_MAX_LENGTH_DEFAULT 0UL /* SQL_CONCURRENCY options */ -# define SQL_CONCUR_READ_ONLY 1 -# define SQL_CONCUR_LOCK 2 -# define SQL_CONCUR_ROWVER 3 -# define SQL_CONCUR_VALUES 4 +# define SQL_CONCUR_READ_ONLY 1 +# define SQL_CONCUR_LOCK 2 +# define SQL_CONCUR_ROWVER 3 +# define SQL_CONCUR_VALUES 4 + +/* SQL_CURSOR_TYPE options */ +#define SQL_CURSOR_FORWARD_ONLY 0UL +#define SQL_CURSOR_KEYSET_DRIVEN 1UL +#define SQL_CURSOR_DYNAMIC 2UL +#define SQL_CURSOR_STATIC 3UL +#define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY /* options for SQLSetConnectOption/SQLGetConnectOption */ -# define SQL_ACCESS_MODE 101 -# define SQL_AUTOCOMMIT 102 -# define SQL_LOGIN_TIMEOUT 103 -# define SQL_OPT_TRACE 104 -# define SQL_OPT_TRACEFILE 105 -# define SQL_TRANSLATE_DLL 106 -# define SQL_TRANSLATE_OPTION 107 -# define SQL_TXN_ISOLATION 108 -# define SQL_CURRENT_QUALIFIER 109 -# define SQL_ODBC_CURSORS 110 -# define SQL_QUIET_MODE 111 -# define SQL_PACKET_SIZE 112 -# define SQL_CONN_OPT_MAX SQL_PACKET_SIZE -# define SQL_CONNECT_OPT_DRVR_START 1000 - -# define SQL_CONN_OPT_MIN SQL_ACCESS_MODE +# define SQL_ACCESS_MODE 101 +# define SQL_AUTOCOMMIT 102 +# define SQL_LOGIN_TIMEOUT 103 +# define SQL_OPT_TRACE 104 +# define SQL_OPT_TRACEFILE 105 +# define SQL_TRANSLATE_DLL 106 +# define SQL_TRANSLATE_OPTION 107 +# define SQL_TXN_ISOLATION 108 +# define SQL_CURRENT_QUALIFIER 109 +# define SQL_ODBC_CURSORS 110 +# define SQL_QUIET_MODE 111 +# define SQL_PACKET_SIZE 112 +# define SQL_CONN_OPT_MAX SQL_PACKET_SIZE +# define SQL_CONNECT_OPT_DRVR_START 1000 + +# define SQL_CONN_OPT_MIN SQL_ACCESS_MODE /* SQL_ACCESS_MODE options */ -# define SQL_MODE_READ_WRITE 0UL -# define SQL_MODE_READ_ONLY 1UL -# define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE +# define SQL_MODE_READ_WRITE 0UL +# define SQL_MODE_READ_ONLY 1UL +# define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE /* SQL_AUTOCOMMIT options */ -# define SQL_AUTOCOMMIT_OFF 0UL -# define SQL_AUTOCOMMIT_ON 1UL -# define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON +# define SQL_AUTOCOMMIT_OFF 0UL +# define SQL_AUTOCOMMIT_ON 1UL +# define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON /* SQL_LOGIN_TIMEOUT options */ -# define SQL_LOGIN_TIMEOUT_DEFAULT 15UL +# define SQL_LOGIN_TIMEOUT_DEFAULT 15UL /* SQL_OPT_TRACE options */ -# define SQL_OPT_TRACE_OFF 0UL -# define SQL_OPT_TRACE_ON 1UL -# define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF -# define SQL_OPT_TRACE_FILE_DEFAULT "odbc.log" +# define SQL_OPT_TRACE_OFF 0UL +# define SQL_OPT_TRACE_ON 1UL +# define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF +# define SQL_OPT_TRACE_FILE_DEFAULT "odbc.log" /* SQL_ODBC_CURSORS options */ -# define SQL_CUR_USE_IF_NEEDED 0UL -# define SQL_CUR_USE_ODBC 1UL -# define SQL_CUR_USE_DRIVER 2UL -# define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER +# define SQL_CUR_USE_IF_NEEDED 0UL +# define SQL_CUR_USE_ODBC 1UL +# define SQL_CUR_USE_DRIVER 2UL +# define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER /* Column types and scopes in SQLSpecialColumns. */ -# define SQL_BEST_ROWID 1 -# define SQL_ROWVER 2 +# define SQL_BEST_ROWID 1 +# define SQL_ROWVER 2 -# define SQL_SCOPE_CURROW 0 -# define SQL_SCOPE_TRANSACTION 1 -# define SQL_SCOPE_SESSION 2 +# define SQL_SCOPE_CURROW 0 +# define SQL_SCOPE_TRANSACTION 1 +# define SQL_SCOPE_SESSION 2 /* Operations in SQLSetPos */ -# define SQL_ADD 4 +# define SQL_ADD 4 /* Lock options in SQLSetPos */ -# define SQL_LOCK_NO_CHANGE 0 -# define SQL_LOCK_EXCLUSIVE 1 -# define SQL_LOCK_UNLOCK 2 +# define SQL_LOCK_NO_CHANGE 0 +# define SQL_LOCK_EXCLUSIVE 1 +# define SQL_LOCK_UNLOCK 2 /* SQLExtendedFetch flag values */ -# define SQL_FETCH_NEXT 1 -# define SQL_FETCH_FIRST 2 -# define SQL_FETCH_LAST 3 -# define SQL_FETCH_PRIOR 4 -# define SQL_FETCH_ABSOLUTE 5 -# define SQL_FETCH_RELATIVE 6 -# define SQL_FETCH_BOOKMARK 8 +# define SQL_FETCH_NEXT 1 +# define SQL_FETCH_FIRST 2 +# define SQL_FETCH_LAST 3 +# define SQL_FETCH_PRIOR 4 +# define SQL_FETCH_ABSOLUTE 5 +# define SQL_FETCH_RELATIVE 6 +# define SQL_FETCH_BOOKMARK 8 /* Defines for SQLBindParameter/SQLProcedureColumns */ -# define SQL_PARAM_TYPE_UNKNOWN 0 -# define SQL_PARAM_INPUT 1 -# define SQL_PARAM_INPUT_OUTPUT 2 -# define SQL_RESULT_COL 3 -# define SQL_PARAM_OUTPUT 4 +# define SQL_PARAM_TYPE_UNKNOWN 0 +# define SQL_PARAM_INPUT 1 +# define SQL_PARAM_INPUT_OUTPUT 2 +# define SQL_RESULT_COL 3 +# define SQL_PARAM_OUTPUT 4 /* Defines used by Driver Manager for mapping SQLSetParam to SQLBindParameter */ -# define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT -# define SQL_SETPARAM_VALUE_MAX (-1L) +# define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT +# define SQL_SETPARAM_VALUE_MAX (-1L) /* SQLStatistics flag values */ -# define SQL_INDEX_UNIQUE 0 -# define SQL_INDEX_ALL 1 +# define SQL_INDEX_UNIQUE 0 +# define SQL_INDEX_ALL 1 -# define SQL_QUICK 0 -# define SQL_ENSURE 1 +# define SQL_QUICK 0 +# define SQL_ENSURE 1 /* SQLSetScrollOption flag values */ -# define SQL_SCROLL_FORWARD_ONLY 0L -# define SQL_SCROLL_KEYSET_DRIVEN (-1L) -# define SQL_SCROLL_DYNAMIC (-2L) -# define SQL_SCROLL_STATIC (-3L) +# define SQL_SCROLL_FORWARD_ONLY 0L +# define SQL_SCROLL_KEYSET_DRIVEN (-1L) +# define SQL_SCROLL_DYNAMIC (-2L) +# define SQL_SCROLL_STATIC (-3L) -# ifdef __cplusplus - extern "C" { +# if defined(__cplusplus) || defined(__IBMCPP__) + extern "C" { # endif RETCODE SQL_API SQLSetConnectOption (HDBC, UWORD, UDWORD); RETCODE SQL_API SQLNumResultCols ( HSTMT, SWORD FAR* ); -# ifdef __cplusplus - } +# if defined(__cplusplus) || defined(__IBMCPP__) + } # endif #endif diff --git a/src/iodbc/itrace.c b/src/iodbc/itrace.c index 106d7a3804..ae164808a5 100644 --- a/src/iodbc/itrace.c +++ b/src/iodbc/itrace.c @@ -1,6 +1,6 @@ /** trace functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,75 +30,75 @@ static int printreturn(void FAR* istm, int ret ) { - FILE FAR* stm = (FILE FAR*)istm; - char FAR* ptr = "Invalid return value"; - - switch( ret ) - { - case SQL_SUCCESS: - ptr = "SQL_SUCCESS"; - break; - - case SQL_SUCCESS_WITH_INFO: - ptr = "SQL_SUCCESS_WITH_INFO"; - break; - - case SQL_NO_DATA_FOUND: - ptr = "SQL_NO_DATA_FOUND"; - break; - - case SQL_NEED_DATA: - ptr = "SQL_NEED_DATA"; - break; - - case SQL_INVALID_HANDLE: - ptr = "SQL_INVALID_HANDLE"; - break; - - case SQL_ERROR: - ptr = "SQL_ERROR"; - break; - - case SQL_STILL_EXECUTING: - ptr = "SQL_STILL_EXECUTING"; - break; - - default: - break; - } - - fprintf( stm, "%s\n", ptr); - fflush( stm ); - - return 0; + FILE FAR* stm = (FILE FAR*)istm; + char FAR* ptr = "Invalid return value"; + + switch( ret ) + { + case SQL_SUCCESS: + ptr = "SQL_SUCCESS"; + break; + + case SQL_SUCCESS_WITH_INFO: + ptr = "SQL_SUCCESS_WITH_INFO"; + break; + + case SQL_NO_DATA_FOUND: + ptr = "SQL_NO_DATA_FOUND"; + break; + + case SQL_NEED_DATA: + ptr = "SQL_NEED_DATA"; + break; + + case SQL_INVALID_HANDLE: + ptr = "SQL_INVALID_HANDLE"; + break; + + case SQL_ERROR: + ptr = "SQL_ERROR"; + break; + + case SQL_STILL_EXECUTING: + ptr = "SQL_STILL_EXECUTING"; + break; + + default: + break; + } + + fprintf( stm, "%s\n", ptr); + fflush( stm ); + + return 0; } -HPROC _iodbcdm_gettrproc(void FAR* istm, int procid, int type) +HPROC _iodbcdm_gettrproc(void FAR* istm, int procid, int type) { - FILE FAR* stm = (FILE FAR*)istm; + FILE FAR* stm = (FILE FAR*)istm; - if( type == TRACE_TYPE_DM2DRV ) - { - int i,j = 0; + if( type == TRACE_TYPE_DM2DRV ) + { + int i,j = 0; - for(i=0;j != en_NullProc ;i++) - { - j = odbcapi_symtab[i].en_idx; + for(i=0;j != en_NullProc ;i++) + { + j = odbcapi_symtab[i].en_idx; - if( j == procid ) - { - fprintf( stm, "\n%s ( ... )\n", - odbcapi_symtab[i].symbol); + if( j == procid ) + { + fprintf( stm, "\n%s ( ... )\n", + odbcapi_symtab[i].symbol); - fflush( stm ); - } - } - } + fflush( stm ); + } + } + } - if( type == TRACE_TYPE_RETURN ) - { - return (HPROC)printreturn; - } + if( type == TRACE_TYPE_RETURN ) + { + return (HPROC)printreturn; + } - return SQL_NULL_HPROC; + return SQL_NULL_HPROC; } diff --git a/src/iodbc/itrace.h b/src/iodbc/itrace.h index 6b4e850cba..f932dcc746 100644 --- a/src/iodbc/itrace.h +++ b/src/iodbc/itrace.h @@ -1,97 +1,97 @@ -#ifndef _ITRACE_H +#ifndef _ITRACE_H # define _ITRACE_H -# ifdef DEBUG +# ifdef DEBUG # ifndef NO_TRACE # define NO_TRACE # endif # endif -# define TRACE_TYPE_APP2DM 1 -# define TRACE_TYPE_DM2DRV 2 -# define TRACE_TYPE_DRV2DM 3 +# define TRACE_TYPE_APP2DM 1 +# define TRACE_TYPE_DM2DRV 2 +# define TRACE_TYPE_DRV2DM 3 -# define TRACE_TYPE_RETURN 4 +# define TRACE_TYPE_RETURN 4 -extern HPROC _iodbcdm_gettrproc(void FAR* stm, int procid, int type); +extern HPROC _iodbcdm_gettrproc(void FAR* stm, int procid, int type); # ifdef NO_TRACE -# define TRACE_CALL( stm, trace_on, procid, plist ) +# define TRACE_CALL( stm, trace_on, procid, plist ) # else # define TRACE_CALL( stm, trace_on, plist )\ - {\ - if( trace_on)\ - {\ - HPROC hproc;\ + {\ + if( trace_on)\ + {\ + HPROC hproc;\ \ - hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_APP2DM);\ + hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_APP2DM);\ \ - if( hproc )\ - hproc plist;\ - }\ - } + if( hproc )\ + hproc plist;\ + }\ + } # endif # ifdef NO_TRACE # define TRACE_DM2DRV( stm, procid, plist ) # else # define TRACE_DM2DRV( stm, procid, plist )\ - {\ - HPROC hproc;\ + {\ + HPROC hproc;\ \ - hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_DM2DRV);\ + hproc = _iodbcdm_gettrproc(stm, procid, TRACE_TYPE_DM2DRV);\ \ - if( hproc )\ - hproc plist;\ - } + if( hproc )\ + hproc plist;\ + } # endif # ifdef NO_TRACE # define TRACE_DRV2DM( stm, procid, plist ) # else # define TRACE_DRV2DM( stm, procid, plist ) \ - {\ - HPROC hproc;\ + {\ + HPROC hproc;\ \ - hproc = _iodbcdm_gettrproc( stm, procid, TRACE_TYPE_DRV2DM);\ + hproc = _iodbcdm_gettrproc( stm, procid, TRACE_TYPE_DRV2DM);\ \ - if( hproc )\ - hproc plist;\ - } + if( hproc )\ + hproc plist;\ + } # endif # ifdef NO_TRACE # define TRACE_RETURN( stm, trace_on, ret ) # else # define TRACE_RETURN( stm, trace_on, ret )\ - {\ - if( trace_on ) {\ - HPROC hproc;\ + {\ + if( trace_on ) {\ + HPROC hproc;\ \ - hproc = _iodbcdm_gettrproc( stm, 0, TRACE_TYPE_RETURN);\ + hproc = _iodbcdm_gettrproc( stm, 0, TRACE_TYPE_RETURN);\ \ - if( hproc )\ - hproc( stm, ret );\ - }\ - } + if( hproc )\ + hproc( stm, ret );\ + }\ + } # endif -# ifdef NO_TRACE -# define CALL_DRIVER( hdbc, ret, proc, procid, plist ) { ret = proc plist; } +# ifdef NO_TRACE +# define CALL_DRIVER( hdbc, ret, proc, procid, plist ) { ret = proc plist; } # else # define CALL_DRIVER( hdbc, ret, proc, procid, plist )\ - {\ - DBC_t FAR* pdbc = (DBC_t FAR*)(hdbc);\ + {\ + DBC_t FAR* pdbc = (DBC_t FAR*)(hdbc);\ \ - if( pdbc->trace ) {\ - TRACE_DM2DRV( pdbc->tstm, procid, plist )\ - ret = proc plist;\ - TRACE_DRV2DM( pdbc->tstm, procid, plist )\ - TRACE_RETURN( pdbc->tstm, 1, ret )\ - }\ - else\ - ret = proc plist;\ - } + if( pdbc->trace ) {\ + TRACE_DM2DRV( pdbc->tstm, procid, plist )\ + ret = proc plist;\ + TRACE_DRV2DM( pdbc->tstm, procid, plist )\ + TRACE_RETURN( pdbc->tstm, 1, ret )\ + }\ + else\ + ret = proc plist;\ + } # endif #endif diff --git a/src/iodbc/main.c b/src/iodbc/main.c index d6062de7c0..8addc3ced6 100644 --- a/src/iodbc/main.c +++ b/src/iodbc/main.c @@ -1,7 +1,7 @@ -#include +#include /* entry function used to build a share library on AIX */ -int __start() +int __start() { - return 0; + return 0; } diff --git a/src/iodbc/misc.c b/src/iodbc/misc.c index 4793645a12..42b26a62b9 100644 --- a/src/iodbc/misc.c +++ b/src/iodbc/misc.c @@ -1,6 +1,6 @@ /** miscellaneous functions - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,6 +13,13 @@ GNU General Public License for more details. **/ +#ifdef DLDAPI_OS2 +# define INCL_DOSMODULEMGR /* Module Manager values */ +# define INCL_DOSERRORS /* Error values */ +# include +# include +#endif + #include <../iodbc/iodbc.h> #include <../iodbc/isql.h> @@ -21,360 +28,395 @@ #include #include -static int -upper_strneq( - char* s1, - char* s2, - int n ) +#include + + +static int +upper_strneq( + char* s1, + char* s2, + int n ) { - int i; - char c1 = 0, c2 = 0; - - for(i=1;i= 'a' && c1 <= 'z' ) - { - c1 += ('A' - 'a'); - } - else if( c1 == '\n' ) - { - c1 = '\0'; - } - - if( c2 >= 'a' && c2 <= 'z' ) - { - c2 += ('A' - 'a'); - } - else if( c2 == '\n' ) - { - c2 = '\0'; - } - - if( (c1 - c2) || !c1 || !c2 ) - { - break; - } - } - - return (int)!(c1 - c2); + int i; + char c1, c2; + + for(i=1;i= 'a' && c1 <= 'z' ) + { + c1 += ('A' - 'a'); + } + else if( c1 == '\n' ) + { + c1 = '\0'; + } + + if( c2 >= 'a' && c2 <= 'z' ) + { + c2 += ('A' - 'a'); + } + else if( c2 == '\n' ) + { + c2 = '\0'; + } + + if( (c1 - c2) || !c1 || !c2 ) + { + break; + } + } + + return (int)!(c1 - c2); } -static char* /* return new position in input str */ -readtoken( - char* istr, /* old position in input buf */ - char* obuf ) /* token string ( if "\0", then finished ) */ +static char* /* return new position in input str */ +readtoken( + char* istr, /* old position in input buf */ + char* obuf ) /* token string ( if "\0", then finished ) */ { - for(; *istr && *istr != '\n' ; istr ++ ) - { - char c, nx; + for(; *istr && *istr != '\n' ; istr ++ ) + { + char c, nx; - c = *(istr); + c = *(istr); - if( c == ' ' || c == '\t' ) - { - continue; - } + if( c == ' ' || c == '\t' ) + { + continue; + } - nx = *(istr + 1); + nx = *(istr + 1); - *obuf = c; - obuf ++; + *obuf = c; + obuf ++; - if( c == ';' || c == '=' ) - { - istr ++; - break; - } + if( c == ';' || c == '=' ) + { + istr ++; + break; + } - if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' ) - { - istr ++; - break; - } - } + if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' ) + { + istr ++; + break; + } + } - *obuf = '\0'; + *obuf = '\0'; - return istr; + return istr; } -#if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) -# include -# define UNIX_PWD +#if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) +# include +# define UNIX_PWD #endif static char* -getinitfile(char* buf, int size) +getinitfile(char* buf, int size) { - int /* i, */ j; - char* ptr; - - j = STRLEN("/odbc.ini") + 1; - - if( size < j ) - { - return NULL; - } + int i, j; + char* ptr; -#if !defined(UNIX_PWD) - - i = GetWindowsDirectory((LPSTR)buf, size ); + j = STRLEN("/iodbc.ini") + 1; - if( i == 0 || i > size - j ) - { - return NULL; - } + if( size < j ) + { + return NULL; + } - sprintf( buf + i, "/odbc.ini"); - - return buf; +#ifdef FIX_INI_FILE + sprintf( buf, "%s/iodbc.ini", DIR_INI_FILE ); #else - ptr = (char*)getpwuid(getuid()); - - if( ptr == NULL ) - { - return NULL; - } - - ptr = ((struct passwd*)ptr)->pw_dir; - - if( ptr == NULL || *ptr == '\0' ) - { - ptr = "/home"; - } - - if( size < STRLEN(ptr) + j ) - { - return NULL; - } - - sprintf( buf, "%s%s", ptr, "/.odbc.ini"); - /* i.e. searching ~/.odbc.ini */ +# ifdef OS2 + *buf = '\0'; + if( NULL != getenv("IODBC_INI") ) + { + strcpy( buf, getenv("IODBC_INI") ); + } + else + { + HMODULE hModule; + + if( NO_ERROR == DosQueryModuleHandle(DLL_NAME, &hModule) && + NO_ERROR == DosQueryModuleName(hModule, 256L, buf) ) + { + if( NULL != strrchr(buf, '.') ) + *(strchr(buf, '.')) = '\0'; + strcat( buf, ".ini" ); + } + else + { + strcpy( buf, "iodbc.ini" ); + } + + } + return buf; +# else +# if !defined(UNIX_PWD) + + i = GetWindowsDirectory((LPSTR)buf, size ); + + if( i == 0 || i > size - j ) + { + return NULL; + } + + sprintf( buf + i, "/iodbc.ini"); + + return buf; +# else + ptr = (char*)getpwuid(getuid()); + + if( ptr == NULL ) + { + return NULL; + } + + ptr = ((struct passwd*)ptr)->pw_dir; + + if( ptr == NULL || *ptr == '\0' ) + { + ptr = "/home"; + } + + if( size < STRLEN(ptr) + j ) + { + return NULL; + } + + sprintf( buf, "%s%s", ptr, "/.iodbc.ini"); + /* i.e. searching ~/.iodbc.ini */ +# endif +# endif #endif - return buf; + return buf; } -char* _iodbcdm_getkeyvalbydsn( - char* dsn, - int dsnlen, - char* keywd, - char* value, - int size ) +char* _iodbcdm_getkeyvalbydsn( + char* dsn, + int dsnlen, + char* keywd, + char* value, + int size ) /* read odbc init file to resolve the value of specified - * key from named or defaulted dsn section + * key from named or defaulted dsn section */ { - char buf[1024]; - char dsntk[SQL_MAX_DSN_LENGTH + 3] = { '[', '\0' }; - char token[1024]; /* large enough */ - FILE* file; - char pathbuf[1024]; - char* path; - -#define DSN_NOMATCH 0 -#define DSN_NAMED 1 -#define DSN_DEFAULT 2 - - int dsnid = DSN_NOMATCH; - int defaultdsn = DSN_NOMATCH; - - if( dsn == NULL || *dsn == 0 ) - { - dsn = "default"; - dsnlen = STRLEN(dsn); - } - - if( dsnlen == SQL_NTS ) - { - dsnlen = STRLEN(dsn); - } - - if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 ) - { - return NULL; - } - - if( dsnlen > sizeof(dsntk) - 2 ) - { - return NULL; - } - - value[0] = '\0'; - - STRNCAT( dsntk, dsn, dsnlen ); - STRCAT( dsntk, "]" ); - - dsnlen = dsnlen + 2; - - path = getinitfile(pathbuf, sizeof(pathbuf)); - - if( path == NULL ) - { - return NULL; - } - - file = (FILE*)fopen(path, "r"); - - if( file == NULL ) - { - return NULL; - } - - for(;;) - { - char* str; - - str = fgets(buf, sizeof(buf), file); - - if( str == NULL ) - { - break; - } - - if( *str == '[' ) - { - if( upper_strneq(str, "[default]", STRLEN("[default]")) ) - { - /* we only read first dsn default dsn - * section (as well as named dsn). - */ - if( defaultdsn == DSN_NOMATCH ) - { - dsnid = DSN_DEFAULT; - defaultdsn = DSN_DEFAULT; - } - else - { - dsnid = DSN_NOMATCH; - } - - continue; - } - else if( upper_strneq( str, dsntk, dsnlen ) ) - { - dsnid = DSN_NAMED; - } - else - { - dsnid = DSN_NOMATCH; - } - - continue; - } - else if( dsnid == DSN_NOMATCH ) - { - continue; - } - - str = readtoken(str, token); - - if( upper_strneq( keywd, token, STRLEN(keywd)) ) - { - str = readtoken(str, token); - - if( ! STREQ( token, "=") ) - /* something other than = */ - { - continue; - } - - str = readtoken(str, token); - - if( STRLEN(token) > size - 1) - { - break; - } - - STRNCPY(value, token, size); - /* copy the value(i.e. next token) to buf */ - - if( dsnid != DSN_DEFAULT ) - { - break; - } - } - } - - fclose(file); - - return (*value)? value:NULL; + char buf[1024]; + char dsntk[SQL_MAX_DSN_LENGTH + 3] = { '[', '\0' }; + char token[1024]; /* large enough */ + FILE* file; + char pathbuf[1024]; + char* path; + +#define DSN_NOMATCH 0 +#define DSN_NAMED 1 +#define DSN_DEFAULT 2 + + int dsnid = DSN_NOMATCH; + int defaultdsn = DSN_NOMATCH; + + if( dsn == NULL || *dsn == 0 ) + { + dsn = "default"; + dsnlen = STRLEN(dsn); + } + + if( dsnlen == SQL_NTS ) + { + dsnlen = STRLEN(dsn); + } + + if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 ) + { + return NULL; + } + + if( dsnlen > sizeof(dsntk) - 2 ) + { + return NULL; + } + + value[0] = '\0'; + + STRNCAT( dsntk, dsn, dsnlen ); + STRCAT( dsntk, "]" ); + + dsnlen = dsnlen + 2; + + path = getinitfile(pathbuf, sizeof(pathbuf)); + + if( path == NULL ) + { + return NULL; + } + + file = (FILE*)fopen(path, "r"); + + if( file == NULL ) + { + return NULL; + } + + for(;;) + { + char* str; + + str = fgets(buf, sizeof(buf), file); + + if( str == NULL ) + { + break; + } + + strtok( str, "\n\r" ); + + if( *str == '[' ) + { + if( upper_strneq(str, "[default]", STRLEN("[default]")) ) + { + /* we only read first dsn default dsn + * section (as well as named dsn). + */ + if( defaultdsn == DSN_NOMATCH ) + { + dsnid = DSN_DEFAULT; + defaultdsn = DSN_DEFAULT; + } + else + { + dsnid = DSN_NOMATCH; + } + + continue; + } + else if( upper_strneq( str, dsntk, dsnlen ) ) + { + dsnid = DSN_NAMED; + } + else + { + dsnid = DSN_NOMATCH; + } + + continue; + } + else if( dsnid == DSN_NOMATCH ) + { + continue; + } + + str = readtoken(str, token); + + if( upper_strneq( keywd, token, STRLEN(keywd)) ) + { + str = readtoken(str, token); + + if( ! STREQ( token, "=") ) + /* something other than = */ + { + continue; + } + + str = readtoken(str, token); + + if( STRLEN(token) > size - 1) + { + break; + } + + STRNCPY(value, token, size); + /* copy the value(i.e. next token) to buf */ + + if( dsnid != DSN_DEFAULT ) + { + break; + } + } + } + + fclose(file); + + return (*value)? value:NULL; } -char* _iodbcdm_getkeyvalinstr( - char* cnstr, - int cnlen, - char* keywd, - char* value, - int size ) +char* _iodbcdm_getkeyvalinstr( + char* cnstr, + int cnlen, + char* keywd, + char* value, + int size ) { - char token[1024] = { '\0' }; - int flag = 0; - - if( cnstr == NULL || value == NULL - || keywd == NULL || size < 1 ) - { - return NULL; - } - - if( cnlen == SQL_NTS ) - { - cnlen = STRLEN (cnstr); - } - - if( cnlen <= 0 ) - { - return NULL; - } - - for(;;) - { - cnstr = readtoken(cnstr, token); - - if( *token == '\0' ) - { - break; - } - - if( STREQ( token, ";" ) ) - { - flag = 0; - continue; - } - - switch(flag) - { - case 0: - if( upper_strneq(token, keywd, strlen(keywd)) ) - { - flag = 1; - } - break; - - case 1: - if( STREQ( token, "=" ) ) - { - flag = 2; - } - break; - - case 2: - if( size < strlen(token) + 1 ) - { - return NULL; - } - - STRNCPY( value, token, size ); - - return value; - - default: - break; - } - } - - return NULL; + char token[1024] = { '\0' }; + int flag = 0; + + if( cnstr == NULL || value == NULL + || keywd == NULL || size < 1 ) + { + return NULL; + } + + if( cnlen == SQL_NTS ) + { + cnlen = STRLEN (cnstr); + } + + if( cnlen <= 0 ) + { + return NULL; + } + + for(;;) + { + cnstr = readtoken(cnstr, token); + + if( *token == '\0' ) + { + break; + } + + if( STREQ( token, ";" ) ) + { + flag = 0; + continue; + } + + switch(flag) + { + case 0: + if( upper_strneq(token, keywd, strlen(keywd)) ) + { + flag = 1; + } + break; + + case 1: + if( STREQ( token, "=" ) ) + { + flag = 2; + } + break; + + case 2: + if( size < strlen(token) + 1 ) + { + return NULL; + } + + STRNCPY( value, token, size ); + + return value; + + default: + break; + } + } + + return NULL; } diff --git a/src/iodbc/postgres/odbc_funcs.h b/src/iodbc/odbc_funcs.h similarity index 100% rename from src/iodbc/postgres/odbc_funcs.h rename to src/iodbc/odbc_funcs.h diff --git a/src/iodbc/postgres/odbc_types.h b/src/iodbc/odbc_types.h similarity index 72% rename from src/iodbc/postgres/odbc_types.h rename to src/iodbc/odbc_types.h index 36333128fa..b7d78b8b95 100644 --- a/src/iodbc/postgres/odbc_types.h +++ b/src/iodbc/odbc_types.h @@ -1,4 +1,5 @@ -#define SQL_SPEC_STRING "02.00" /* String constant for version */ +#define SQL_MAX_USER_NAME_LEN 107 +#define SQL_SPEC_STRING "02.50" /* String constant for version */ #define SQL_ACTIVE_CONNECTIONS 0 #define SQL_ACTIVE_STATEMENTS 1 #define SQL_DATA_SOURCE_NAME 2 @@ -45,23 +46,9 @@ #define SQL_CONVERT_FUNCTIONS 48 #define SQL_SYSTEM_FUNCTIONS 51 #define SQL_NUMERIC_FUNCTIONS 49 -#define SQL_FN_NUM_ABS 0x00000001L -#define SQL_FN_NUM_FLOOR 0x00000200L -#define SQL_FN_NUM_MOD 0x00000800L -#define SQL_FN_NUM_SIGN 0x00001000L #define SQL_STRING_FUNCTIONS 50 -#define SQL_FN_STR_CONCAT 0x00000001L -#define SQL_FN_STR_LEFT 0x00000004L -#define SQL_FN_STR_LENGTH 0x00000010L -#define SQL_FN_STR_LOCATE 0x00000020L -#define SQL_FN_STR_LOCATE_2 0x00010000L -#define SQL_FN_STR_RIGHT 0x00000200L -#define SQL_FN_STR_SUBSTRING 0x00000800L -#define SQL_FN_STR_REPLACE 0x00000100L -#define SQL_FN_STR_LCASE 0x00000040L -#define SQL_FN_STR_UCASE 0x00001000L #define SQL_TIMEDATE_FUNCTIONS 52 -#define SQL_FN_TD_CURDATE 0x00000002L + #define SQL_CONVERT_BIGINT 53 #define SQL_CONVERT_BIT 55 #define SQL_CONVERT_CHAR 56 @@ -116,6 +103,8 @@ #define SQL_MAX_COLUMNS_IN_INDEX 98 #define SQL_MAX_INDEX_SIZE 102 #define SQL_MAX_STATEMENT_LEN 105 +#define SQL_MAX_OPTION_STRING_LENGTH 256 + #define SQL_QL_START 0x0001L #define SQL_SEARCHABLE 3 #define SQL_IDENTIFIER_CASE 28 @@ -164,17 +153,10 @@ #define SQL_KEYWORDS 89 #define SQL_SPECIAL_CHARACTERS 94 #define SQL_TIMEDATE_ADD_INTERVALS 109 +#define SQL_IC_MIXED 0x0004 #define SQL_FN_SYS_DBNAME 0x00000002L #define SQL_FN_SYS_IFNULL 0x00000004L #define SQL_FN_SYS_USERNAME 0x00000001L -#define SQL_FN_NUM_CEILING 0x00000020L -#define SQL_FN_NUM_EXP 0x00000100L -#define SQL_FN_NUM_LOG 0x00000400L -#define SQL_FN_NUM_LOG10 0x00080000L -#define SQL_FN_NUM_LOG10 0x00080000L -#define SQL_FN_NUM_POWER 0x00100000L -#define SQL_FN_NUM_SQRT 0x00004000L -#define SQL_FN_NUM_ROUND 0x00400000L #define SQL_FN_STR_INSERT 0x00000002L #define SQL_FN_STR_LTRIM 0x00000008L #define SQL_FN_STR_RTRIM 0x00000400L @@ -192,107 +174,110 @@ #define SQL_COLUMN_TABLE_NAME 15 #define SQL_LEN_DATA_AT_EXEC_OFFSET (-100) #define SQL_CB_NULL 0x0000 -#define SQL_FN_NUM_RAND 0x00020000L +#define SQL_TC_NONE 0x0000 #define SQL_NOSCAN_OFF 0UL #define SQL_ASYNC_ENABLE_OFF 0UL -#define SQL_CURSOR_STATIC 3UL #define SQL_SC_NON_UNIQUE 0UL #define SQL_UB_OFF 0UL #define SQL_PC_NOT_PSEUDO 1 #define SQL_PC_NON_PSEUDO SQL_PC_NOT_PSEUDO #define SQL_UNSEARCHABLE 0 +#define SQL_FD_FETCH_NEXT 0x00000001L +#define SQL_FD_FETCH_FIRST 0x00000002L +#define SQL_FD_FETCH_LAST 0x00000004L +#define SQL_FD_FETCH_PRIOR 0x00000008L +#define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR +#define SQL_FD_FETCH_ABSOLUTE 0x00000010L +#define SQL_FD_FETCH_RELATIVE 0x00000020L -/* - * Following constants are missed in original odbc_types.h - * Added by serg@informika.ru - */ - -#define SQL_UNKNOWN_TYPE 0 - -/* SQLColAttributes subdefines for SQL_COLUMN_SEARCHABLE */ -/* These are also used by SQLGetInfo */ -#define SQL_UNSEARCHABLE 0 -#define SQL_LIKE_ONLY 1 -#define SQL_ALL_EXCEPT_LIKE 2 -#define SQL_SEARCHABLE 3 -#define SQL_PRED_SEARCHABLE SQL_SEARCHABLE - -/* Special return values for SQLGetData */ -#define SQL_NO_TOTAL (-4) - -/* SQL_CORRELATION_NAME values */ - -#define SQL_CN_NONE 0x0000 -#define SQL_CN_DIFFERENT 0x0001 -#define SQL_CN_ANY 0x0002 - -/* SQL_NULL_COLLATION values */ +#define SQL_FN_NUM_ABS 0x00000001L +#define SQL_FN_NUM_ACOS 0x00000002L +#define SQL_FN_NUM_ASIN 0x00000004L +#define SQL_FN_NUM_ATAN 0x00000008L +#define SQL_FN_NUM_ATAN2 0x00000010L +#define SQL_FN_NUM_CEILING 0x00000020L +#define SQL_FN_NUM_COS 0x00000040L +#define SQL_FN_NUM_COT 0x00000080L +#define SQL_FN_NUM_EXP 0x00000100L +#define SQL_FN_NUM_FLOOR 0x00000200L +#define SQL_FN_NUM_LOG 0x00000400L +#define SQL_FN_NUM_MOD 0x00000800L +#define SQL_FN_NUM_SIGN 0x00001000L +#define SQL_FN_NUM_SIN 0x00002000L +#define SQL_FN_NUM_SQRT 0x00004000L +#define SQL_FN_NUM_TAN 0x00008000L +#define SQL_FN_NUM_PI 0x00010000L +#define SQL_FN_NUM_RAND 0x00020000L +#define SQL_FN_NUM_DEGREES 0x00040000L +#define SQL_FN_NUM_LOG10 0x00080000L +#define SQL_FN_NUM_POWER 0x00100000L +#define SQL_FN_NUM_RADIANS 0x00200000L +#define SQL_FN_NUM_ROUND 0x00400000L +#define SQL_FN_NUM_TRUNCATE 0x00800000L -#define SQL_NC_HIGH 0 -#define SQL_NC_LOW 1 -#define SQL_NC_START 0x0002 -#define SQL_NC_END 0x0004 +#define SQL_FN_STR_CONCAT 0x00000001L +#define SQL_FN_STR_INSERT 0x00000002L +#define SQL_FN_STR_LEFT 0x00000004L +#define SQL_FN_STR_LTRIM 0x00000008L +#define SQL_FN_STR_LENGTH 0x00000010L +#define SQL_FN_STR_LOCATE 0x00000020L +#define SQL_FN_STR_LCASE 0x00000040L +#define SQL_FN_STR_REPEAT 0x00000080L +#define SQL_FN_STR_REPLACE 0x00000100L +#define SQL_FN_STR_RIGHT 0x00000200L +#define SQL_FN_STR_RTRIM 0x00000400L +#define SQL_FN_STR_SUBSTRING 0x00000800L +#define SQL_FN_STR_UCASE 0x00001000L +#define SQL_FN_STR_ASCII 0x00002000L +#define SQL_FN_STR_CHAR 0x00004000L +#define SQL_FN_STR_DIFFERENCE 0x00008000L +#define SQL_FN_STR_LOCATE_2 0x00010000L +#define SQL_FN_STR_SOUNDEX 0x00020000L +#define SQL_FN_STR_SPACE 0x00040000L +#define SQL_FN_STR_BIT_LENGTH 0x00080000L +#define SQL_FN_STR_CHAR_LENGTH 0x00100000L +#define SQL_FN_STR_CHARACTER_LENGTH 0x00200000L +#define SQL_FN_STR_OCTET_LENGTH 0x00400000L +#define SQL_FN_STR_POSITION 0x00800000L -/* SQL_GROUP_BY values */ +#define SQL_FN_TD_NOW 0x00000001L +#define SQL_FN_TD_CURDATE 0x00000002L +#define SQL_FN_TD_DAYOFMONTH 0x00000004L +#define SQL_FN_TD_DAYOFWEEK 0x00000008L +#define SQL_FN_TD_DAYOFYEAR 0x00000010L +#define SQL_FN_TD_MONTH 0x00000020L +#define SQL_FN_TD_QUARTER 0x00000040L +#define SQL_FN_TD_WEEK 0x00000080L +#define SQL_FN_TD_YEAR 0x00000100L +#define SQL_FN_TD_CURTIME 0x00000200L +#define SQL_FN_TD_HOUR 0x00000400L +#define SQL_FN_TD_MINUTE 0x00000800L +#define SQL_FN_TD_SECOND 0x00001000L +#define SQL_FN_TD_TIMESTAMPADD 0x00002000L +#define SQL_FN_TD_TIMESTAMPDIFF 0x00004000L +#define SQL_FN_TD_DAYNAME 0x00008000L +#define SQL_FN_TD_MONTHNAME 0x00010000L +#define SQL_FN_TD_CURRENT_DATE 0x00020000L +#define SQL_FN_TD_CURRENT_TIME 0x00040000L +#define SQL_FN_TD_CURRENT_TIMESTAMP 0x00080000L +#define SQL_FN_TD_EXTRACT 0x00100000L -#define SQL_GB_NOT_SUPPORTED 0x0000 -#define SQL_GB_GROUP_BY_EQUALS_SELECT 0x0001 -#define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002 +#define SQL_POS_POSITION 0x00000001L +#define SQL_AT_ADD_COLUMN 0x00000001L +#define SQL_AT_DROP_COLUMN 0x00000002L #define SQL_GB_NO_RELATION 0x0003 - -/* SQL_IDENTIFIER_CASE values */ -#define SQL_IC_UPPER 1 -#define SQL_IC_LOWER 2 -#define SQL_IC_SENSITIVE 3 -#define SQL_IC_MIXED 4 - -/* SQL_ODBC_SQL_CONFORMANCE values */ - -#define SQL_OSC_MINIMUM 0x0000 -#define SQL_OSC_CORE 0x0001 -#define SQL_OSC_EXTENDED 0x0002 - -/* SQL_SCROLL_OPTIONS masks */ - -#define SQL_SO_FORWARD_ONLY 0x00000001L -#define SQL_SO_KEYSET_DRIVEN 0x00000002L -#define SQL_SO_DYNAMIC 0x00000004L -#define SQL_SO_MIXED 0x00000008L -#define SQL_SO_STATIC 0x00000010L - -/* SQL_TXN_CAPABLE values */ - -#define SQL_TC_NONE 0 -#define SQL_TC_DML 1 -#define SQL_TC_ALL 2 -#define SQL_TC_DDL_COMMIT 3 -#define SQL_TC_DDL_IGNORE 4 - -/* SQL_ALTER_TABLE bitmasks */ - -#if (ODBCVER >= 0x0200) -#define SQL_AT_ADD_COLUMN 0x00000001L -#define SQL_AT_DROP_COLUMN 0x00000002L -#endif /* ODBCVER >= 0x0200 */ - -#define SQL_MAX_USER_NAME_LEN 107 - -/* SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE */ - +#define SQL_BIND_BY_COLUMN 0UL +#define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN /* Default value */ #define SQL_ATTR_READONLY 0 -#define SQL_ATTR_WRITE 1 -#define SQL_ATTR_READWRITE_UNKNOWN 2 - -/* SQLExtendedFetch "rgfRowStatus" element values */ - -#define SQL_ROW_SUCCESS 0 -#define SQL_ROW_DELETED 1 -#define SQL_ROW_UPDATED 2 -#define SQL_ROW_NOROW 3 -#define SQL_ROW_ADDED 4 -#define SQL_ROW_ERROR 5 +#define SQL_FETCH_PREV SQL_FETCH_PRIOR +#define SQL_ROW_SUCCESS 0 +#define SQL_ROW_NOROW 3 +#define SQL_NOSCAN 2 -/* SQL_TIMEDATE_FUNCTIONS */ +#define SQL_RD_OFF 0UL +#define SQL_RD_ON 1UL +#define SQL_RD_DEFAULT SQL_RD_ON -#define SQL_FN_TD_NOW 0x00000001L -#define SQL_FN_TD_CURTIME 0x00000200L +#define SQL_NOSCAN_OFF 0UL +#define SQL_NOSCAN_ON 1UL +#define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF diff --git a/src/iodbc/postgres/isql.h b/src/iodbc/postgres/isql.h deleted file mode 100644 index 4b622494d8..0000000000 --- a/src/iodbc/postgres/isql.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef _INTRINSIC_SQL_H -# define _INTRINSIC_SQL_H - -#ifndef OS2 -typedef unsigned char UCHAR; -#endif -typedef long int SDWORD; -typedef short int SWORD; -typedef unsigned long int UDWORD; -typedef unsigned short int UWORD; - -#ifndef FAR -# define FAR -#endif -#ifndef NEAR -# define NEAR -#endif -#ifndef HANDLE - typedef int HANDLE; - #endif -#ifndef HGLOBAL - typedef HANDLE HGLOBAL; - #endif -#ifndef SQL_INDEX_OTHER -#define SQL_INDEX_OTHER 3 - #endif - -# ifndef BOOL -# define BOOL int -# endif -# ifndef CHAR -# define CHAR char -# endif -# ifndef FALSE -# define FALSE (0 != 0) -# endif -# ifndef HWND -# define HWND int -# endif -# ifndef SQLHWND -# define SQLHWND int -# endif -# ifndef LONG -# define LONG long -# endif -# ifndef PASCAL -# define PASCAL -# endif -# ifndef SHORT -# define SHORT short -# endif -# ifndef SQL_API -# define SQL_API -# endif -# ifndef SQL_LOCAL_API -# define SQL_LOCAL_API -# endif -# ifndef TRUE -# define TRUE (0 == 0) -# endif - -typedef struct tagDATE_STRUCT -{ -SWORD year; -UWORD month; -UWORD day; -} DATE_STRUCT; - -typedef struct tagTIME_STRUCT -{ -UWORD hour; -UWORD minute; -UWORD second; -} TIME_STRUCT; - -typedef struct tagTIMESTAMP_STRUCT -{ -SWORD year; -UWORD month; -UWORD day; -UWORD hour; -UWORD minute; -UWORD second; -UDWORD fraction; -} TIMESTAMP_STRUCT; - - - -typedef UCHAR FAR* PTR, - FAR* SQLPTR; - -typedef void FAR* HENV, - FAR* SQLHENV; -typedef void FAR* HDBC, - FAR* SQLHDBC; -typedef void FAR* HSTMT, - FAR* SQLHSTMT; -typedef SDWORD SQLINTEGER; -typedef signed short RETCODE; -typedef UCHAR SQLCHAR; -typedef UWORD SQLUSMALLINT; -typedef PTR SQLPOINTER; -typedef SWORD SQLSMALLINT; -typedef UDWORD SQLUINTEGER; - -# ifdef WIN32 -# define SQL_API __stdcall -# else -# define SQL_API /* giovanni EXPORT CALLBACK */ -# endif -# ifdef OS2 -# ifdef BCPP -# define _Optlink -# define _System _syscall -# endif -# undef SQL_API -# define SQL_API _System -# endif - -# define ODBCVER 0x0200 - -# define SQL_MAX_MESSAGE_LENGTH 512 -# define SQL_MAX_DSN_LENGTH 32 - -/* return code */ -# define SQL_INVALID_HANDLE (-2) -# define SQL_ERROR (-1) -# define SQL_SUCCESS 0 -# define SQL_SUCCESS_WITH_INFO 1 -# define SQL_NO_DATA_FOUND 100 - -/* standard SQL datatypes (agree with ANSI type numbering) */ -# define SQL_CHAR 1 -# define SQL_NUMERIC 2 -# define SQL_DECIMAL 3 -# define SQL_INTEGER 4 -# define SQL_SMALLINT 5 -# define SQL_FLOAT 6 -# define SQL_REAL 7 -# define SQL_DOUBLE 8 -# define SQL_VARCHAR 12 - -# define SQL_TYPE_MIN SQL_CHAR -# define SQL_TYPE_NULL 0 -# define SQL_TYPE_MAX SQL_VARCHAR - -/* C to SQL datatype mapping */ -# define SQL_C_CHAR SQL_CHAR -# define SQL_C_LONG SQL_INTEGER -# define SQL_C_SHORT SQL_SMALLINT -# define SQL_C_FLOAT SQL_REAL -# define SQL_C_DOUBLE SQL_DOUBLE -# define SQL_C_DEFAULT 99 - -# define SQL_NO_NULLS 0 -# define SQL_NULLABLE 1 -# define SQL_NULLABLE_UNKNOWN 2 - -/* some special length values */ -# define SQL_NULL_DATA (-1) -# define SQL_DATA_AT_EXEC (-2) -# define SQL_NTS (-3) - -/* SQLFreeStmt flag values */ -# define SQL_CLOSE 0 -# define SQL_DROP 1 -# define SQL_UNBIND 2 -# define SQL_RESET_PARAMS 3 - -/* SQLTransact flag values */ -# define SQL_COMMIT 0 -# define SQL_ROLLBACK 1 - -/* SQLColAttributes flag values */ -# define SQL_COLUMN_COUNT 0 -# define SQL_COLUMN_LABEL 18 -# define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL -# define SQL_COLUMN_DRIVER_START 1000 - -# define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT - -/* Null handles */ -# define SQL_NULL_HENV 0 -# define SQL_NULL_HDBC 0 -# define SQL_NULL_HSTMT 0 - -#endif - diff --git a/src/iodbc/postgres/isqlext.h b/src/iodbc/postgres/isqlext.h deleted file mode 100644 index 164ea16253..0000000000 --- a/src/iodbc/postgres/isqlext.h +++ /dev/null @@ -1,321 +0,0 @@ -#ifndef _INTRINSIC_SQLEXT_H -# define _INTRINSIC_SQLEXT_H - -# include <../iodbc/postgres/isql.h> - -# define SQL_STILL_EXECUTING 2 -# define SQL_NEED_DATA 99 - -/* extend SQL datatypes */ -# define SQL_DATE 9 -# define SQL_TIME 10 -# define SQL_TIMESTAMP 11 -# define SQL_LONGVARCHAR (-1) -# define SQL_BINARY (-2) -# define SQL_VARBINARY (-3) -# define SQL_LONGVARBINARY (-4) -# define SQL_BIGINT (-5) -# define SQL_TINYINT (-6) -# define SQL_BIT (-7) /* conflict with SQL3 ??? */ -# define SQL_TYPE_DRIVER_START (-80) - -/* C to SQL datatype mapping */ -# define SQL_C_DATE SQL_DATE -# define SQL_C_TIME SQL_TIME -# define SQL_C_TIMESTAMP SQL_TIMESTAMP -# define SQL_C_BINARY SQL_BINARY -# define SQL_C_BIT SQL_BIT -# define SQL_C_TINYINT SQL_TINYINT - -# define SQL_SIGNED_OFFSET (-20) -# define SQL_UNSIGNED_OFFSET (-22) - -# define SQL_C_SLONG (SQL_C_LONG + SQL_SIGNED_OFFSET) -# define SQL_C_SSHORT (SQL_C_SHORT + SQL_SIGNED_OFFSET) -# define SQL_C_STINYINT (SQL_TINYINT + SQL_SIGNED_OFFSET) -# define SQL_C_ULONG (SQL_C_LONG + SQL_UNSIGNED_OFFSET) -# define SQL_C_USHORT (SQL_C_SHORT + SQL_UNSIGNED_OFFSET) -# define SQL_C_UTINYINT (SQL_TINYINT + SQL_UNSIGNED_OFFSET) -# define SQL_C_BOOKMARK SQL_C_ULONG - -# if defined(SQL_TYPE_MIN) -# undef SQL_TYPE_MIN -# define SQL_TYPE_MIN SQL_BIT -/* Note:If SQL_BIT uses SQL3 value (i.e. 14) then, - * SQL_TYPE_MIN need to be defined as SQL_TINYINT - * (i.e. -6). - */ -# endif - -# define SQL_ALL_TYPES 0 - -/* SQLDriverConnect flag values */ -# define SQL_DRIVER_NOPROMPT 0 -# define SQL_DRIVER_COMPLETE 1 -# define SQL_DRIVER_PROMPT 2 -# define SQL_DRIVER_COMPLETE_REQUIRED 3 - -/* SQLSetParam extensions */ -# define SQL_DEFAULT_PARAM (-5) -# define SQL_IGNORE (-6) - -/* function number for SQLGetFunctions and _iodbcdm_getproc */ -# define SQL_API_SQLALLOCCONNECT 1 -# define SQL_API_SQLALLOCENV 2 -# define SQL_API_SQLALLOCSTMT 3 -# define SQL_API_SQLBINDCOL 4 -# define SQL_API_SQLCANCEL 5 -# define SQL_API_SQLCOLATTRIBUTES 6 -# define SQL_API_SQLCONNECT 7 -# define SQL_API_SQLDESCRIBECOL 8 -# define SQL_API_SQLDISCONNECT 9 -# define SQL_API_SQLERROR 10 -# define SQL_API_SQLEXECDIRECT 11 -# define SQL_API_SQLEXECUTE 12 -# define SQL_API_SQLFETCH 13 -# define SQL_API_SQLFREECONNECT 14 -# define SQL_API_SQLFREEENV 15 -# define SQL_API_SQLFREESTMT 16 -# define SQL_API_SQLGETCURSORNAME 17 -# define SQL_API_SQLNUMRESULTCOLS 18 -# define SQL_API_SQLPREPARE 19 -# define SQL_API_SQLROWCOUNT 20 -# define SQL_API_SQLSETCURSORNAME 21 -# define SQL_API_SQLSETPARAM 22 -# define SQL_API_SQLTRANSACT 23 - -# define SQL_NUM_FUNCTIONS 23 - -# define SQL_EXT_API_START 40 - -# define SQL_API_SQLCOLUMNS 40 - -# define SQL_API_SQLDRIVERCONNECT 41 -# define SQL_API_SQLGETCONNECTOPTION 42 -# define SQL_API_SQLGETDATA 43 -# define SQL_API_SQLGETFUNCTIONS 44 -# define SQL_API_SQLGETINFO 45 -# define SQL_API_SQLGETSTMTOPTION 46 -# define SQL_API_SQLGETTYPEINFO 47 -# define SQL_API_SQLPARAMDATA 48 -# define SQL_API_SQLPUTDATA 49 -# define SQL_API_SQLSETCONNECTOPTION 50 -# define SQL_API_SQLSETSTMTOPTION 51 -# define SQL_API_SQLSPECIALCOLUMNS 52 -# define SQL_API_SQLSTATISTICS 53 -# define SQL_API_SQLTABLES 54 - -# define SQL_API_SQLBROWSECONNECT 55 -# define SQL_API_SQLCOLUMNPRIVILEGES 56 -# define SQL_API_SQLDATASOURCES 57 -# define SQL_API_SQLDESCRIBEPARAM 58 -# define SQL_API_SQLEXTENDEDFETCH 59 -# define SQL_API_SQLFOREIGNKEYS 60 -# define SQL_API_SQLMORERESULTS 61 -# define SQL_API_SQLNATIVESQL 62 -# define SQL_API_SQLNUMPARAMS 63 -# define SQL_API_SQLPARAMOPTIONS 64 -# define SQL_API_SQLPRIMARYKEYS 65 -# define SQL_API_SQLPROCEDURECOLUMNS 66 -# define SQL_API_SQLPROCEDURES 67 -# define SQL_API_SQLSETPOS 68 -# define SQL_API_SQLSETSCROLLOPTIONS 69 -# define SQL_API_SQLTABLEPRIVILEGES 70 - -# define SQL_API_SQLDRIVERS 71 -# define SQL_API_SQLBINDPARAMETER 72 -# define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER - -# define SQL_API_ALL_FUNCTIONS 0 - -/* SQLGetInfo infor number */ -# define SQL_INFO_FIRST 0 -# define SQL_DRIVER_HDBC 3 -# define SQL_DRIVER_HENV 4 -# define SQL_DRIVER_HSTMT 5 -# define SQL_DRIVER_NAME 6 -# define SQL_ODBC_VER 10 -# define SQL_CURSOR_COMMIT_BEHAVIOR 23 -# define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 -# define SQL_DEFAULT_TXN_ISOLATION 26 - -# define SQL_TXN_ISOLATION_OPTION 72 -# define SQL_NON_NULLABLE_COLUMNS 75 - -# define SQL_DRIVER_HLIB 76 -# define SQL_DRIVER_ODBC_VER 77 - -# define SQL_QUALIFIER_LOCATION 114 - -# define SQL_INFO_LAST SQL_QUALIFIER_LOCATION - -# define SQL_INFO_DRIVER_START 1000 - - -/* SQL_TXN_ISOLATION_OPTION masks */ -# define SQL_TXN_READ_UNCOMMITTED 0x00000001L -# define SQL_TXN_READ_COMMITTED 0x00000002L -# define SQL_TXN_REPEATABLE_READ 0x00000004L -# define SQL_TXN_SERIALIZABLE 0x00000008L -# define SQL_TXN_VERSIONING 0x00000010L - -/* SQL_CURSOR_COMMIT_BEHAVIOR and SQL_CURSOR_ROLLBACK_BEHAVIOR values */ - -# define SQL_CB_DELETE 0x0000 -# define SQL_CB_CLOSE 0x0001 -# define SQL_CB_PRESERVE 0x0002 - -/* options for SQLGetStmtOption/SQLSetStmtOption */ -# define SQL_QUERY_TIMEOUT 0 -# define SQL_MAX_ROWS 1 -# define SQL_NOSCAN 2 -# define SQL_MAX_LENGTH 3 -# define SQL_ASYNC_ENABLE 4 -# define SQL_BIND_TYPE 5 -# define SQL_CURSOR_TYPE 6 -# define SQL_CONCURRENCY 7 -# define SQL_KEYSET_SIZE 8 -# define SQL_ROWSET_SIZE 9 -# define SQL_SIMULATE_CURSOR 10 -# define SQL_RETRIEVE_DATA 11 -# define SQL_USE_BOOKMARKS 12 -# define SQL_GET_BOOKMARK 13 /* GetStmtOption Only */ -# define SQL_ROW_NUMBER 14 /* GetStmtOption Only */ -# define SQL_STMT_OPT_MAX SQL_ROW_NUMBER - -# define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT - - -/* SQL_QUERY_TIMEOUT options */ -# define SQL_QUERY_TIMEOUT_DEFAULT 0UL - -/* SQL_MAX_ROWS options */ -# define SQL_MAX_ROWS_DEFAULT 0UL - -/* SQL_MAX_LENGTH options */ -# define SQL_MAX_LENGTH_DEFAULT 0UL - -/* SQL_CONCURRENCY options */ -# define SQL_CONCUR_READ_ONLY 1 -# define SQL_CONCUR_LOCK 2 -# define SQL_CONCUR_ROWVER 3 -# define SQL_CONCUR_VALUES 4 - -/* options for SQLSetConnectOption/SQLGetConnectOption */ -# define SQL_ACCESS_MODE 101 -# define SQL_AUTOCOMMIT 102 -# define SQL_LOGIN_TIMEOUT 103 -# define SQL_OPT_TRACE 104 -# define SQL_OPT_TRACEFILE 105 -# define SQL_TRANSLATE_DLL 106 -# define SQL_TRANSLATE_OPTION 107 -# define SQL_TXN_ISOLATION 108 -# define SQL_CURRENT_QUALIFIER 109 -# define SQL_ODBC_CURSORS 110 -# define SQL_QUIET_MODE 111 -# define SQL_PACKET_SIZE 112 -# define SQL_CONN_OPT_MAX SQL_PACKET_SIZE -# define SQL_CONNECT_OPT_DRVR_START 1000 - -# define SQL_CONN_OPT_MIN SQL_ACCESS_MODE - -/* SQL_ACCESS_MODE options */ -# define SQL_MODE_READ_WRITE 0UL -# define SQL_MODE_READ_ONLY 1UL -# define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE - -/* SQL_AUTOCOMMIT options */ -# define SQL_AUTOCOMMIT_OFF 0UL -# define SQL_AUTOCOMMIT_ON 1UL -# define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON - -/* SQL_LOGIN_TIMEOUT options */ -# define SQL_LOGIN_TIMEOUT_DEFAULT 15UL - -/* SQL_OPT_TRACE options */ -# define SQL_OPT_TRACE_OFF 0UL -# define SQL_OPT_TRACE_ON 1UL -# define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF -# define SQL_OPT_TRACE_FILE_DEFAULT "odbc.log" - -/* SQL_ODBC_CURSORS options */ -# define SQL_CUR_USE_IF_NEEDED 0UL -# define SQL_CUR_USE_ODBC 1UL -# define SQL_CUR_USE_DRIVER 2UL -# define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER - -/* Column types and scopes in SQLSpecialColumns. */ -# define SQL_BEST_ROWID 1 -# define SQL_ROWVER 2 - -# define SQL_SCOPE_CURROW 0 -# define SQL_SCOPE_TRANSACTION 1 -# define SQL_SCOPE_SESSION 2 - -/* Operations in SQLSetPos */ -# define SQL_ADD 4 - -/* Lock options in SQLSetPos */ -# define SQL_LOCK_NO_CHANGE 0 -# define SQL_LOCK_EXCLUSIVE 1 -# define SQL_LOCK_UNLOCK 2 - -/* SQLExtendedFetch flag values */ -# define SQL_FETCH_NEXT 1 -# define SQL_FETCH_FIRST 2 -# define SQL_FETCH_LAST 3 -# define SQL_FETCH_PRIOR 4 -# define SQL_FETCH_ABSOLUTE 5 -# define SQL_FETCH_RELATIVE 6 -# define SQL_FETCH_BOOKMARK 8 - -/* Defines for SQLBindParameter/SQLProcedureColumns */ -# define SQL_PARAM_TYPE_UNKNOWN 0 -# define SQL_PARAM_INPUT 1 -# define SQL_PARAM_INPUT_OUTPUT 2 -# define SQL_RESULT_COL 3 -# define SQL_PARAM_OUTPUT 4 - -/* Defines used by Driver Manager for mapping SQLSetParam to SQLBindParameter */ -# define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT -# define SQL_SETPARAM_VALUE_MAX (-1L) - -/* SQLStatistics flag values */ -# define SQL_INDEX_UNIQUE 0 -# define SQL_INDEX_ALL 1 - -# define SQL_QUICK 0 -# define SQL_ENSURE 1 - -/* SQLSetScrollOption flag values */ -# define SQL_SCROLL_FORWARD_ONLY 0L -# define SQL_SCROLL_KEYSET_DRIVEN (-1L) -# define SQL_SCROLL_DYNAMIC (-2L) -# define SQL_SCROLL_STATIC (-3L) - -# if defined(__cplusplus) || defined(__IBMCPP__) - extern "C" { -# endif - - -/* SQL CONVERT_FUNCTIONS function */ -#define SQL_FN_CVT_CONVERT 0x00000001L - -/* SQL_SUBQUERIES masks */ - -#define SQL_SQ_COMPARISON 0x00000001L -#define SQL_SQ_EXISTS 0x00000002L -#define SQL_SQ_IN 0x00000004L -#define SQL_SQ_QUANTIFIED 0x00000008L -#define SQL_SQ_CORRELATED_SUBQUERIES 0x00000010L - - - -RETCODE SQL_API SQLSetConnectOption (HDBC, UWORD, UDWORD); -RETCODE SQL_API SQLNumResultCols ( HSTMT, SWORD FAR* ); - -# if defined(__cplusplus) || defined(__IBMCPP__) - } -# endif - -#endif diff --git a/src/iodbc/prepare.c b/src/iodbc/prepare.c index 9e71ea0c4a..a0c215ca25 100644 --- a/src/iodbc/prepare.c +++ b/src/iodbc/prepare.c @@ -1,6 +1,6 @@ /** Prepare a query - Copyright (C) 1995 by Ke Jin + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,511 +27,512 @@ #include <../iodbc/itrace.h> -RETCODE SQL_API SQLPrepare ( - HSTMT hstmt, - UCHAR FAR* szSqlStr, - SDWORD cbSqlStr ) + +RETCODE SQL_API SQLPrepare ( + HSTMT hstmt, + UCHAR FAR* szSqlStr, + SDWORD cbSqlStr ) { - STMT_t FAR* pstmt = (STMT_t*)hstmt; - - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode = SQL_SUCCESS; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - /* not on asyn state */ - switch( pstmt->state ) - { - case en_stmt_fetched: - case en_stmt_xfetched: - sqlstat = en_24000; - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - default: - break; - } - } - else if( pstmt->asyn_on != en_Prepare ) - { - /* asyn on other */ - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - if( szSqlStr == NULL ) - { - PUSHSQLERR ( pstmt->herr, en_S1009 ); - - return SQL_ERROR; - } - - if( cbSqlStr < 0 && cbSqlStr != SQL_NTS ) - { - PUSHSQLERR ( pstmt->herr, en_S1090 ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_Prepare ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Prepare, ( - pstmt->dhstmt, szSqlStr, cbSqlStr) ) + STMT_t FAR* pstmt = (STMT_t*)hstmt; + + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode = SQL_SUCCESS; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + /* not on asyn state */ + switch( pstmt->state ) + { + case en_stmt_fetched: + case en_stmt_xfetched: + sqlstat = en_24000; + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + default: + break; + } + } + else if( pstmt->asyn_on != en_Prepare ) + { + /* asyn on other */ + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + if( szSqlStr == NULL ) + { + PUSHSQLERR ( pstmt->herr, en_S1009 ); + + return SQL_ERROR; + } + + if( cbSqlStr < 0 && cbSqlStr != SQL_NTS ) + { + PUSHSQLERR ( pstmt->herr, en_S1090 ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_Prepare ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_Prepare, ( + pstmt->dhstmt, szSqlStr, cbSqlStr) ) #if 0 - retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr ); + retcode = hproc ( pstmt->dhstmt, szSqlStr, cbSqlStr ); #endif - /* stmt state transition */ - if( pstmt->asyn_on == en_Prepare ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - return retcode; - - case SQL_STILL_EXECUTING: - default: - return retcode; - } - } - - switch( retcode ) - { - case SQL_STILL_EXECUTING: - pstmt->asyn_on = en_Prepare; - break; - - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - pstmt->state = en_stmt_prepared; - pstmt->prep_state = 1; - break; - - case SQL_ERROR: - switch( pstmt->state ) - { - case en_stmt_prepared: - case en_stmt_executed: - pstmt->state = en_stmt_allocated; - pstmt->prep_state = 0; - break; - - default: - break; - } - - default: - break; - } - - return retcode; + /* stmt state transition */ + if( pstmt->asyn_on == en_Prepare ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + return retcode; + + case SQL_STILL_EXECUTING: + default: + return retcode; + } + } + + switch( retcode ) + { + case SQL_STILL_EXECUTING: + pstmt->asyn_on = en_Prepare; + break; + + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + pstmt->state = en_stmt_prepared; + pstmt->prep_state = 1; + break; + + case SQL_ERROR: + switch( pstmt->state ) + { + case en_stmt_prepared: + case en_stmt_executed: + pstmt->state = en_stmt_allocated; + pstmt->prep_state = 0; + break; + + default: + break; + } + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLSetCursorName ( - HSTMT hstmt, - UCHAR FAR* szCursor, - SWORD cbCursor ) +RETCODE SQL_API SQLSetCursorName ( + HSTMT hstmt, + UCHAR FAR* szCursor, + SWORD cbCursor ) { - STMT_t FAR* pstmt = (STMT_t*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - - RETCODE retcode = SQL_SUCCESS; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - if( szCursor == NULL ) - { - PUSHSQLERR ( pstmt->herr, en_S1009 ); - - return SQL_ERROR; - } - - if( cbCursor < 0 && cbCursor != SQL_NTS ) - { - PUSHSQLERR ( pstmt->herr, en_S1090 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on != en_NullProc ) - { - sqlstat = en_S1010; - } - else - { - switch( pstmt->state ) - { - case en_stmt_executed: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - sqlstat = en_24000; - break; - - case en_stmt_needdata: - case en_stmt_mustput: - case en_stmt_canput: - sqlstat = en_S1010; - break; - - default: - break; - } - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetCursorName); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetCursorName, ( - pstmt->dhstmt, szCursor, cbCursor ) ) + STMT_t FAR* pstmt = (STMT_t*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + + RETCODE retcode = SQL_SUCCESS; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + if( szCursor == NULL ) + { + PUSHSQLERR ( pstmt->herr, en_S1009 ); + + return SQL_ERROR; + } + + if( cbCursor < 0 && cbCursor != SQL_NTS ) + { + PUSHSQLERR ( pstmt->herr, en_S1090 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on != en_NullProc ) + { + sqlstat = en_S1010; + } + else + { + switch( pstmt->state ) + { + case en_stmt_executed: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + sqlstat = en_24000; + break; + + case en_stmt_needdata: + case en_stmt_mustput: + case en_stmt_canput: + sqlstat = en_S1010; + break; + + default: + break; + } + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetCursorName); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetCursorName, ( + pstmt->dhstmt, szCursor, cbCursor ) ) #if 0 - retcode = hproc ( pstmt->dhstmt, szCursor, cbCursor ); + retcode = hproc ( pstmt->dhstmt, szCursor, cbCursor ); #endif - if( retcode == SQL_SUCCESS - || retcode == SQL_SUCCESS_WITH_INFO ) - { - pstmt->cursor_state = en_stmt_cursor_named; - } + if( retcode == SQL_SUCCESS + || retcode == SQL_SUCCESS_WITH_INFO ) + { + pstmt->cursor_state = en_stmt_cursor_named; + } - return retcode; + return retcode; } -RETCODE SQL_API SQLBindParameter ( - HSTMT hstmt, - UWORD ipar, - SWORD fParamType, - SWORD fCType, - SWORD fSqlType, - UDWORD cbColDef, - SWORD ibScale, - PTR rgbValue, - SDWORD cbValueMax, - SDWORD FAR* pcbValue ) +RETCODE SQL_API SQLBindParameter ( + HSTMT hstmt, + UWORD ipar, + SWORD fParamType, + SWORD fCType, + SWORD fSqlType, + UDWORD cbColDef, + SWORD ibScale, + PTR rgbValue, + SDWORD cbValueMax, + SDWORD FAR* pcbValue ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - - int sqlstat = en_00000; - RETCODE retcode = SQL_SUCCESS; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check param */ - if( fSqlType > SQL_TYPE_MAX - || ( fSqlType < SQL_TYPE_MIN - && fSqlType > SQL_TYPE_DRIVER_START ) ) - /* Note: SQL_TYPE_DRIVER_START is a nagtive number - * So, we use ">" */ - { - sqlstat = en_S1004; - } - else if ( ipar < 1 ) - { - sqlstat = en_S1093; - } - else if( (rgbValue == NULL && pcbValue == NULL) - && fParamType != SQL_PARAM_OUTPUT ) - { - sqlstat = en_S1009; - /* This means, I allow output to nowhere - * (i.e. * junk output result). But I can't - * allow input from nowhere. - */ - } + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + + int sqlstat = en_00000; + RETCODE retcode = SQL_SUCCESS; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check param */ + if( fSqlType > SQL_TYPE_MAX + || ( fSqlType < SQL_TYPE_MIN + && fSqlType > SQL_TYPE_DRIVER_START ) ) + /* Note: SQL_TYPE_DRIVER_START is a nagtive number + * So, we use ">" */ + { + sqlstat = en_S1004; + } + else if ( ipar < 1 ) + { + sqlstat = en_S1093; + } + else if( (rgbValue == NULL && pcbValue == NULL) + && fParamType != SQL_PARAM_OUTPUT ) + { + sqlstat = en_S1009; + /* This means, I allow output to nowhere + * (i.e. * junk output result). But I can't + * allow input from nowhere. + */ + } /********** - else if( cbValueMax < 0L && cbValueMax != SQL_SETPARAM_VALUE_MAX ) - { - sqlstat = en_S1090; - } + else if( cbValueMax < 0L && cbValueMax != SQL_SETPARAM_VALUE_MAX ) + { + sqlstat = en_S1090; + } **********/ - else if( fParamType != SQL_PARAM_INPUT - && fParamType != SQL_PARAM_OUTPUT - && fParamType != SQL_PARAM_INPUT_OUTPUT ) - { - sqlstat = en_S1105; - } - else - { - switch( fCType ) - { - case SQL_C_DEFAULT: - case SQL_C_CHAR: - case SQL_C_BINARY: - case SQL_C_BIT: - case SQL_C_TINYINT: - case SQL_C_STINYINT: - case SQL_C_UTINYINT: - case SQL_C_SHORT: - case SQL_C_SSHORT: - case SQL_C_USHORT: - case SQL_C_LONG: - case SQL_C_SLONG: - case SQL_C_ULONG: - case SQL_C_FLOAT: - case SQL_C_DOUBLE: - case SQL_C_DATE: - case SQL_C_TIME: - case SQL_C_TIMESTAMP: - break; - - default: - sqlstat = en_S1003; - break; - } - } - - if(sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - retcode = SQL_ERROR; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindParameter ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindParameter, ( - pstmt->dhstmt, ipar, fParamType, fCType, fSqlType, - cbColDef, ibScale, rgbValue, cbValueMax, pcbValue ) ) + else if( fParamType != SQL_PARAM_INPUT + && fParamType != SQL_PARAM_OUTPUT + && fParamType != SQL_PARAM_INPUT_OUTPUT ) + { + sqlstat = en_S1105; + } + else + { + switch( fCType ) + { + case SQL_C_DEFAULT: + case SQL_C_CHAR: + case SQL_C_BINARY: + case SQL_C_BIT: + case SQL_C_TINYINT: + case SQL_C_STINYINT: + case SQL_C_UTINYINT: + case SQL_C_SHORT: + case SQL_C_SSHORT: + case SQL_C_USHORT: + case SQL_C_LONG: + case SQL_C_SLONG: + case SQL_C_ULONG: + case SQL_C_FLOAT: + case SQL_C_DOUBLE: + case SQL_C_DATE: + case SQL_C_TIME: + case SQL_C_TIMESTAMP: + break; + + default: + sqlstat = en_S1003; + break; + } + } + + if(sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + retcode = SQL_ERROR; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindParameter ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindParameter, ( + pstmt->dhstmt, ipar, fParamType, fCType, fSqlType, + cbColDef, ibScale, rgbValue, cbValueMax, pcbValue ) ) #if 0 - retcode = hproc(pstmt->dhstmt, ipar, fParamType, fCType, fSqlType, - cbColDef, ibScale, rgbValue, cbValueMax, pcbValue ); + retcode = hproc(pstmt->dhstmt, ipar, fParamType, fCType, fSqlType, + cbColDef, ibScale, rgbValue, cbValueMax, pcbValue ); #endif - return retcode; + return retcode; } RETCODE SQL_API SQLParamOptions( - HSTMT hstmt, - UDWORD crow, - UDWORD FAR* pirow ) + HSTMT hstmt, + UDWORD crow, + UDWORD FAR* pirow ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } - if( crow == (UDWORD)0UL ) - { - PUSHSQLERR ( pstmt->herr, en_S1107 ); + if( crow == (UDWORD)0UL ) + { + PUSHSQLERR ( pstmt->herr, en_S1107 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - hproc = _iodbcdm_getproc ( pstmt->hdbc, en_ParamOptions ); + hproc = _iodbcdm_getproc ( pstmt->hdbc, en_ParamOptions ); - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamOptions, ( - pstmt->dhstmt, crow, pirow) ) + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ParamOptions, ( + pstmt->dhstmt, crow, pirow) ) #if 0 - retcode = hproc ( pstmt->dhstmt, crow, pirow ); + retcode = hproc ( pstmt->dhstmt, crow, pirow ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLSetScrollOptions( - HSTMT hstmt, - UWORD fConcurrency, - SDWORD crowKeyset, - UWORD crowRowset ) +RETCODE SQL_API SQLSetScrollOptions( + HSTMT hstmt, + UWORD fConcurrency, + SDWORD crowKeyset, + UWORD crowRowset ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - int sqlstat = en_00000; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - for(;;) - { - if( crowRowset == (UWORD)0 ) - { - sqlstat = en_S1107; - break; - } - - if( crowKeyset > (SDWORD)0L && crowKeyset < (SDWORD)crowRowset ) - { - sqlstat = en_S1107; - break; - } - - if( crowKeyset < 1 ) - { - if( crowKeyset != SQL_SCROLL_FORWARD_ONLY - && crowKeyset != SQL_SCROLL_STATIC - && crowKeyset != SQL_SCROLL_KEYSET_DRIVEN - && crowKeyset != SQL_SCROLL_DYNAMIC ) - { - sqlstat = en_S1107; - break; - } - } - - if( fConcurrency != SQL_CONCUR_READ_ONLY - && fConcurrency != SQL_CONCUR_LOCK - && fConcurrency != SQL_CONCUR_ROWVER - && fConcurrency != SQL_CONCUR_VALUES ) - { - sqlstat = en_S1108; - break; - } - - if( pstmt->state != en_stmt_allocated ) - { - sqlstat = en_S1010; - break; - } - - hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetScrollOptions ); - - if( hproc == SQL_NULL_HPROC ) - { - sqlstat = en_IM001; - break; - } - - sqlstat = en_00000; - if( 1 ) /* turn off solaris warning message */ - break; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetScrollOptions, ( - pstmt->dhstmt, - fConcurrency, - crowKeyset, - crowRowset ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + int sqlstat = en_00000; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + for(;;) + { + if( crowRowset == (UWORD)0 ) + { + sqlstat = en_S1107; + break; + } + + if( crowKeyset > (SDWORD)0L && crowKeyset < (SDWORD)crowRowset ) + { + sqlstat = en_S1107; + break; + } + + if( crowKeyset < 1 ) + { + if( crowKeyset != SQL_SCROLL_FORWARD_ONLY + && crowKeyset != SQL_SCROLL_STATIC + && crowKeyset != SQL_SCROLL_KEYSET_DRIVEN + && crowKeyset != SQL_SCROLL_DYNAMIC ) + { + sqlstat = en_S1107; + break; + } + } + + if( fConcurrency != SQL_CONCUR_READ_ONLY + && fConcurrency != SQL_CONCUR_LOCK + && fConcurrency != SQL_CONCUR_ROWVER + && fConcurrency != SQL_CONCUR_VALUES ) + { + sqlstat = en_S1108; + break; + } + + if( pstmt->state != en_stmt_allocated ) + { + sqlstat = en_S1010; + break; + } + + hproc = _iodbcdm_getproc( pstmt->hdbc, en_SetScrollOptions ); + + if( hproc == SQL_NULL_HPROC ) + { + sqlstat = en_IM001; + break; + } + + sqlstat = en_00000; + if( 1 ) /* turn off solaris warning message */ + break; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_SetScrollOptions, ( + pstmt->dhstmt, + fConcurrency, + crowKeyset, + crowRowset ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - fConcurrency, - crowKeyset, - crowRowset ); + retcode = hproc(pstmt->dhstmt, + fConcurrency, + crowKeyset, + crowRowset ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLSetParam ( - HSTMT hstmt, - UWORD ipar, - SWORD fCType, - SWORD fSqlType, - UDWORD cbColDef, - SWORD ibScale, - PTR rgbValue, - SDWORD FAR *pcbValue) +RETCODE SQL_API SQLSetParam ( + HSTMT hstmt, + UWORD ipar, + SWORD fCType, + SWORD fSqlType, + UDWORD cbColDef, + SWORD ibScale, + PTR rgbValue, + SDWORD FAR *pcbValue) { - return SQLBindParameter(hstmt, - ipar, - (SWORD)SQL_PARAM_INPUT_OUTPUT, - fCType, - fSqlType, - cbColDef, - ibScale, - rgbValue, - SQL_SETPARAM_VALUE_MAX, - pcbValue ); + return SQLBindParameter(hstmt, + ipar, + (SWORD)SQL_PARAM_INPUT_OUTPUT, + fCType, + fSqlType, + cbColDef, + ibScale, + rgbValue, + SQL_SETPARAM_VALUE_MAX, + pcbValue ); } diff --git a/src/iodbc/result.c b/src/iodbc/result.c index 1060d40d83..c00474b04f 100644 --- a/src/iodbc/result.c +++ b/src/iodbc/result.c @@ -1,6 +1,6 @@ /** Prepare for getting query result - - Copyright (C) 1995 by Ke Jin + + Copyright (C) 1995 by Ke Jin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,549 +27,549 @@ #include <../iodbc/itrace.h> -RETCODE SQL_API SQLBindCol ( - HSTMT hstmt, - UWORD icol, - SWORD fCType, - PTR rgbValue, - SDWORD cbValueMax, - SDWORD FAR* pcbValue ) +RETCODE SQL_API SQLBindCol ( + HSTMT hstmt, + UWORD icol, + SWORD fCType, + PTR rgbValue, + SDWORD cbValueMax, + SDWORD FAR* pcbValue ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc = SQL_NULL_HPROC; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - switch(fCType) - { - case SQL_C_DEFAULT: - case SQL_C_CHAR: - case SQL_C_BINARY: - case SQL_C_BIT: - case SQL_C_TINYINT: - case SQL_C_STINYINT: - case SQL_C_UTINYINT: - case SQL_C_SHORT: - case SQL_C_SSHORT: - case SQL_C_USHORT: - case SQL_C_LONG: - case SQL_C_SLONG: - case SQL_C_ULONG: - case SQL_C_FLOAT: - case SQL_C_DOUBLE: - case SQL_C_DATE: - case SQL_C_TIME: - case SQL_C_TIMESTAMP: - break; - - default: - PUSHSQLERR ( pstmt->herr, en_S1003); - return SQL_ERROR; - } - - if( cbValueMax < 0 ) - { - PUSHSQLERR ( pstmt->herr, en_S1090 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->state > en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } - - /* call driver's function */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindCol ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindCol, ( - pstmt->dhstmt, - icol, - fCType, - rgbValue, - cbValueMax, - pcbValue ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc = SQL_NULL_HPROC; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + switch(fCType) + { + case SQL_C_DEFAULT: + case SQL_C_CHAR: + case SQL_C_BINARY: + case SQL_C_BIT: + case SQL_C_TINYINT: + case SQL_C_STINYINT: + case SQL_C_UTINYINT: + case SQL_C_SHORT: + case SQL_C_SSHORT: + case SQL_C_USHORT: + case SQL_C_LONG: + case SQL_C_SLONG: + case SQL_C_ULONG: + case SQL_C_FLOAT: + case SQL_C_DOUBLE: + case SQL_C_DATE: + case SQL_C_TIME: + case SQL_C_TIMESTAMP: + break; + + default: + PUSHSQLERR ( pstmt->herr, en_S1003); + return SQL_ERROR; + } + + if( cbValueMax < 0 ) + { + PUSHSQLERR ( pstmt->herr, en_S1090 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->state > en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + } + + /* call driver's function */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_BindCol ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_BindCol, ( + pstmt->dhstmt, + icol, + fCType, + rgbValue, + cbValueMax, + pcbValue ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - icol, - fCType, - rgbValue, - cbValueMax, - pcbValue ); + retcode = hproc(pstmt->dhstmt, + icol, + fCType, + rgbValue, + cbValueMax, + pcbValue ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLGetCursorName( - HSTMT hstmt, - UCHAR FAR* szCursor, - SWORD cbCursorMax, - SWORD FAR* pcbCursor ) +RETCODE SQL_API SQLGetCursorName( + HSTMT hstmt, + UCHAR FAR* szCursor, + SWORD cbCursorMax, + SWORD FAR* pcbCursor ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check argument */ - if( cbCursorMax < (SWORD)0 ) - { - PUSHSQLERR ( pstmt->herr, en_S1090 ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->state >= en_stmt_needdata - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - if( pstmt->state < en_stmt_cursoropen - && pstmt->cursor_state == en_stmt_cursor_no ) - { - PUSHSQLERR ( pstmt->herr, en_S1015 ); - - return SQL_ERROR; - } - - /* call driver's function */ - hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetCursorName ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetCursorName, ( - pstmt->dhstmt, - szCursor, - cbCursorMax, - pcbCursor ) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check argument */ + if( cbCursorMax < (SWORD)0 ) + { + PUSHSQLERR ( pstmt->herr, en_S1090 ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->state >= en_stmt_needdata + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + if( pstmt->state < en_stmt_cursoropen + && pstmt->cursor_state == en_stmt_cursor_no ) + { + PUSHSQLERR ( pstmt->herr, en_S1015 ); + + return SQL_ERROR; + } + + /* call driver's function */ + hproc = _iodbcdm_getproc ( pstmt->hdbc, en_GetCursorName ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_GetCursorName, ( + pstmt->dhstmt, + szCursor, + cbCursorMax, + pcbCursor ) ) #if 0 - retcode = hproc(pstmt->dhstmt, - szCursor, - cbCursorMax, - pcbCursor ); + retcode = hproc(pstmt->dhstmt, + szCursor, + cbCursorMax, + pcbCursor ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLRowCount( - HSTMT hstmt, - SDWORD FAR* pcrow ) +RETCODE SQL_API SQLRowCount( + HSTMT hstmt, + SDWORD FAR* pcrow ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } - /* check state */ - if( pstmt->state >= en_stmt_needdata - || pstmt->state <= en_stmt_prepared - || pstmt->asyn_on != en_NullProc ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); + /* check state */ + if( pstmt->state >= en_stmt_needdata + || pstmt->state <= en_stmt_prepared + || pstmt->asyn_on != en_NullProc ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_RowCount ); + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_RowCount ); - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); - return SQL_ERROR; - } + return SQL_ERROR; + } - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_RowCount, ( - pstmt->dhstmt, pcrow) ) + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_RowCount, ( + pstmt->dhstmt, pcrow) ) #if 0 - retcode = hproc ( pstmt->dhstmt, pcrow ); + retcode = hproc ( pstmt->dhstmt, pcrow ); #endif - return retcode; + return retcode; } -RETCODE SQL_API SQLNumResultCols( - HSTMT hstmt, - SWORD FAR* pccol ) +RETCODE SQL_API SQLNumResultCols( + HSTMT hstmt, + SWORD FAR* pccol ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - SWORD ccol; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - if( pstmt->state == en_stmt_allocated - || pstmt->state >= en_stmt_needdata ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - return SQL_ERROR; - } - } - else if( pstmt->asyn_on != en_NumResultCols ) - { - PUSHSQLERR ( pstmt->herr, en_S1010 ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_NumResultCols ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_NumResultCols, ( - pstmt->dhstmt, &ccol) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + SWORD ccol; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + if( pstmt->state == en_stmt_allocated + || pstmt->state >= en_stmt_needdata ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + return SQL_ERROR; + } + } + else if( pstmt->asyn_on != en_NumResultCols ) + { + PUSHSQLERR ( pstmt->herr, en_S1010 ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_NumResultCols ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_NumResultCols, ( + pstmt->dhstmt, &ccol) ) #if 0 - retcode = hproc( pstmt->dhstmt, &ccol ); + retcode = hproc( pstmt->dhstmt, &ccol ); #endif - /* state transition */ - if( pstmt->asyn_on == en_NumResultCols ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - - case SQL_STILL_EXECUTING: - default: - break; - } - } - - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - break; - - case SQL_STILL_EXECUTING: - ccol = 0; - pstmt->asyn_on = en_NumResultCols; - break; - - default: - ccol = 0; - break; - } - - if( pccol ) - { - *pccol = ccol; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_NumResultCols ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + + case SQL_STILL_EXECUTING: + default: + break; + } + } + + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + break; + + case SQL_STILL_EXECUTING: + ccol = 0; + pstmt->asyn_on = en_NumResultCols; + break; + + default: + ccol = 0; + break; + } + + if( pccol ) + { + *pccol = ccol; + } + + return retcode; } -RETCODE SQL_API SQLDescribeCol( - HSTMT hstmt, - UWORD icol, - UCHAR FAR* szColName, - SWORD cbColNameMax, - SWORD FAR* pcbColName, - SWORD FAR* pfSqlType, - UDWORD FAR* pcbColDef, - SWORD FAR* pibScale, - SWORD FAR* pfNullable ) +RETCODE SQL_API SQLDescribeCol( + HSTMT hstmt, + UWORD icol, + UCHAR FAR* szColName, + SWORD cbColNameMax, + SWORD FAR* pcbColName, + SWORD FAR* pfSqlType, + UDWORD FAR* pcbColDef, + SWORD FAR* pibScale, + SWORD FAR* pfNullable ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( icol == 0 ) - { - sqlstat = en_S1002; - } - else if( cbColNameMax < 0 ) - { - sqlstat = en_S1090; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - if( pstmt->asyn_on == en_stmt_allocated - || pstmt->asyn_on >= en_stmt_needdata ) - { - sqlstat = en_S1010; - } - } - else if( pstmt->asyn_on != en_DescribeCol ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_DescribeCol ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeCol, ( - pstmt->dhstmt, - icol, - szColName, - cbColNameMax, - pcbColName, - pfSqlType, - pcbColDef, - pibScale, - pfNullable) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( icol == 0 ) + { + sqlstat = en_S1002; + } + else if( cbColNameMax < 0 ) + { + sqlstat = en_S1090; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + if( pstmt->asyn_on == en_stmt_allocated + || pstmt->asyn_on >= en_stmt_needdata ) + { + sqlstat = en_S1010; + } + } + else if( pstmt->asyn_on != en_DescribeCol ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_DescribeCol ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_DescribeCol, ( + pstmt->dhstmt, + icol, + szColName, + cbColNameMax, + pcbColName, + pfSqlType, + pcbColDef, + pibScale, + pfNullable) ) #if 0 - retcode = hproc(pstmt->dhstmt, - icol, - szColName, - cbColNameMax, - pcbColName, - pfSqlType, - pcbColDef, - pibScale, - pfNullable ); + retcode = hproc(pstmt->dhstmt, + icol, + szColName, + cbColNameMax, + pcbColName, + pfSqlType, + pcbColDef, + pibScale, + pfNullable ); #endif - /* state transition */ - if( pstmt->asyn_on == en_DescribeCol ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_prepared: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_DescribeCol; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_DescribeCol ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_prepared: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_DescribeCol; + } + break; + + default: + break; + } + + return retcode; } -RETCODE SQL_API SQLColAttributes( - HSTMT hstmt, - UWORD icol, - UWORD fDescType, - PTR rgbDesc, - SWORD cbDescMax, - SWORD FAR* pcbDesc, - SDWORD FAR* pfDesc ) +RETCODE SQL_API SQLColAttributes( + HSTMT hstmt, + UWORD icol, + UWORD fDescType, + PTR rgbDesc, + SWORD cbDescMax, + SWORD FAR* pcbDesc, + SDWORD FAR* pfDesc ) { - STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; - HPROC hproc; - RETCODE retcode; - int sqlstat = en_00000; - - if( hstmt == SQL_NULL_HSTMT - || pstmt->hdbc == SQL_NULL_HDBC ) - { - return SQL_INVALID_HANDLE; - } - - /* check arguments */ - if( icol == 0 && fDescType != SQL_COLUMN_COUNT ) - { - sqlstat = en_S1002; - } - else if( cbDescMax < 0 ) - { - sqlstat = en_S1090; - } - else if(/* fDescType < SQL_COLATT_OPT_MIN || */ /* turnoff warning */ - ( fDescType > SQL_COLATT_OPT_MAX - && fDescType < SQL_COLUMN_DRIVER_START ) ) - { - sqlstat = en_S1091; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* check state */ - if( pstmt->asyn_on == en_NullProc ) - { - if( pstmt->asyn_on == en_stmt_allocated - || pstmt->asyn_on >= en_stmt_needdata ) - { - sqlstat = en_S1010; - } - } - else if( pstmt->asyn_on != en_ColAttributes ) - { - sqlstat = en_S1010; - } - - if( sqlstat != en_00000 ) - { - PUSHSQLERR ( pstmt->herr, sqlstat ); - - return SQL_ERROR; - } - - /* call driver */ - hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColAttributes ); - - if( hproc == SQL_NULL_HPROC ) - { - PUSHSQLERR ( pstmt->herr, en_IM001 ); - - return SQL_ERROR; - } - - CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ColAttributes, ( - pstmt->dhstmt, - icol, - fDescType, - rgbDesc, - cbDescMax, - pcbDesc, - pfDesc) ) + STMT_t FAR* pstmt = (STMT_t FAR*)hstmt; + HPROC hproc; + RETCODE retcode; + int sqlstat = en_00000; + + if( hstmt == SQL_NULL_HSTMT + || pstmt->hdbc == SQL_NULL_HDBC ) + { + return SQL_INVALID_HANDLE; + } + + /* check arguments */ + if( icol == 0 && fDescType != SQL_COLUMN_COUNT ) + { + sqlstat = en_S1002; + } + else if( cbDescMax < 0 ) + { + sqlstat = en_S1090; + } + else if(/* fDescType < SQL_COLATT_OPT_MIN || */ /* turnoff warning */ + ( fDescType > SQL_COLATT_OPT_MAX + && fDescType < SQL_COLUMN_DRIVER_START ) ) + { + sqlstat = en_S1091; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* check state */ + if( pstmt->asyn_on == en_NullProc ) + { + if( pstmt->asyn_on == en_stmt_allocated + || pstmt->asyn_on >= en_stmt_needdata ) + { + sqlstat = en_S1010; + } + } + else if( pstmt->asyn_on != en_ColAttributes ) + { + sqlstat = en_S1010; + } + + if( sqlstat != en_00000 ) + { + PUSHSQLERR ( pstmt->herr, sqlstat ); + + return SQL_ERROR; + } + + /* call driver */ + hproc = _iodbcdm_getproc( pstmt->hdbc, en_ColAttributes ); + + if( hproc == SQL_NULL_HPROC ) + { + PUSHSQLERR ( pstmt->herr, en_IM001 ); + + return SQL_ERROR; + } + + CALL_DRIVER ( pstmt->hdbc, retcode, hproc, en_ColAttributes, ( + pstmt->dhstmt, + icol, + fDescType, + rgbDesc, + cbDescMax, + pcbDesc, + pfDesc) ) #if 0 - retcode = hproc(pstmt->dhstmt, - icol, - fDescType, - rgbDesc, - cbDescMax, - pcbDesc, - pfDesc ); + retcode = hproc(pstmt->dhstmt, + icol, + fDescType, + rgbDesc, + cbDescMax, + pcbDesc, + pfDesc ); #endif - /* state transition */ - if( pstmt->asyn_on == en_ColAttributes ) - { - switch( retcode ) - { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - case SQL_ERROR: - pstmt->asyn_on = en_NullProc; - break; - - default: - return retcode; - } - } - - switch( pstmt->state ) - { - case en_stmt_prepared: - case en_stmt_cursoropen: - case en_stmt_fetched: - case en_stmt_xfetched: - if( retcode == SQL_STILL_EXECUTING ) - { - pstmt->asyn_on = en_ColAttributes; - } - break; - - default: - break; - } - - return retcode; + /* state transition */ + if( pstmt->asyn_on == en_ColAttributes ) + { + switch( retcode ) + { + case SQL_SUCCESS: + case SQL_SUCCESS_WITH_INFO: + case SQL_ERROR: + pstmt->asyn_on = en_NullProc; + break; + + default: + return retcode; + } + } + + switch( pstmt->state ) + { + case en_stmt_prepared: + case en_stmt_cursoropen: + case en_stmt_fetched: + case en_stmt_xfetched: + if( retcode == SQL_STILL_EXECUTING ) + { + pstmt->asyn_on = en_ColAttributes; + } + break; + + default: + break; + } + + return retcode; } diff --git a/src/iodbc/shrsub.exp b/src/iodbc/shrsub.exp index bf32323d91..1fe3ec7de9 100644 --- a/src/iodbc/shrsub.exp +++ b/src/iodbc/shrsub.exp @@ -41,7 +41,7 @@ SQLFetch SQLExtendedFetch SQLGetData SQLSetPos -SQLMoreResults +SQLMoreResults SQLError SQLColumnPrivileges -- 2.45.2