Annotation of embedaddon/php/ext/oci8/tests/bug42841.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Bug #42841 (REF CURSOR and oci_new_cursor PHP crash)
        !             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: --INI--
        !             9: oci8.statement_cache_size=20
        !            10: --FILE--
        !            11: <?php
        !            12: 
        !            13: require dirname(__FILE__).'/details.inc';
        !            14: 
        !            15: // note a oci_new_connect() occurs lower in the script
        !            16: $c = oci_connect($user, $password, $dbase);
        !            17: 
        !            18: // Initialization
        !            19: 
        !            20: $stmtarray = array(
        !            21:     "create or replace procedure bug42841_proc(out_1 out sys_refcursor) is
        !            22:    begin
        !            23:       open out_1 for select 11 from dual union all select 12 from dual union all select 13 from dual;
        !            24:    end bug42841_proc;",
        !            25: 
        !            26:     "create or replace package bug43449_pkg is
        !            27:         type cursortype is ref Cursor;  
        !            28:         function testcursor return cursortype;
        !            29:     end bug43449_pkg;",
        !            30:     
        !            31:     "create or replace package body bug43449_pkg is
        !            32:     function testcursor return cursortype is
        !            33:     retCursor cursorType;
        !            34:     begin
        !            35:         Open retCursor For 'select * from dual';
        !            36:         return retCursor;
        !            37:     end;
        !            38:     end bug43449_pkg;"
        !            39: );
        !            40: 
        !            41: oci8_test_sql_execute($c, $stmtarray);
        !            42: 
        !            43: // Main code
        !            44: 
        !            45: function do_bug42841($c)
        !            46: {
        !            47:     echo "First attempt\n";
        !            48: 
        !            49:     $sql = "BEGIN bug42841_proc(:cursor); END;";
        !            50:     $stmt = oci_parse($c, $sql);
        !            51:     $cursor = oci_new_cursor($c);
        !            52:     oci_bind_by_name($stmt, ":cursor", $cursor, -1, OCI_B_CURSOR);
        !            53:     
        !            54:     oci_execute($stmt, OCI_DEFAULT);
        !            55:     oci_execute($cursor);
        !            56:     
        !            57:     while($row = oci_fetch_array($cursor, OCI_ASSOC + OCI_RETURN_LOBS)) {
        !            58:         $data1[] = $row;
        !            59:     }
        !            60:     
        !            61:     oci_free_statement($stmt);
        !            62:     oci_free_statement($cursor);
        !            63:     var_dump($data1);
        !            64:     
        !            65:     echo "Second attempt\n";
        !            66:     
        !            67:     $sql = "BEGIN bug42841_proc(:cursor); END;";
        !            68:     $stmt = oci_parse($c, $sql);
        !            69:     $cursor = oci_new_cursor($c);
        !            70:     oci_bind_by_name($stmt, ":cursor", $cursor, -1, OCI_B_CURSOR);
        !            71:     
        !            72:     oci_execute($stmt, OCI_DEFAULT);
        !            73:     oci_execute($cursor);
        !            74:     
        !            75:     while($row = oci_fetch_array($cursor, OCI_ASSOC + OCI_RETURN_LOBS)) {
        !            76:         $data2[] = $row;
        !            77:     }
        !            78:     
        !            79:     oci_free_statement($stmt);
        !            80:     oci_free_statement($cursor);
        !            81:     var_dump($data2);
        !            82: }
        !            83: 
        !            84: function do_bug43449($c)
        !            85: {
        !            86: 
        !            87:     for ($i = 0; $i < 2; $i++) {
        !            88:         var_dump(bug43449_getCur($c));
        !            89:     }
        !            90: }
        !            91: 
        !            92: function bug43449_getCur($c)
        !            93: {       
        !            94:     $cur = oci_new_cursor($c);
        !            95:     $stmt = oci_parse($c, 'begin :cur := bug43449_pkg.testcursor; end;');
        !            96:     oci_bind_by_name($stmt, ':cur', $cur, -1, OCI_B_CURSOR);
        !            97:     oci_execute($stmt, OCI_DEFAULT);
        !            98:     oci_execute($cur, OCI_DEFAULT);
        !            99:     
        !           100:     $ret = array();
        !           101:     
        !           102:     while (ocifetchinto($cur, $row, OCI_ASSOC)) {
        !           103:         $ret[] = $row;
        !           104:     }
        !           105:     
        !           106:     oci_free_statement($cur);
        !           107:     oci_free_statement($stmt);
        !           108:     return $ret;
        !           109: }
        !           110: 
        !           111: echo "Test bug 42841: Procedure with OUT cursor parameter\n";
        !           112: do_bug42841($c);
        !           113: 
        !           114: $c = oci_new_connect($user, $password, $dbase);
        !           115: 
        !           116: echo "Test bug 43449: Cursor as function result\n";
        !           117: do_bug43449($c);
        !           118: 
        !           119: // Cleanup
        !           120: 
        !           121: $stmtarray = array(
        !           122:     "drop procedure bug42841_proc",
        !           123:     "drop package bug43449_pkg"
        !           124: );
        !           125: 
        !           126: oci8_test_sql_execute($c, $stmtarray);
        !           127: 
        !           128: echo "Done\n";
        !           129: 
        !           130: ?>
        !           131: --EXPECT--
        !           132: Test bug 42841: Procedure with OUT cursor parameter
        !           133: First attempt
        !           134: array(3) {
        !           135:   [0]=>
        !           136:   array(1) {
        !           137:     [11]=>
        !           138:     string(2) "11"
        !           139:   }
        !           140:   [1]=>
        !           141:   array(1) {
        !           142:     [11]=>
        !           143:     string(2) "12"
        !           144:   }
        !           145:   [2]=>
        !           146:   array(1) {
        !           147:     [11]=>
        !           148:     string(2) "13"
        !           149:   }
        !           150: }
        !           151: Second attempt
        !           152: array(3) {
        !           153:   [0]=>
        !           154:   array(1) {
        !           155:     [11]=>
        !           156:     string(2) "11"
        !           157:   }
        !           158:   [1]=>
        !           159:   array(1) {
        !           160:     [11]=>
        !           161:     string(2) "12"
        !           162:   }
        !           163:   [2]=>
        !           164:   array(1) {
        !           165:     [11]=>
        !           166:     string(2) "13"
        !           167:   }
        !           168: }
        !           169: Test bug 43449: Cursor as function result
        !           170: array(1) {
        !           171:   [0]=>
        !           172:   array(1) {
        !           173:     ["DUMMY"]=>
        !           174:     string(1) "X"
        !           175:   }
        !           176: }
        !           177: array(1) {
        !           178:   [0]=>
        !           179:   array(1) {
        !           180:     ["DUMMY"]=>
        !           181:     string(1) "X"
        !           182:   }
        !           183: }
        !           184: Done

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