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

1.1       misho       1: --TEST--
                      2: Bug #38173 (Freeing nested cursors causes OCI8 to segfault)
                      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: $create_1 = "CREATE TABLE t1 (id INTEGER)";
                     14: $create_2 = "CREATE TABLE t2 (id INTEGER)";
                     15: $drop_1 = "DROP TABLE t1";
                     16: $drop_2 = "DROP TABLE t2";
                     17: 
                     18: $s1 = oci_parse($c, $drop_1);
                     19: $s2 = oci_parse($c, $drop_2);
                     20: @oci_execute($s1);
                     21: @oci_execute($s2);
                     22: 
                     23: $s1 = oci_parse($c, $create_1);
                     24: $s2 = oci_parse($c, $create_2);
                     25: oci_execute($s1);
                     26: oci_execute($s2);
                     27: 
                     28: for($i=0; $i < 5; $i++) {
                     29:        $insert = "INSERT INTO t1 VALUES(".$i.")";
                     30:        $s = oci_parse($c, $insert);
                     31:        oci_execute($s);
                     32: }
                     33: 
                     34: for($i=0; $i < 5; $i++) {
                     35:        $insert = "INSERT INTO t2 VALUES(".$i.")";
                     36:        $s = oci_parse($c, $insert);
                     37:        oci_execute($s);
                     38: }
                     39: 
                     40: $query ="
                     41: SELECT
                     42:   t1.*,
                     43:   CURSOR( SELECT * FROM t2 ) as cursor
                     44: FROM
                     45:   t1
                     46: ";
                     47: 
                     48: $sth = oci_parse($c, $query);
                     49: oci_execute($sth);
                     50: 
                     51: // dies on oci_free_statement on 2nd pass through loop
                     52: while ( $row = oci_fetch_assoc($sth) ) {
                     53:   print "Got row!\n";
                     54:   var_dump(oci_execute($row['CURSOR']));
                     55:   var_dump(oci_free_statement($row['CURSOR']));
                     56: }
                     57: 
                     58: $s1 = oci_parse($c, $drop_1);
                     59: $s2 = oci_parse($c, $drop_2);
                     60: @oci_execute($s1);
                     61: @oci_execute($s2);
                     62: 
                     63: echo "Done\n";
                     64: 
                     65: ?>
                     66: --EXPECT--
                     67: Got row!
                     68: bool(true)
                     69: bool(true)
                     70: Got row!
                     71: bool(true)
                     72: bool(true)
                     73: Got row!
                     74: bool(true)
                     75: bool(true)
                     76: Got row!
                     77: bool(true)
                     78: bool(true)
                     79: Got row!
                     80: bool(true)
                     81: bool(true)
                     82: Done

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