123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- --TEST--
- Bug #43492 (Nested cursor leaks)
- --EXTENSIONS--
- oci8
- --SKIPIF--
- <?php
- $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
- require(__DIR__.'/skipif.inc');
- ?>
- --FILE--
- <?php
- require __DIR__.'/connect.inc';
- $stmtarray = array(
- "DROP table bug43492_tab",
- "CREATE TABLE bug43492_tab(col1 VARCHAR2(1))",
- "INSERT INTO bug43492_tab VALUES ('A')",
- "INSERT INTO bug43492_tab VALUES ('B')",
- "INSERT INTO bug43492_tab VALUES ('C')",
- "INSERT INTO bug43492_tab VALUES ('D')",
- "INSERT INTO bug43492_tab VALUES ('E')",
- "INSERT INTO bug43492_tab VALUES ('F')",
- "INSERT INTO bug43492_tab VALUES ('G')",
- "INSERT INTO bug43492_tab VALUES ('H')",
- "INSERT INTO bug43492_tab VALUES ('I')",
- "INSERT INTO bug43492_tab VALUES ('J')"
- );
- oci8_test_sql_execute($c, $stmtarray);
- /*
- While fetching data from a ref cursor, the parent statement needs to
- be around. Also when the parent statement goes out of scope, it is
- not automatically released which causes a cursor leak.
- If either or both of the lines marked (*) are removed, then the script
- will fail with the error "ORA-01000: maximum open cursors exceeded".
- */
- function fetch($c, $i) {
- global $s; // (*) Allow parent statement to be available when child is used
- $s = oci_parse($c, 'select cursor(select * from bug43492_tab) c from bug43492_tab');
- oci_execute($s, OCI_DEFAULT);
- $result = oci_fetch_assoc($s);
- oci_execute($result['C'], OCI_DEFAULT);
- return $result['C'];
- }
- for($i = 0; $i < 300; $i++) {
- $cur = fetch($c, $i);
- for($j = 0; $j < 10; $j++) {
- $row = oci_fetch_row($cur);
- echo "$row[0] ";
- }
- echo "\n";
- oci_free_statement($cur);
- oci_free_statement($s); // (*) Free the parent statement cleanly
- }
- echo "Done\n";
- // Cleanup
- $stmtarray = array(
- "DROP table bug43492_tab"
- );
- oci8_test_sql_execute($c, $stmtarray);
- ?>
- --EXPECT--
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- A B C D E F G H I J
- Done
|