diff options
author | Christopher Jones <sixd@php.net> | 2010-08-07 00:28:09 +0000 |
---|---|---|
committer | Christopher Jones <sixd@php.net> | 2010-08-07 00:28:09 +0000 |
commit | 05be95c0bee8c215d813ea71e000fa0b76abaf86 (patch) | |
tree | e1f53f5490f30a7c83e79ad929797559deb359e2 /tests/bug42841.phpt | |
download | php-git-05be95c0bee8c215d813ea71e000fa0b76abaf86.tar.gz |
Tagging the 1.4.3 releaseoci8-1.4.3
Diffstat (limited to 'tests/bug42841.phpt')
-rw-r--r-- | tests/bug42841.phpt | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/tests/bug42841.phpt b/tests/bug42841.phpt new file mode 100644 index 0000000000..921c8149dd --- /dev/null +++ b/tests/bug42841.phpt @@ -0,0 +1,187 @@ +--TEST-- +Bug #42841 (REF CURSOR and oci_new_cursor PHP crash) +--SKIPIF-- +<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?> +--INI-- +oci8.statement_cache_size=20 +--FILE-- +<?php + +require dirname(__FILE__).'/details.inc'; + +// note a oci_new_connect() occurs lower in the script +$c = oci_connect($user, $password, $dbase); + +// Initialization + +$stmtarray = array( + "create or replace procedure bug42841_proc(out_1 out sys_refcursor) is + begin + open out_1 for select 11 from dual union all select 12 from dual union all select 13 from dual; + end bug42841_proc;", + + "create or replace package bug43449_pkg is + type cursortype is ref Cursor; + function testcursor return cursortype; + end bug43449_pkg;", + + "create or replace package body bug43449_pkg is + function testcursor return cursortype is + retCursor cursorType; + begin + Open retCursor For 'select * from dual'; + return retCursor; + end; + end bug43449_pkg;" +); + +foreach ($stmtarray as $stmt) { + $s = oci_parse($c, $stmt); + @oci_execute($s); +} + +// Main code + +function do_bug42841($c) +{ + echo "First attempt\n"; + + $sql = "BEGIN bug42841_proc(:cursor); END;"; + $stmt = oci_parse($c, $sql); + $cursor = oci_new_cursor($c); + oci_bind_by_name($stmt, ":cursor", $cursor, -1, OCI_B_CURSOR); + + oci_execute($stmt, OCI_DEFAULT); + oci_execute($cursor); + + while($row = oci_fetch_array($cursor, OCI_ASSOC + OCI_RETURN_LOBS)) { + $data1[] = $row; + } + + oci_free_statement($stmt); + oci_free_statement($cursor); + var_dump($data1); + + echo "Second attempt\n"; + + $sql = "BEGIN bug42841_proc(:cursor); END;"; + $stmt = oci_parse($c, $sql); + $cursor = oci_new_cursor($c); + oci_bind_by_name($stmt, ":cursor", $cursor, -1, OCI_B_CURSOR); + + oci_execute($stmt, OCI_DEFAULT); + oci_execute($cursor); + + while($row = oci_fetch_array($cursor, OCI_ASSOC + OCI_RETURN_LOBS)) { + $data2[] = $row; + } + + oci_free_statement($stmt); + oci_free_statement($cursor); + var_dump($data2); +} + +function do_bug43449($c) +{ + + for ($i = 0; $i < 2; $i++) { + var_dump(bug43449_getCur($c)); + } +} + +function bug43449_getCur($c) +{ + $cur = oci_new_cursor($c); + $stmt = oci_parse($c, 'begin :cur := bug43449_pkg.testcursor; end;'); + oci_bind_by_name($stmt, ':cur', $cur, -1, OCI_B_CURSOR); + oci_execute($stmt, OCI_DEFAULT); + oci_execute($cur, OCI_DEFAULT); + + $ret = array(); + + while (ocifetchinto($cur, $row, OCI_ASSOC)) { + $ret[] = $row; + } + + oci_free_statement($cur); + oci_free_statement($stmt); + return $ret; +} + +echo "Test bug 42841: Procedure with OUT cursor parameter\n"; +do_bug42841($c); + +$c = oci_new_connect($user, $password, $dbase); + +echo "Test bug 43449: Cursor as function result\n"; +do_bug43449($c); + +// Cleanup + +$stmtarray = array( + "drop procedure bug42841_proc", + "drop package bug43449_pkg" +); + +foreach ($stmtarray as $stmt) { + $s = oci_parse($c, $stmt); + oci_execute($s); +} + +echo "Done\n"; + +?> +--EXPECT-- +Test bug 42841: Procedure with OUT cursor parameter +First attempt +array(3) { + [0]=> + array(1) { + [11]=> + string(2) "11" + } + [1]=> + array(1) { + [11]=> + string(2) "12" + } + [2]=> + array(1) { + [11]=> + string(2) "13" + } +} +Second attempt +array(3) { + [0]=> + array(1) { + [11]=> + string(2) "11" + } + [1]=> + array(1) { + [11]=> + string(2) "12" + } + [2]=> + array(1) { + [11]=> + string(2) "13" + } +} +Test bug 43449: Cursor as function result +array(1) { + [0]=> + array(1) { + ["DUMMY"]=> + string(1) "X" + } +} +array(1) { + [0]=> + array(1) { + ["DUMMY"]=> + string(1) "X" + } +} +Done |