--TEST--
Bind with SQLT_NUM
--SKIPIF--
<?php
if (!extension_loaded('oci8')) die("skip no oci8 extension");
if (
preg_match('/^1[012]\./'oci_client_version()) != 1) {
    die(
"skip test expected to work only with Oracle 10g or greater version of client");
}
?>
--FILE--
<?php

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

// Initialization

$stmtarray = array(
    
"drop table bind_sqltnum_tab",

    
"create table bind_sqltnum_tab (
        id                number,
        varchar2_t10      varchar2(10),
        number_t          number,
        number_t92        number(9,2))"
);

oci8_test_sql_execute($c$stmtarray);

function 
check_col($c$colname$id)
{
    
$s oci_parse($c"select $colname from bind_sqltnum_tab where id = :id");
    
oci_bind_by_name($s":id"$id);
    
oci_execute($s);
    
oci_fetch_all($s$r);
    
var_dump($r);
}


// Run Test

echo "Test 1 - baseline test\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (100, :c2)");
$c2 "Hood";
$r oci_bind_by_name($s":c2"$c2, -1);
if (!
$r) {
    
$e oci_error($s);
    
var_dump($e);
}
$r oci_execute($sOCI_DEFAULT);
if (!
$r) {
    
$e oci_error($s);
    
var_dump($e);
}

$s oci_parse($c"select id, varchar2_t10 from bind_sqltnum_tab");
oci_execute($s);
oci_fetch_all($s$data);
var_dump($data);

echo 
"Test 2 - SQLT_NUM to a VARCHAR2 column\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (100, :c2)");
$c2 "Hood";
$r oci_bind_by_name($s":c2"$c2, -1SQLT_NUM);
if (!
$r) {
    
$e oci_error($s);
    
var_dump($e['message']);
}
$r oci_execute($sOCI_DEFAULT);
if (!
$r) {
    
$e oci_error($s);
    
var_dump($e['message']);
}

echo 
"\nTEST41 wrong bind type SQLT_NUM\n";

$c2 "Hood41";
$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (41, :c2)");
oci_bind_by_name($s":c2"$c2, -1SQLT_NUM);
oci_execute($s);

echo 
"\nTEST42 insert numbers SQLT_NUM\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (42, :n1)");
$n1 42;
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'42);

echo 
"\nTEST43 insert numbers SQLT_NUM\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (43, :n1)");
$n1 42.69;
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'43);

echo 
"\nTEST44\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (44, :n1)");
$n1 0;
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'44);

echo 
"\nTEST45\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (45, :n1)");
$n1 = -23;
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'45);

echo 
"\nTEST46 insert numbers\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (46, :n1)");
$n1 "-23";
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'46);

echo 
"\nTEST47\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (47, :n1)");
$n1 "23";
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t'47);

echo 
"\nTEST48\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (48, :n1)");
$n1 123.56;
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t92'48);

echo 
"\nTEST49\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (49, :n1)");
$n1 "123.56";
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t92'49);

echo 
"\nTEST50\n";

$s oci_parse($c"INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (50, :n1)");
$n1 "";
oci_bind_by_name($s":n1"$n1, -1SQLT_NUM);
oci_execute($s);

check_col($c'number_t92'50);

// Clean up

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

oci8_test_sql_execute($c$stmtarray);

?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
Test 1 - baseline test
array(2) {
  ["ID"]=>
  array(1) {
    [0]=>
    string(3) "100"
  }
  ["VARCHAR2_T10"]=>
  array(1) {
    [0]=>
    string(4) "Hood"
  }
}
Test 2 - SQLT_NUM to a VARCHAR2 column

Warning: oci_execute(): ORA-12899: %s (%s: 40, %s: 10) in %sbind_sqltnum.php on line %d
string(%d) "ORA-12899: %s"

TEST41 wrong bind type SQLT_NUM

Warning: oci_execute(): ORA-12899: %s "%s"."BIND_SQLTNUM_TAB"."VARCHAR2_T10" (%s: 40, %s: 10) in %sbind_sqltnum.php on line %d

TEST42 insert numbers SQLT_NUM
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    NULL
  }
}

TEST43 insert numbers SQLT_NUM
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    NULL
  }
}

TEST44
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    string(127) "-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
  }
}

TEST45
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    NULL
  }
}

TEST46 insert numbers
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    NULL
  }
}

TEST47
array(1) {
  ["NUMBER_T"]=>
  array(1) {
    [0]=>
    NULL
  }
}

TEST48
array(1) {
  ["NUMBER_T92"]=>
  array(1) {
    [0]=>
    string(1) "0"
  }
}

TEST49
array(1) {
  ["NUMBER_T92"]=>
  array(1) {
    [0]=>
    string(1) "0"
  }
}

TEST50

Warning: oci_execute(): ORA-01438: %s in %sbind_sqltnum.php on line %d
array(1) {
  ["NUMBER_T92"]=>
  array(0) {
  }
}
===DONE===