Annotation of embedaddon/php/ext/oci8/tests/bug40415.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Bug #40415 (Using oci_fetchall with nested cursors)
                      3: --SKIPIF--
                      4: <?php
                      5: $target_dbs = array('oracledb' => true, 'timesten' => false);  // test runs on these DBs
                      6: require(dirname(__FILE__).'/skipif.inc');
                      7: ?> 
                      8: --FILE--
                      9: <?php 
                     10: 
                     11: require dirname(__FILE__)."/connect.inc";
                     12: 
                     13: // Setup
                     14: 
                     15: $create_1 = "CREATE TABLE t1 (id1 INTEGER)";
                     16: $create_2 = "CREATE TABLE t2 (id2 INTEGER)";
                     17: $drop_1 = "DROP TABLE t1";
                     18: $drop_2 = "DROP TABLE t2";
                     19: 
                     20: $s1 = oci_parse($c, $drop_1);
                     21: $s2 = oci_parse($c, $drop_2);
                     22: @oci_execute($s1);
                     23: @oci_execute($s2);
                     24: 
                     25: $s1 = oci_parse($c, $create_1);
                     26: $s2 = oci_parse($c, $create_2);
                     27: oci_execute($s1);
                     28: oci_execute($s2);
                     29: 
                     30: for($i=1; $i < 4; $i++) {
                     31:     $insert = "INSERT INTO t1 VALUES(1".$i.")";
                     32:     $s = oci_parse($c, $insert);
                     33:     oci_execute($s);
                     34: }
                     35: 
                     36: for($i=1; $i < 4; $i++) {
                     37:     $insert = "INSERT INTO t2 VALUES(2".$i.")";
                     38:     $s = oci_parse($c, $insert);
                     39:     oci_execute($s);
                     40: }
                     41: 
                     42: 
                     43: function do_assoc($c) 
                     44: {
                     45:     $query = "SELECT t1.*, CURSOR( SELECT * FROM t2 ) AS CURSOR FROM t1";
                     46: 
                     47:     $stmt = oci_parse($c, $query);
                     48:     oci_execute($stmt);
                     49:     
                     50:     while ($row = oci_fetch_assoc($stmt)) {
                     51:         print "Got row \"".$row['ID1']."\". Now getting nested cursor:\n";
                     52:         var_dump(oci_execute($row['CURSOR']));
                     53:         while ($row_n = oci_fetch_assoc($row['CURSOR']) ) {
                     54:             var_dump($row_n);
                     55:         }
                     56:     }
                     57: }
                     58: 
                     59: function do_all($c) 
                     60: {
                     61:     $query = "SELECT t1.*, CURSOR( SELECT * FROM t2 ) AS CURSOR FROM t1";
                     62: 
                     63:     $stmt = oci_parse($c, $query);
                     64:     oci_execute($stmt);
                     65:     
                     66:     $rc1 = oci_fetch_all($stmt, $res);
                     67:     
                     68:     echo "Rows returned $rc1\n";
                     69: 
                     70:     var_dump($res);
                     71: 
                     72:     foreach ($res['CURSOR'] as $cv) {
                     73:         echo "Getting nested cursor\n";
                     74:         var_dump(oci_execute($cv));
                     75:         $rc2 = oci_fetch_all($cv, $res2);
                     76:         var_dump($res2);
                     77:     }
                     78: }
                     79: 
                     80: 
                     81: 
                     82: echo "Test 1: Associate fetch of nested cursor\n";
                     83: do_assoc($c);
                     84: 
                     85: echo "\nTest 2: fetchall of nested cursor\n";
                     86: do_all($c);
                     87: 
                     88: 
                     89: // Cleanup 
                     90: $s1 = oci_parse($c, $drop_1);
                     91: $s2 = oci_parse($c, $drop_2);
                     92: @oci_execute($s1);
                     93: @oci_execute($s2);
                     94: 
                     95: echo "Done\n";
                     96: ?>
                     97: --EXPECTF--
                     98: Test 1: Associate fetch of nested cursor
                     99: Got row "11". Now getting nested cursor:
                    100: bool(true)
                    101: array(1) {
                    102:   ["ID2"]=>
                    103:   string(2) "21"
                    104: }
                    105: array(1) {
                    106:   ["ID2"]=>
                    107:   string(2) "22"
                    108: }
                    109: array(1) {
                    110:   ["ID2"]=>
                    111:   string(2) "23"
                    112: }
                    113: Got row "12". Now getting nested cursor:
                    114: bool(true)
                    115: array(1) {
                    116:   ["ID2"]=>
                    117:   string(2) "21"
                    118: }
                    119: array(1) {
                    120:   ["ID2"]=>
                    121:   string(2) "22"
                    122: }
                    123: array(1) {
                    124:   ["ID2"]=>
                    125:   string(2) "23"
                    126: }
                    127: Got row "13". Now getting nested cursor:
                    128: bool(true)
                    129: array(1) {
                    130:   ["ID2"]=>
                    131:   string(2) "21"
                    132: }
                    133: array(1) {
                    134:   ["ID2"]=>
                    135:   string(2) "22"
                    136: }
                    137: array(1) {
                    138:   ["ID2"]=>
                    139:   string(2) "23"
                    140: }
                    141: 
                    142: Test 2: fetchall of nested cursor
                    143: Rows returned 3
                    144: array(2) {
                    145:   ["ID1"]=>
                    146:   array(3) {
                    147:     [0]=>
                    148:     string(2) "11"
                    149:     [1]=>
                    150:     string(2) "12"
                    151:     [2]=>
                    152:     string(2) "13"
                    153:   }
                    154:   ["CURSOR"]=>
                    155:   array(3) {
                    156:     [0]=>
                    157:     resource(%d) of type (oci8 statement)
                    158:     [1]=>
                    159:     resource(%d) of type (oci8 statement)
                    160:     [2]=>
                    161:     resource(%d) of type (oci8 statement)
                    162:   }
                    163: }
                    164: Getting nested cursor
                    165: bool(true)
                    166: array(1) {
                    167:   ["ID2"]=>
                    168:   array(3) {
                    169:     [0]=>
                    170:     string(2) "21"
                    171:     [1]=>
                    172:     string(2) "22"
                    173:     [2]=>
                    174:     string(2) "23"
                    175:   }
                    176: }
                    177: Getting nested cursor
                    178: bool(true)
                    179: array(1) {
                    180:   ["ID2"]=>
                    181:   array(3) {
                    182:     [0]=>
                    183:     string(2) "21"
                    184:     [1]=>
                    185:     string(2) "22"
                    186:     [2]=>
                    187:     string(2) "23"
                    188:   }
                    189: }
                    190: Getting nested cursor
                    191: bool(true)
                    192: array(1) {
                    193:   ["ID2"]=>
                    194:   array(3) {
                    195:     [0]=>
                    196:     string(2) "21"
                    197:     [1]=>
                    198:     string(2) "22"
                    199:     [2]=>
                    200:     string(2) "23"
                    201:   }
                    202: }
                    203: Done

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>