refcur_prefetch_3.phpt   [plain text]


--TEST--
Prefetch with Nested cursors with INI setting.
--INI--
oci8.default_prefetch=5
--SKIPIF--
<?php if (!extension_loaded('oci8')) die("skip no oci8 extension");
if (!extension_loaded('oci8')) die("skip no oci8 extension");
require(dirname(__FILE__)."/connect.inc");
if (preg_match('/Release (11\.2|12)\./', oci_server_version($c), $matches) !== 1) {
	die("skip expected output only valid when using Oracle 11gR2 or greater databases");
} else if (preg_match('/^(11\.2|12)\./', oci_client_version()) != 1) {
    die("skip test expected to work only with Oracle 11gR2 or greater version of client");
}

?>
--FILE--
<?php
require dirname(__FILE__)."/connect.inc";

//Create tables here
$stmtarray = array(
    "drop table nescurtest",
    "create table nescurtest(c1 varchar2(10))"
);

oci8_test_sql_execute($c, $stmtarray);

// Insert 500 rows into the table.
$insert_sql = "INSERT INTO nescurtest (c1) VALUES (:c1)";
if (!($s = oci_parse($c, $insert_sql))) {
    die("oci_parse(insert) failed!\n");
}

for ($i = 0; $i<=500; $i++) {
    $val2 = 'test'.$i;
    oci_bind_by_name($s,':c1',$val2);
    if (!oci_execute($s)) {
        die("oci_execute(insert) failed!\n");
    }
}

echo"-----------------------------------------------\n";
echo "Test with Nested Cursors\n";
echo"-----------------------------------------------\n";
$cur1 = oci_new_cursor($c);
$sqlstmt = "select cursor(select * from nescurtest) curs1 from dual";
$s = oci_parse($c,$sqlstmt);
oci_execute($s);
$data = oci_fetch_array($s);
oci_execute($data['CURS1']);

// Calculate round-trips 
$initial_rt = print_roundtrips($c);
for ($i = 0;$i<10;$i++) {
    echo "Fetch Row using Nested cursor Query\n";
    var_dump(oci_fetch_row($data['CURS1']));
}

$cnt = (print_roundtrips($c) - $initial_rt);
echo "Number of roundtrips made with prefetch count 5 for 10 rows is  $cnt\n";

function  print_roundtrips($c) {
    $sql_stmt = "select value from v\$mystat a,v\$statname c where
         a.statistic#=c.statistic# and c.name='SQL*Net roundtrips to/from client'";
    $s = oci_parse($c,$sql_stmt);
    oci_define_by_name($s,"VALUE",$value);
    oci_execute($s);
    oci_fetch($s);
    return $value;
}

// Clean up  here

$stmtarray = array(
    "drop table nescurtest"
);

oci8_test_sql_execute($c, $stmtarray);

echo "Done\n";
?>
--EXPECTF--
-----------------------------------------------
Test with Nested Cursors
-----------------------------------------------
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test0"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test1"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test2"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test3"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test4"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test5"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test6"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test7"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test8"
}
Fetch Row using Nested cursor Query
array(1) {
  [0]=>
  %unicode|string%(%d) "test9"
}
Number of roundtrips made with prefetch count 5 for 10 rows is  3
Done