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.
207 lines
3.4 KiB
PHP
207 lines
3.4 KiB
PHP
--TEST--
|
|
Bug #40415 (Using oci_fetchall with nested cursors)
|
|
--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";
|
|
|
|
// Setup
|
|
|
|
$create_1 = "CREATE TABLE t1 (id1 INTEGER)";
|
|
$create_2 = "CREATE TABLE t2 (id2 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=1; $i < 4; $i++) {
|
|
$insert = "INSERT INTO t1 VALUES(1".$i.")";
|
|
$s = oci_parse($c, $insert);
|
|
oci_execute($s);
|
|
}
|
|
|
|
for($i=1; $i < 4; $i++) {
|
|
$insert = "INSERT INTO t2 VALUES(2".$i.")";
|
|
$s = oci_parse($c, $insert);
|
|
oci_execute($s);
|
|
}
|
|
|
|
|
|
function do_assoc($c)
|
|
{
|
|
$query = "SELECT t1.*, CURSOR( SELECT * FROM t2 ) AS CURSOR FROM t1";
|
|
|
|
$stmt = oci_parse($c, $query);
|
|
oci_execute($stmt);
|
|
|
|
while ($row = oci_fetch_assoc($stmt)) {
|
|
print "Got row \"".$row['ID1']."\". Now getting nested cursor:\n";
|
|
var_dump(oci_execute($row['CURSOR']));
|
|
while ($row_n = oci_fetch_assoc($row['CURSOR']) ) {
|
|
var_dump($row_n);
|
|
}
|
|
}
|
|
}
|
|
|
|
function do_all($c)
|
|
{
|
|
$query = "SELECT t1.*, CURSOR( SELECT * FROM t2 ) AS CURSOR FROM t1";
|
|
|
|
$stmt = oci_parse($c, $query);
|
|
oci_execute($stmt);
|
|
|
|
$rc1 = oci_fetch_all($stmt, $res);
|
|
|
|
echo "Rows returned $rc1\n";
|
|
|
|
var_dump($res);
|
|
|
|
foreach ($res['CURSOR'] as $cv) {
|
|
echo "Getting nested cursor\n";
|
|
var_dump(oci_execute($cv));
|
|
$rc2 = oci_fetch_all($cv, $res2);
|
|
var_dump($res2);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
echo "Test 1: Associate fetch of nested cursor\n";
|
|
do_assoc($c);
|
|
|
|
echo "\nTest 2: fetchall of nested cursor\n";
|
|
do_all($c);
|
|
|
|
|
|
// Cleanup
|
|
$s1 = oci_parse($c, $drop_1);
|
|
$s2 = oci_parse($c, $drop_2);
|
|
@oci_execute($s1);
|
|
@oci_execute($s2);
|
|
|
|
echo "Done\n";
|
|
?>
|
|
--EXPECTF--
|
|
Test 1: Associate fetch of nested cursor
|
|
Got row "11". Now getting nested cursor:
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "21"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "22"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "23"
|
|
}
|
|
Got row "12". Now getting nested cursor:
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "21"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "22"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "23"
|
|
}
|
|
Got row "13". Now getting nested cursor:
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "21"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "22"
|
|
}
|
|
array(1) {
|
|
["ID2"]=>
|
|
string(2) "23"
|
|
}
|
|
|
|
Test 2: fetchall of nested cursor
|
|
Rows returned 3
|
|
array(2) {
|
|
["ID1"]=>
|
|
array(3) {
|
|
[0]=>
|
|
string(2) "11"
|
|
[1]=>
|
|
string(2) "12"
|
|
[2]=>
|
|
string(2) "13"
|
|
}
|
|
["CURSOR"]=>
|
|
array(3) {
|
|
[0]=>
|
|
resource(%d) of type (oci8 statement)
|
|
[1]=>
|
|
resource(%d) of type (oci8 statement)
|
|
[2]=>
|
|
resource(%d) of type (oci8 statement)
|
|
}
|
|
}
|
|
Getting nested cursor
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
array(3) {
|
|
[0]=>
|
|
string(2) "21"
|
|
[1]=>
|
|
string(2) "22"
|
|
[2]=>
|
|
string(2) "23"
|
|
}
|
|
}
|
|
Getting nested cursor
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
array(3) {
|
|
[0]=>
|
|
string(2) "21"
|
|
[1]=>
|
|
string(2) "22"
|
|
[2]=>
|
|
string(2) "23"
|
|
}
|
|
}
|
|
Getting nested cursor
|
|
bool(true)
|
|
array(1) {
|
|
["ID2"]=>
|
|
array(3) {
|
|
[0]=>
|
|
string(2) "21"
|
|
[1]=>
|
|
string(2) "22"
|
|
[2]=>
|
|
string(2) "23"
|
|
}
|
|
}
|
|
Done
|