Browse Source

Added check in the ODBC module that a connection is still valid before


			
			
				experimetnal/RETURN_REF_PATCH
			
			
		
Nick Gorham 27 years ago
parent
commit
2df67b7c9e
  1. 2
      NEWS
  2. 28
      ext/odbc/php_odbc.c
  3. 1
      ext/odbc/php_odbc.h
  4. 16
      ltconfig
  5. 91
      ltmain.sh
  6. 1
      php.ini-dist

2
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)

28
ext/odbc/php_odbc.c

@ -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 */

1
ext/odbc/php_odbc.h

@ -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;

16
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

91
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."

1
php.ini-dist

@ -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

Loading…
Cancel
Save