mirror of
https://github.com/php/php-src.git
synced 2026-04-28 18:53:33 +02:00
MFH Fix bug #41069 (db link crash). Also allow SQLT_AFC (aka CHAR datatype) in oci_bind_by_name
This commit is contained in:
@@ -125,22 +125,13 @@ php_oci_statement *php_oci_statement_create (php_oci_connection *connection, cha
|
||||
Set prefetch buffer size for the statement (we're assuming that one row is ~1K sized) */
|
||||
int php_oci_statement_set_prefetch(php_oci_statement *statement, long size TSRMLS_DC)
|
||||
{
|
||||
ub4 prefetch = size * 1024;
|
||||
ub4 prefetch = size;
|
||||
|
||||
if (size < 1) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of rows has to be greater than or equal to 1");
|
||||
return 1;
|
||||
}
|
||||
|
||||
PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrSet, (statement->stmt, OCI_HTYPE_STMT, &prefetch, 0, OCI_ATTR_PREFETCH_MEMORY, statement->err));
|
||||
|
||||
if (statement->errcode != OCI_SUCCESS) {
|
||||
php_oci_error(statement->err, statement->errcode TSRMLS_CC);
|
||||
PHP_OCI_HANDLE_ERROR(statement->connection, statement->errcode);
|
||||
return 1;
|
||||
}
|
||||
|
||||
prefetch = size;
|
||||
PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrSet, (statement->stmt, OCI_HTYPE_STMT, &prefetch, 0, OCI_ATTR_PREFETCH_ROWS, statement->err));
|
||||
|
||||
if (statement->errcode != OCI_SUCCESS) {
|
||||
@@ -975,8 +966,8 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
|
||||
case SQLT_LBI:
|
||||
case SQLT_BIN:
|
||||
case SQLT_LNG:
|
||||
case SQLT_CHR:
|
||||
/* this is the default case when type was not specified */
|
||||
case SQLT_AFC:
|
||||
case SQLT_CHR: /* SQLT_CHR is the default value when type was not specified */
|
||||
if (Z_TYPE_P(var) != IS_NULL) {
|
||||
convert_to_string(var);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
--TEST--
|
||||
SELECT oci_bind_by_name with SQLT_AFC aka CHAR
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require(dirname(__FILE__).'/connect.inc');
|
||||
|
||||
// Initialization
|
||||
|
||||
$stmtarray = array(
|
||||
"drop table bind_char_tab",
|
||||
"create table bind_char_tab (id number, c1 char(10), c2 varchar2(10))",
|
||||
"insert into bind_char_tab values (1, 'abc', NULL)",
|
||||
"insert into bind_char_tab values (2, NULL, 'abc')",
|
||||
"insert into bind_char_tab values (3, NULL, 'abc ')"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
@oci_execute($s);
|
||||
}
|
||||
|
||||
// Run Test
|
||||
|
||||
echo "*** Non-null Data Tests against CHAR***\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
|
||||
echo "Test 1.1: Type: default. Length: default\n";
|
||||
$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv");
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.2: Type: AFC. Length: default\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.3: Type: AFC: Length: 0\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.4: Type: AFC: Length: strlen\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.5: Type: AFC. Length: strlen-1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.6: Type: AFC. Length: strlen+1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "\n\n*** NULL data tests against CHAR ***\n";
|
||||
|
||||
$bv1 = null;
|
||||
|
||||
echo "Test 2.1: Type: default. Length: default\n";
|
||||
$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv");
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 2.2: Type: AFC. Length: default\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 2.3: Type: AFC: Length: 0\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 2.4: Type: AFC: Length: strlen\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 2.5: Type: AFC. Length: strlen-1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 2.6: Type: AFC. Length: strlen+1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
|
||||
echo "\n\n*** Non-null Data Tests against VARCHAR2***\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
|
||||
echo "Test 3.1: Type: default. Length: default\n";
|
||||
$s = oci_parse($c, "select * from bind_char_tab where c2 = :bv");
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 3.2: Type: AFC. Length: default\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 3.3: Type: AFC: Length: 0\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 3.4: Type: AFC: Length: strlen\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 3.5: Type: AFC. Length: strlen-1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 3.6: Type: AFC. Length: strlen+1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
|
||||
echo "\n\n*** NULL data tests against VARCHAR2 ***\n";
|
||||
|
||||
$bv1 = null;
|
||||
|
||||
echo "Test 4.1: Type: default. Length: default\n";
|
||||
$s = oci_parse($c, "select * from bind_char_tab where c2 = :bv");
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 4.2: Type: AFC. Length: default\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 4.3: Type: AFC: Length: 0\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 4.4: Type: AFC: Length: strlen\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 4.5: Type: AFC. Length: strlen-1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 4.6: Type: AFC. Length: strlen+1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
|
||||
|
||||
function do_e_q($s)
|
||||
{
|
||||
echo " Querying:\n";
|
||||
|
||||
$r = @oci_execute($s);
|
||||
if (!$r) {
|
||||
$m = oci_error($s);
|
||||
echo " Oci_execute error ORA-".$m['code']." Exiting Query\n";
|
||||
return;
|
||||
}
|
||||
while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) {
|
||||
foreach ($row as $item) {
|
||||
echo " :" . $item . ":\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
$stmtarray = array(
|
||||
"drop table bind_char_tab"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
oci_execute($s);
|
||||
}
|
||||
|
||||
oci_close($c);
|
||||
|
||||
echo "Done\n";
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
*** Non-null Data Tests against CHAR***
|
||||
Test 1.1: Type: default. Length: default
|
||||
Querying:
|
||||
Test 1.2: Type: AFC. Length: default
|
||||
Querying:
|
||||
:1:
|
||||
:abc :
|
||||
::
|
||||
Test 1.3: Type: AFC: Length: 0
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 1.4: Type: AFC: Length: strlen
|
||||
Querying:
|
||||
:1:
|
||||
:abc :
|
||||
::
|
||||
Test 1.5: Type: AFC. Length: strlen-1
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 1.6: Type: AFC. Length: strlen+1
|
||||
Querying:
|
||||
:1:
|
||||
:abc :
|
||||
::
|
||||
|
||||
|
||||
*** NULL data tests against CHAR ***
|
||||
Test 2.1: Type: default. Length: default
|
||||
Querying:
|
||||
Test 2.2: Type: AFC. Length: default
|
||||
Querying:
|
||||
Test 2.3: Type: AFC: Length: 0
|
||||
Querying:
|
||||
Test 2.4: Type: AFC: Length: strlen
|
||||
Querying:
|
||||
Test 2.5: Type: AFC. Length: strlen-1
|
||||
Querying:
|
||||
Test 2.6: Type: AFC. Length: strlen+1
|
||||
Querying:
|
||||
|
||||
|
||||
*** Non-null Data Tests against VARCHAR2***
|
||||
Test 3.1: Type: default. Length: default
|
||||
Querying:
|
||||
:2:
|
||||
::
|
||||
:abc:
|
||||
Test 3.2: Type: AFC. Length: default
|
||||
Querying:
|
||||
:2:
|
||||
::
|
||||
:abc:
|
||||
Test 3.3: Type: AFC: Length: 0
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 3.4: Type: AFC: Length: strlen
|
||||
Querying:
|
||||
:2:
|
||||
::
|
||||
:abc:
|
||||
Test 3.5: Type: AFC. Length: strlen-1
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 3.6: Type: AFC. Length: strlen+1
|
||||
Querying:
|
||||
:2:
|
||||
::
|
||||
:abc:
|
||||
|
||||
|
||||
*** NULL data tests against VARCHAR2 ***
|
||||
Test 4.1: Type: default. Length: default
|
||||
Querying:
|
||||
Test 4.2: Type: AFC. Length: default
|
||||
Querying:
|
||||
Test 4.3: Type: AFC: Length: 0
|
||||
Querying:
|
||||
Test 4.4: Type: AFC: Length: strlen
|
||||
Querying:
|
||||
Test 4.5: Type: AFC. Length: strlen-1
|
||||
Querying:
|
||||
Test 4.6: Type: AFC. Length: strlen+1
|
||||
Querying:
|
||||
Done
|
||||
@@ -0,0 +1,115 @@
|
||||
--TEST--
|
||||
SELECT oci_bind_by_name with SQLT_AFC aka CHAR and dates
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require(dirname(__FILE__).'/connect.inc');
|
||||
|
||||
// Initialization
|
||||
|
||||
$stmtarray = array(
|
||||
"alter session set nls_date_format='YYYY-MM-DD'",
|
||||
"drop table bind_char_tab",
|
||||
"create table bind_char_tab (id number, c1 date)",
|
||||
"insert into bind_char_tab values (1, '2008-04-20')",
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
@oci_execute($s);
|
||||
}
|
||||
|
||||
// Run Test
|
||||
|
||||
$bv1 = '2008-04-20';
|
||||
|
||||
echo "Test 1.1: Type: default. Length: default\n";
|
||||
$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv");
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.2: Type: AFC. Length: default\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.3: Type: AFC: Length: 0\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.4: Type: AFC: Length: strlen\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.5: Type: AFC. Length: strlen-1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
echo "Test 1.6: Type: AFC. Length: strlen+1\n";
|
||||
$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e_q($s);
|
||||
|
||||
|
||||
function do_e_q($s)
|
||||
{
|
||||
echo " Querying:\n";
|
||||
|
||||
$r = @oci_execute($s);
|
||||
if (!$r) {
|
||||
$m = oci_error($s);
|
||||
echo " Oci_execute error ORA-".$m['code']." Exiting Query\n";
|
||||
return;
|
||||
}
|
||||
while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) {
|
||||
foreach ($row as $item) {
|
||||
echo " :" . $item . ":\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
$stmtarray = array(
|
||||
"drop table bind_char_tab"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
oci_execute($s);
|
||||
}
|
||||
|
||||
oci_close($c);
|
||||
|
||||
echo "Done\n";
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
Test 1.1: Type: default. Length: default
|
||||
Querying:
|
||||
:1:
|
||||
:2008-04-20:
|
||||
Test 1.2: Type: AFC. Length: default
|
||||
Querying:
|
||||
:1:
|
||||
:2008-04-20:
|
||||
Test 1.3: Type: AFC: Length: 0
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 1.4: Type: AFC: Length: strlen
|
||||
Querying:
|
||||
:1:
|
||||
:2008-04-20:
|
||||
Test 1.5: Type: AFC. Length: strlen-1
|
||||
Querying:
|
||||
Oci_execute error ORA-1460 Exiting Query
|
||||
Test 1.6: Type: AFC. Length: strlen+1
|
||||
Querying:
|
||||
:1:
|
||||
:2008-04-20:
|
||||
Done
|
||||
@@ -0,0 +1,336 @@
|
||||
--TEST--
|
||||
PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to CHAR parameter
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require(dirname(__FILE__).'/connect.inc');
|
||||
|
||||
// Initialization
|
||||
|
||||
$stmtarray = array(
|
||||
"create or replace function bind_char_3_fn(p1 char) return char as begin return p1; end;",
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
@oci_execute($s);
|
||||
}
|
||||
|
||||
// Run Test
|
||||
|
||||
echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n";
|
||||
|
||||
$s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;");
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "\n\nTests with ''\n\n";
|
||||
|
||||
echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "\n\nTests with NULL\n";
|
||||
|
||||
echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
function do_e($s)
|
||||
{
|
||||
echo " Executing:\n";
|
||||
|
||||
$r = @oci_execute($s);
|
||||
if (!$r) {
|
||||
$m = oci_error($s);
|
||||
echo " Oci_execute error ORA-".$m['code']."\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
|
||||
//require(dirname(__FILE__).'/drop_table.inc');
|
||||
|
||||
$stmtarray = array(
|
||||
"drop function bind_char_3_fn"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
oci_execute($s);
|
||||
}
|
||||
|
||||
oci_close($c);
|
||||
|
||||
echo "Done\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default
|
||||
Executing:
|
||||
Oci_execute error ORA-6502
|
||||
string(3) "abc"
|
||||
NULL
|
||||
Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(10) "abc "
|
||||
Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC
|
||||
Executing:
|
||||
Oci_execute error ORA-6502
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(4) "abc "
|
||||
|
||||
|
||||
Tests with ''
|
||||
|
||||
Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
|
||||
|
||||
Tests with NULL
|
||||
Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Done
|
||||
@@ -0,0 +1,338 @@
|
||||
--TEST--
|
||||
PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to VARCHAR2 parameter
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
// Same test as bind_char_3 but the PL/SQL function uses VARCHAR2 instead of CHAR
|
||||
|
||||
require(dirname(__FILE__).'/connect.inc');
|
||||
|
||||
// Initialization
|
||||
|
||||
$stmtarray = array(
|
||||
"create or replace function bind_char_3_fn(p1 varchar2) return varchar2 as begin return p1; end;",
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
@oci_execute($s);
|
||||
}
|
||||
|
||||
// Run Test
|
||||
|
||||
echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n";
|
||||
|
||||
$s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;");
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = 'abc';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "\n\nTests with ''\n\n";
|
||||
|
||||
echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = '';
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "\n\nTests with NULL\n";
|
||||
|
||||
echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
|
||||
echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
|
||||
|
||||
$bv1 = null;
|
||||
$r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
|
||||
if ($r)
|
||||
do_e($s);
|
||||
var_dump($bv1, $bv2);
|
||||
|
||||
|
||||
function do_e($s)
|
||||
{
|
||||
echo " Executing:\n";
|
||||
|
||||
$r = @oci_execute($s);
|
||||
if (!$r) {
|
||||
$m = oci_error($s);
|
||||
echo " Oci_execute error ORA-".$m['code']."\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
|
||||
//require(dirname(__FILE__).'/drop_table.inc');
|
||||
|
||||
$stmtarray = array(
|
||||
"drop function bind_char_3_fn"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
oci_execute($s);
|
||||
}
|
||||
|
||||
oci_close($c);
|
||||
|
||||
echo "Done\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default
|
||||
Executing:
|
||||
Oci_execute error ORA-6502
|
||||
string(3) "abc"
|
||||
NULL
|
||||
Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(10) "abc "
|
||||
Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC
|
||||
Executing:
|
||||
Oci_execute error ORA-6502
|
||||
string(3) "abc"
|
||||
string(3) "abc"
|
||||
Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC
|
||||
Executing:
|
||||
string(3) "abc"
|
||||
string(4) "abc "
|
||||
|
||||
|
||||
Tests with ''
|
||||
|
||||
Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC
|
||||
Executing:
|
||||
string(0) ""
|
||||
NULL
|
||||
|
||||
|
||||
Tests with NULL
|
||||
Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC
|
||||
Executing:
|
||||
NULL
|
||||
NULL
|
||||
Done
|
||||
@@ -0,0 +1,275 @@
|
||||
--TEST--
|
||||
Bug #41069 (Oracle crash with certain data over a DB-link when prefetch memory limit used - Oracle bug 6039623)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('oci8')) die ("skip no oci8 extension");
|
||||
require(dirname(__FILE__).'/details.inc');
|
||||
if (empty($dbase)) die ("skip requires network connection alias for DB link loopback");
|
||||
if ($test_drcp) die("skip DRCP does not support shared database links");
|
||||
?>
|
||||
--INI--
|
||||
oci8.default_prefetch=5
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require(dirname(__FILE__).'/connect.inc');
|
||||
|
||||
// Initialization
|
||||
|
||||
$stmtarray = array(
|
||||
"alter session set nls_date_format = 'MM/DD/YYYY'",
|
||||
|
||||
"drop database link bug41069_dblink",
|
||||
|
||||
"drop table bug41069_tab",
|
||||
|
||||
"create shared database link bug41069_dblink authenticated by $user identified by $password using '$dbase'",
|
||||
|
||||
"create table bug41069_tab
|
||||
(
|
||||
c1 number(20),
|
||||
c2 varchar2(60 byte),
|
||||
c3 varchar2(1000 byte),
|
||||
c4 varchar2(255 byte),
|
||||
c5 varchar2(2 byte),
|
||||
c6 varchar2(1 byte),
|
||||
c7 varchar2(255 byte),
|
||||
c8 varchar2(50 byte),
|
||||
c9 date,
|
||||
c10 date,
|
||||
c12 number(20),
|
||||
c13 varchar2(20 byte),
|
||||
c15 varchar2(50 byte)
|
||||
)",
|
||||
|
||||
"insert into bug41069_tab (c1, c2, c5, c6, c9, c10, c12, c15) values
|
||||
(111, 'aaaaaaa', 'b', 'c', '01/17/2008', '01/07/2017', 2222, 'zzzzzzzzzz')",
|
||||
|
||||
"insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c13, c15) values
|
||||
(112, 'aaaaaaa', 'bbbbbbbb', 'ccccccc', 'd', 'e', 'rrrrrrr', '04/16/2007', '04/16/2007', 2223, 'xxxxxxxx', 'zzzzzzzz')",
|
||||
|
||||
"insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c15) values
|
||||
(113, 'aaaaaaa', 'bbbbbbbbbb', 'cccccc', 'e', 'f', 'dddd', '12/04/2006', '12/04/2006', 2224, 'zzzzzzz')"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
@oci_execute($s);
|
||||
}
|
||||
|
||||
|
||||
// Run Tests
|
||||
|
||||
echo "Test 1: non-DB link case that always worked\n";
|
||||
$stid = oci_parse($c, 'select * from bug41069_tab order by c1');
|
||||
oci_execute($stid, OCI_DEFAULT);
|
||||
oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW);
|
||||
var_dump($results);
|
||||
|
||||
echo "Test 2: Should not crash\n";
|
||||
$stid = oci_parse($c, 'select * from bug41069_tab@bug41069_dblink order by c1');
|
||||
oci_execute($stid, OCI_DEFAULT);
|
||||
oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW);
|
||||
var_dump($results);
|
||||
|
||||
// Cleanup
|
||||
|
||||
$c = oci_new_connect($user, $password, $dbase);
|
||||
|
||||
$stmtarray = array(
|
||||
"drop database link bug41069_dblink",
|
||||
"drop table bug41069_tab"
|
||||
);
|
||||
|
||||
foreach ($stmtarray as $stmt) {
|
||||
$s = oci_parse($c, $stmt);
|
||||
oci_execute($s);
|
||||
}
|
||||
|
||||
oci_close($c);
|
||||
|
||||
echo "Done\n";
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
Test 1: non-DB link case that always worked
|
||||
array(3) {
|
||||
[0]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "111"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
NULL
|
||||
["C4"]=>
|
||||
NULL
|
||||
["C5"]=>
|
||||
string(1) "b"
|
||||
["C6"]=>
|
||||
string(1) "c"
|
||||
["C7"]=>
|
||||
NULL
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "01/17/2008"
|
||||
["C10"]=>
|
||||
string(10) "01/07/2017"
|
||||
["C12"]=>
|
||||
string(4) "2222"
|
||||
["C13"]=>
|
||||
NULL
|
||||
["C15"]=>
|
||||
string(10) "zzzzzzzzzz"
|
||||
}
|
||||
[1]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "112"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
string(8) "bbbbbbbb"
|
||||
["C4"]=>
|
||||
string(7) "ccccccc"
|
||||
["C5"]=>
|
||||
string(1) "d"
|
||||
["C6"]=>
|
||||
string(1) "e"
|
||||
["C7"]=>
|
||||
string(7) "rrrrrrr"
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "04/16/2007"
|
||||
["C10"]=>
|
||||
string(10) "04/16/2007"
|
||||
["C12"]=>
|
||||
string(4) "2223"
|
||||
["C13"]=>
|
||||
string(8) "xxxxxxxx"
|
||||
["C15"]=>
|
||||
string(8) "zzzzzzzz"
|
||||
}
|
||||
[2]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "113"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
string(10) "bbbbbbbbbb"
|
||||
["C4"]=>
|
||||
string(6) "cccccc"
|
||||
["C5"]=>
|
||||
string(1) "e"
|
||||
["C6"]=>
|
||||
string(1) "f"
|
||||
["C7"]=>
|
||||
string(4) "dddd"
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "12/04/2006"
|
||||
["C10"]=>
|
||||
string(10) "12/04/2006"
|
||||
["C12"]=>
|
||||
string(4) "2224"
|
||||
["C13"]=>
|
||||
NULL
|
||||
["C15"]=>
|
||||
string(7) "zzzzzzz"
|
||||
}
|
||||
}
|
||||
Test 2: Should not crash
|
||||
array(3) {
|
||||
[0]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "111"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
NULL
|
||||
["C4"]=>
|
||||
NULL
|
||||
["C5"]=>
|
||||
string(1) "b"
|
||||
["C6"]=>
|
||||
string(1) "c"
|
||||
["C7"]=>
|
||||
NULL
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "01/17/2008"
|
||||
["C10"]=>
|
||||
string(10) "01/07/2017"
|
||||
["C12"]=>
|
||||
string(4) "2222"
|
||||
["C13"]=>
|
||||
NULL
|
||||
["C15"]=>
|
||||
string(10) "zzzzzzzzzz"
|
||||
}
|
||||
[1]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "112"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
string(8) "bbbbbbbb"
|
||||
["C4"]=>
|
||||
string(7) "ccccccc"
|
||||
["C5"]=>
|
||||
string(1) "d"
|
||||
["C6"]=>
|
||||
string(1) "e"
|
||||
["C7"]=>
|
||||
string(7) "rrrrrrr"
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "04/16/2007"
|
||||
["C10"]=>
|
||||
string(10) "04/16/2007"
|
||||
["C12"]=>
|
||||
string(4) "2223"
|
||||
["C13"]=>
|
||||
string(8) "xxxxxxxx"
|
||||
["C15"]=>
|
||||
string(8) "zzzzzzzz"
|
||||
}
|
||||
[2]=>
|
||||
array(13) {
|
||||
["C1"]=>
|
||||
string(3) "113"
|
||||
["C2"]=>
|
||||
string(7) "aaaaaaa"
|
||||
["C3"]=>
|
||||
string(10) "bbbbbbbbbb"
|
||||
["C4"]=>
|
||||
string(6) "cccccc"
|
||||
["C5"]=>
|
||||
string(1) "e"
|
||||
["C6"]=>
|
||||
string(1) "f"
|
||||
["C7"]=>
|
||||
string(4) "dddd"
|
||||
["C8"]=>
|
||||
NULL
|
||||
["C9"]=>
|
||||
string(10) "12/04/2006"
|
||||
["C10"]=>
|
||||
string(10) "12/04/2006"
|
||||
["C12"]=>
|
||||
string(4) "2224"
|
||||
["C13"]=>
|
||||
NULL
|
||||
["C15"]=>
|
||||
string(7) "zzzzzzz"
|
||||
}
|
||||
}
|
||||
Done
|
||||
Reference in New Issue
Block a user