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>