123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- --TEST--
- Bug #40415 (Using oci_fetchall with nested cursors)
- --EXTENSIONS--
- oci8
- --SKIPIF--
- <?php
- $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
|