]> granicus.if.org Git - php/commitdiff
Added check in the ODBC module that a connection is still valid before
authorNick Gorham <lurcher@php.net>
Tue, 30 Nov 1999 12:41:36 +0000 (12:41 +0000)
committerNick Gorham <lurcher@php.net>
Tue, 30 Nov 1999 12:41:36 +0000 (12:41 +0000)
reuse in a persistent connection.

NEWS
ext/odbc/php_odbc.c
ext/odbc/php_odbc.h
ltconfig
ltmain.sh
php.ini-dist

diff --git a/NEWS b/NEWS
index f8be7cce327037797d979143316560e183836ba1..28d3c70b14972671dfe490f932ced971b075223b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP 4.0                                                                    NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 ?? ?? ????, Version 4.0 Beta 4
+- Added check to see if a persistent connection is still valid with the
+  ODBC interface before reusing (nick@easysoft.com)
 - Added DBMaker support (patch by Pax Tsai <paxtsai@lion.syscom.com.tw>)
 - Renamed "PECL" to "PEAR" (PHP Extension and Add-on Repository) (Stig)
 - buildconf now uses build.mk (Stig)
index 17a2a730c2e4c17c42599cf800ac0a70e3718798..f9a6f9aa9f4b8d9fe43b864763e0c55e8cb8a98d 100644 (file)
@@ -301,6 +301,8 @@ PHP_INI_BEGIN()
                        defaultlrl, php_odbc_globals, odbc_globals, display_lrl)
        STD_PHP_INI_ENTRY_EX("odbc.defaultbinmode", "1", PHP_INI_ALL, OnUpdateInt,
                        defaultbinmode, php_odbc_globals, odbc_globals, display_binmode)
+       STD_PHP_INI_BOOLEAN("odbc.check_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt,
+               check_persistent, php_odbc_globals, odbc_globals)
 PHP_INI_END()
 
 #ifdef ZTS
@@ -1718,6 +1720,8 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
         * no matter if it is to be persistent or not
         */
 
+try_and_get_another_connection:
+
        if (persistent) {
                list_entry *le;
                
@@ -1755,8 +1759,30 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                        if (le->type != le_pconn) {
                                RETURN_FALSE;
                        }
-                       /* XXX we should ensure that the connection is still available */
+                       /*
+                        * check to see if the connection is still valid
+                        */
                        db_conn = (odbc_connection *)le->ptr;
+
+                       /*
+                        * check to see if the connection is still in place (lurcher)
+                        */
+                       if (ODBCG(check_persistent)) {
+                               SQLRETURN ret;
+                               SQLCHAR d_name[ 32 ];
+                               SQLSMALLINT len;
+
+                               ret = SQLGetInfo( db_conn -> hdbc, 
+                                       SQL_DATA_SOURCE_READ_ONLY, 
+                                       d_name, sizeof( d_name ), &len );
+
+                               if ( ret != SQL_SUCCESS )
+                               {
+                                       zend_hash_del(plist, hashed_details, hashed_len + 1);                                        SQLDisconnect( db_conn -> hdbc );
+                                       SQLFreeConnect( db_conn -> hdbc );
+                                       goto try_and_get_another_connection;
+                               }
+                       }
                }
                ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
        } else { /* non persistent */
index 34ff80a0f95ae652bdc12791109242a2e30d4acb..a91a0766d48aa7fb92cd5d27a7559a905be12460 100644 (file)
@@ -241,6 +241,7 @@ typedef struct {
        char *defUser;
        char *defPW;
        long allow_persistent;
+       long check_persistent;
        long max_persistent;
        long max_links;
        long num_persistent;
index 7468691343713cd6d3f45432144ff4b469102262..65ec6f65d0f6f19d0654b0caa89169d685aae684 100644 (file)
--- a/ltconfig
+++ b/ltconfig
@@ -1188,8 +1188,8 @@ EOF
 
   netbsd*)
     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
     else
       archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
       # can we support soname and/or expsyms with a.out? -oliva
@@ -1210,8 +1210,8 @@ EOF
 
 EOF
     elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
     else
       ld_shlibs=no
     fi
@@ -1226,8 +1226,8 @@ EOF
 
   *)
     if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $compile_rpath $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
     else
       ld_shlibs=no
     fi
@@ -1428,9 +1428,9 @@ else
     no_undefined_flag=' -z text'
     # $CC -shared without GNU ld will not create a library from C++
     # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD $compile_rpath -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
     archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $LD $compile_rpath -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
+               $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
     hardcode_libdir_flag_spec='-R$libdir'
     hardcode_shlibpath_var=no
     case "$host_os" in
index fa67f41b5062b125ff007b9f08bca0ab9a27dd5a..ae10cad021b7989973632c44046c9bd9a91e392f 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1162,7 +1162,7 @@ compiler."
 
       *.o | *.obj | *.a | *.lib)
        # A standard object.
-       libobjs="$libobjs $arg"
+       objs="$objs $arg"
        ;;
 
       *.lo)
@@ -1796,94 +1796,6 @@ compiler."
        esac
       fi
 
-      if test -n "$rpath$xrpath"; then
-       # If the user specified any rpath flags, then add them.
-       for libdir in $rpath $xrpath; do
-         # This is the magic to use -rpath.
-         case "$compile_rpath " in
-         *" $libdir "*) ;;
-         *) compile_rpath="$compile_rpath $libdir" ;;
-         esac
-         case "$finalize_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
-         esac
-       done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath; do
-       if test -n "$hardcode_libdir_flag_spec"; then
-         if test -n "$hardcode_libdir_separator"; then
-           if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
-           else
-             # Just accumulate the unique libdirs.
-             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
-             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$perm_rpath " in
-         *" $libdir "*) ;;
-         *) perm_rpath="$perm_rpath $libdir" ;;
-         esac
-       fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-        test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
-       eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-       if test -n "$hardcode_libdir_flag_spec"; then
-         if test -n "$hardcode_libdir_separator"; then
-           if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
-           else
-             # Just accumulate the unique libdirs.
-             case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
-             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$finalize_perm_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-         esac
-       fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-        test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
-       eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
       # Create the output directory, or remove our outputs if we need to.
       if test -d $output_objdir; then
        $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
@@ -2043,7 +1955,6 @@ EOF
                    done
              done
              if test -n "$a_deplib" ; then
-               newdeplibs="$newdeplibs $a_deplib"
                droppeddeps=yes
                echo
                echo "*** Warning: This library needs some functionality provided by $a_deplib."
index dcac9558b62967c2ee9831a587b58ffdd6ae6105..ecf0f8f704d1fdcd9a3fcaabc350091c76b208bc 100644 (file)
@@ -191,6 +191,7 @@ sql.safe_mode       =       Off
 ;uodbc.default_user            =       Not yet implemented
 ;uodbc.default_pw              =       Not yet implemented
 uodbc.allow_persistent =       On      ; allow or prevent persistent links
+uodbc.check_persistent  =      On      ; check that a connection is still validbefore reuse
 uodbc.max_persistent   =       -1      ; maximum number of persistent links. -1 means no limit
 uodbc.max_links                        =       -1      ; maximum number of links (persistent+non persistent). -1 means no limit
 uodbc.defaultlrl       =       4096    ; Handling of LONG fields. Returns number of bytes to variables, 0 means passthru