--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($s, OCI_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, -1, SQLT_NUM);
if (!$r) {
    $e = oci_error($s);
    var_dump($e['message']);
}
$r = oci_execute($s, OCI_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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, -1, SQLT_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===
