--TEST--
oci_define_by_name tests with REF CURSORs
--SKIPIF--
<?php
$target_dbs 
= array('oracledb' => true'timesten' => false);  // test runs on these DBs
require(dirname(__FILE__).'/skipif.inc');
?> 
--FILE--
<?php

require(dirname(__FILE__).'/connect.inc');

// Initialization

$stmtarray = array(
    
"drop table define6_tab",
    
"create table define6_tab (id number)",
    
"insert into define6_tab values (1)"
);

oci8_test_sql_execute($c$stmtarray);

// Run Test

$sql 
"DECLARE
  TYPE curtype IS REF CURSOR;
  cursor_var curtype;
BEGIN
  OPEN cursor_var FOR SELECT id FROM define6_tab;
  :curs := cursor_var;
END;"
;

echo 
"Test 1 - define last\n";

$s1 oci_parse($c$sql);
$cursor1 oci_new_cursor($c);
oci_bind_by_name($s1":curs"$cursor1, -1OCI_B_CURSOR);
oci_execute($s1);
oci_execute($cursor1);
oci_define_by_name($cursor1'ID'$id1);
while (
oci_fetch_row($cursor1)) {
    
var_dump($id1);
}


echo 
"Test 2 - define last with preset var\n";

$s2 oci_parse($c$sql);
$cursor2 oci_new_cursor($c);
oci_bind_by_name($s2":curs"$cursor2, -1OCI_B_CURSOR);
oci_execute($s2);
oci_execute($cursor2);
$id2 '';
oci_define_by_name($cursor2'ID'$id2);
while (
oci_fetch_row($cursor2)) {
    
var_dump($id2);
}


echo 
"Test 3 - define before cursor execute\n";

$s3 oci_parse($c$sql);
$cursor3 oci_new_cursor($c);
oci_bind_by_name($s3":curs"$cursor3, -1OCI_B_CURSOR);
oci_execute($s3);
oci_define_by_name($cursor3'ID'$id3);
oci_execute($cursor3);
while (
oci_fetch_row($cursor3)) {
    
var_dump($id3);
}


echo 
"Test 4 - define before top level execute\n";

$s4 oci_parse($c$sql);
$cursor4 oci_new_cursor($c);
oci_bind_by_name($s4":curs"$cursor4, -1OCI_B_CURSOR);
oci_define_by_name($cursor4'ID'$id4);
oci_execute($s4);
oci_execute($cursor4);
while (
oci_fetch_row($cursor4)) {
    
var_dump($id4);
}


echo 
"Test 5 - define before bind\n";

$s5 oci_parse($c$sql);
$cursor5 oci_new_cursor($c);
oci_define_by_name($cursor5'ID'$id5);
oci_bind_by_name($s5":curs"$cursor5, -1OCI_B_CURSOR);
oci_execute($s5);
oci_execute($cursor5);
while (
oci_fetch_row($cursor5)) {
    
var_dump($id5);
}


echo 
"Test 6 - fetch on wrong handle\n";

$s6 oci_parse($c$sql);
$cursor6 oci_new_cursor($c);
oci_define_by_name($cursor6'ID'$id6);
oci_bind_by_name($s6":curs"$cursor6, -1OCI_B_CURSOR);
oci_execute($s6);
oci_execute($cursor6);
while (
oci_fetch_row($s6)) {
    
var_dump($id6);
}


// Clean up

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

oci8_test_sql_execute($c$stmtarray);

?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
Test 1 - define last
NULL
Test 2 - define last with preset var
string(0) ""
Test 3 - define before cursor execute
string(1) "1"
Test 4 - define before top level execute
string(1) "1"
Test 5 - define before bind
string(1) "1"
Test 6 - fetch on wrong handle

Warning: oci_fetch_row(): ORA-24374: %s in %sdefine6.php on line %d
===DONE===