mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Most oci8 tests fail out-of-the-box because a typical host won't have an Oracle database instance available. Other database drivers like mysqli and pgsql address this problem with an include file, inserted into SKIPIF, that skips the test if no connection at all can be made. This commits adds such a file (skipifconnectfailure.inc) for oci8, and adds the corresponding SKIPIF to any tests that connect to a database. Closes GH-11804 * ext/oci8/tests/lob_aliases.phpt: drop unnecessary SKIPIF.
86 lines
1.5 KiB
PHP
86 lines
1.5 KiB
PHP
--TEST--
|
|
Bug #38173 (Freeing nested cursors causes OCI8 to segfault)
|
|
--EXTENSIONS--
|
|
oci8
|
|
--SKIPIF--
|
|
<?php
|
|
require_once('skipifconnectfailure.inc');
|
|
$target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
|
|
require(__DIR__.'/skipif.inc');
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
|
|
require __DIR__."/connect.inc";
|
|
|
|
$create_1 = "CREATE TABLE t1 (id INTEGER)";
|
|
$create_2 = "CREATE TABLE t2 (id INTEGER)";
|
|
$drop_1 = "DROP TABLE t1";
|
|
$drop_2 = "DROP TABLE t2";
|
|
|
|
$s1 = oci_parse($c, $drop_1);
|
|
$s2 = oci_parse($c, $drop_2);
|
|
@oci_execute($s1);
|
|
@oci_execute($s2);
|
|
|
|
$s1 = oci_parse($c, $create_1);
|
|
$s2 = oci_parse($c, $create_2);
|
|
oci_execute($s1);
|
|
oci_execute($s2);
|
|
|
|
for($i=0; $i < 5; $i++) {
|
|
$insert = "INSERT INTO t1 VALUES(".$i.")";
|
|
$s = oci_parse($c, $insert);
|
|
oci_execute($s);
|
|
}
|
|
|
|
for($i=0; $i < 5; $i++) {
|
|
$insert = "INSERT INTO t2 VALUES(".$i.")";
|
|
$s = oci_parse($c, $insert);
|
|
oci_execute($s);
|
|
}
|
|
|
|
$query ="
|
|
SELECT
|
|
t1.*,
|
|
CURSOR( SELECT * FROM t2 ) as cursor
|
|
FROM
|
|
t1
|
|
";
|
|
|
|
$sth = oci_parse($c, $query);
|
|
oci_execute($sth);
|
|
|
|
// dies on oci_free_statement on 2nd pass through loop
|
|
while ( $row = oci_fetch_assoc($sth) ) {
|
|
print "Got row!\n";
|
|
var_dump(oci_execute($row['CURSOR']));
|
|
var_dump(oci_free_statement($row['CURSOR']));
|
|
}
|
|
|
|
$s1 = oci_parse($c, $drop_1);
|
|
$s2 = oci_parse($c, $drop_2);
|
|
@oci_execute($s1);
|
|
@oci_execute($s2);
|
|
|
|
echo "Done\n";
|
|
|
|
?>
|
|
--EXPECT--
|
|
Got row!
|
|
bool(true)
|
|
bool(true)
|
|
Got row!
|
|
bool(true)
|
|
bool(true)
|
|
Got row!
|
|
bool(true)
|
|
bool(true)
|
|
Got row!
|
|
bool(true)
|
|
bool(true)
|
|
Got row!
|
|
bool(true)
|
|
bool(true)
|
|
Done
|