mirror of
https://github.com/php/php-src.git
synced 2024-10-21 00:12:34 +00:00
201 lines
3.3 KiB
PHP
201 lines
3.3 KiB
PHP
--TEST--
|
|
Bug #40415 (Using oci_fetchall with nested cursors)
|
|
--SKIPIF--
|
|
<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
|
|
--FILE--
|
|
<?php
|
|
|
|
require dirname(__FILE__)."/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
|