Skip to content

Commit

Permalink
Added check in the ODBC module that a connection is still valid before
Browse files Browse the repository at this point in the history
reuse in a persistent connection.
  • Loading branch information
Nick Gorham committed Nov 30, 1999
1 parent bc38c05 commit 2df67b7
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 99 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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 ([email protected])
- Added DBMaker support (patch by Pax Tsai <[email protected]>)
- Renamed "PECL" to "PEAR" (PHP Extension and Add-on Repository) (Stig)
- buildconf now uses build.mk (Stig)
Expand Down
28 changes: 27 additions & 1 deletion ext/odbc/php_odbc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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 */
Expand Down
1 change: 1 addition & 0 deletions ext/odbc/php_odbc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
16 changes: 8 additions & 8 deletions ltconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
91 changes: 1 addition & 90 deletions ltmain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1162,7 +1162,7 @@ compiler."

*.o | *.obj | *.a | *.lib)
# A standard object.
libobjs="$libobjs $arg"
objs="$objs $arg"
;;

*.lo)
Expand Down Expand Up @@ -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}.*"
Expand Down Expand Up @@ -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."
Expand Down
1 change: 1 addition & 0 deletions php.ini-dist
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 2df67b7

Please sign in to comment.