sixd            Tue Mar  4 21:45:55 2008 UTC

  Added files:                 
    /php-src/ext/oci8/tests     bind_char_1.phpt bind_char_2.phpt 
                                bind_char_3.phpt bind_char_4.phpt 
                                bug41069.phpt 

  Modified files:              
    /php-src/ext/oci8   oci8_statement.c 
  Log:
  Fix bug #41069 (db link crash).  Also allow SQLT_AFC (aka CHAR datatype) in 
oci_bind_by_name
  
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/oci8_statement.c?r1=1.54&r2=1.55&diff_format=u
Index: php-src/ext/oci8/oci8_statement.c
diff -u php-src/ext/oci8/oci8_statement.c:1.54 
php-src/ext/oci8/oci8_statement.c:1.55
--- php-src/ext/oci8/oci8_statement.c:1.54      Mon Feb 25 23:49:51 2008
+++ php-src/ext/oci8/oci8_statement.c   Tue Mar  4 21:45:55 2008
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_statement.c,v 1.54 2008/02/25 23:49:51 sixd Exp $ */
+/* $Id: oci8_statement.c,v 1.55 2008/03/04 21:45:55 sixd Exp $ */
 
 
 #ifdef HAVE_CONFIG_H
@@ -127,22 +127,13 @@
  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) {
@@ -1010,8 +1001,8 @@
                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_CHAR is the default value when type was 
not specified */
                        if (Z_TYPE_P(var) != IS_NULL) {
                                convert_to_text(var);
                        }

http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_1.phpt?view=markup&rev=1.1
Index: php-src/ext/oci8/tests/bind_char_1.phpt
+++ php-src/ext/oci8/tests/bind_char_1.phpt
--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
--UEXPECT--
*** 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:
    :1:
    :abc       :
    ::
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:
    :2:
    ::
    :abc:
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

http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_2.phpt?view=markup&rev=1.1
Index: php-src/ext/oci8/tests/bind_char_2.phpt
+++ php-src/ext/oci8/tests/bind_char_2.phpt
--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
--UEXPECT--
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:
    :1:
    :2008-04-20:
Test 1.6: Type: AFC.  Length: strlen+1
  Querying:
    :1:
    :2008-04-20:
Done

http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_3.phpt?view=markup&rev=1.1
Index: php-src/ext/oci8/tests/bind_char_3.phpt
+++ php-src/ext/oci8/tests/bind_char_3.phpt
--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
--UEXPECT--
Test 1.1 In Length: default.  In Type: default.  Out Length: default.          
Out Type: default
  Executing:
    Oci_execute error ORA-6502
unicode(3) "abc"
NULL
Test 1.2 In Length: default.  In Type: default.  Out Length: 10.               
Out Type: default
  Executing:
unicode(3) "abc"
unicode(3) "abc"
Test 1.3 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: default
  Executing:
unicode(3) "abc"
unicode(3) "abc"
Test 1.4 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(20) "abc                 "
Test 1.5 In Length: strlen.   In Type: AFC.      Out Length: strlen(input).    
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(6) "abc   "
Test 1.6 In Length: strlen.   In Type: AFC.      Out Length: strlen(input)-1.  
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(4) "abc "
Test 1.7 In Length: strlen.   In Type: AFC.      Out Length: strlen(input)+1.  
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(8) "abc     "


Tests with ''

Test 2.1 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.2 In Length: default.  In Type: default.  Out Length: 10.               
Out Type: default
  Executing:
unicode(0) ""
NULL
Test 2.3 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: default
  Executing:
unicode(0) ""
NULL
Test 2.4 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.5 In Length: -1.       In Type: AFC.      Out Length: 0.                
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.6 In Length: 0.        In Type: AFC.      Out Length: 0.                
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.7 In Length: 1.        In Type: AFC.      Out Length: 1.                
Out Type: AFC
  Executing:
unicode(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

http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_4.phpt?view=markup&rev=1.1
Index: php-src/ext/oci8/tests/bind_char_4.phpt
+++ php-src/ext/oci8/tests/bind_char_4.phpt
--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
--UEXPECT--
Test 1.1 In Length: default.  In Type: default.  Out Length: default.          
Out Type: default
  Executing:
    Oci_execute error ORA-6502
unicode(3) "abc"
NULL
Test 1.2 In Length: default.  In Type: default.  Out Length: 10.               
Out Type: default
  Executing:
unicode(3) "abc"
unicode(3) "abc"
Test 1.3 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: default
  Executing:
unicode(3) "abc"
unicode(3) "abc"
Test 1.4 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(20) "abc                 "
Test 1.5 In Length: strlen.   In Type: AFC.      Out Length: strlen(input).    
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(6) "abc   "
Test 1.6 In Length: strlen.   In Type: AFC.      Out Length: strlen(input)-1.  
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(4) "abc "
Test 1.7 In Length: strlen.   In Type: AFC.      Out Length: strlen(input)+1.  
Out Type: AFC
  Executing:
unicode(3) "abc"
unicode(8) "abc     "


Tests with ''

Test 2.1 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.2 In Length: default.  In Type: default.  Out Length: 10.               
Out Type: default
  Executing:
unicode(0) ""
NULL
Test 2.3 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: default
  Executing:
unicode(0) ""
NULL
Test 2.4 In Length: -1.       In Type: AFC.      Out Length: 10.               
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.5 In Length: -1.       In Type: AFC.      Out Length: 0.                
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.6 In Length: 0.        In Type: AFC.      Out Length: 0.                
Out Type: AFC
  Executing:
unicode(0) ""
NULL
Test 2.7 In Length: 1.        In Type: AFC.      Out Length: 1.                
Out Type: AFC
  Executing:
unicode(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

http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bug41069.phpt?view=markup&rev=1.1
Index: php-src/ext/oci8/tests/bug41069.phpt
+++ php-src/ext/oci8/tests/bug41069.phpt
--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 [EMAIL PROTECTED] 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
--UEXPECT--
Test 1: non-DB link case that always worked
array(3) {
  [0]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "111"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    NULL
    [u"C4"]=>
    NULL
    [u"C5"]=>
    unicode(1) "b"
    [u"C6"]=>
    unicode(1) "c"
    [u"C7"]=>
    NULL
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "01/17/2008"
    [u"C10"]=>
    unicode(10) "01/07/2017"
    [u"C12"]=>
    unicode(4) "2222"
    [u"C13"]=>
    NULL
    [u"C15"]=>
    unicode(10) "zzzzzzzzzz"
  }
  [1]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "112"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    unicode(8) "bbbbbbbb"
    [u"C4"]=>
    unicode(7) "ccccccc"
    [u"C5"]=>
    unicode(1) "d"
    [u"C6"]=>
    unicode(1) "e"
    [u"C7"]=>
    unicode(7) "rrrrrrr"
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "04/16/2007"
    [u"C10"]=>
    unicode(10) "04/16/2007"
    [u"C12"]=>
    unicode(4) "2223"
    [u"C13"]=>
    unicode(8) "xxxxxxxx"
    [u"C15"]=>
    unicode(8) "zzzzzzzz"
  }
  [2]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "113"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    unicode(10) "bbbbbbbbbb"
    [u"C4"]=>
    unicode(6) "cccccc"
    [u"C5"]=>
    unicode(1) "e"
    [u"C6"]=>
    unicode(1) "f"
    [u"C7"]=>
    unicode(4) "dddd"
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "12/04/2006"
    [u"C10"]=>
    unicode(10) "12/04/2006"
    [u"C12"]=>
    unicode(4) "2224"
    [u"C13"]=>
    NULL
    [u"C15"]=>
    unicode(7) "zzzzzzz"
  }
}
Test 2: Should not crash
array(3) {
  [0]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "111"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    NULL
    [u"C4"]=>
    NULL
    [u"C5"]=>
    unicode(1) "b"
    [u"C6"]=>
    unicode(1) "c"
    [u"C7"]=>
    NULL
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "01/17/2008"
    [u"C10"]=>
    unicode(10) "01/07/2017"
    [u"C12"]=>
    unicode(4) "2222"
    [u"C13"]=>
    NULL
    [u"C15"]=>
    unicode(10) "zzzzzzzzzz"
  }
  [1]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "112"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    unicode(8) "bbbbbbbb"
    [u"C4"]=>
    unicode(7) "ccccccc"
    [u"C5"]=>
    unicode(1) "d"
    [u"C6"]=>
    unicode(1) "e"
    [u"C7"]=>
    unicode(7) "rrrrrrr"
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "04/16/2007"
    [u"C10"]=>
    unicode(10) "04/16/2007"
    [u"C12"]=>
    unicode(4) "2223"
    [u"C13"]=>
    unicode(8) "xxxxxxxx"
    [u"C15"]=>
    unicode(8) "zzzzzzzz"
  }
  [2]=>
  array(13) {
    [u"C1"]=>
    unicode(3) "113"
    [u"C2"]=>
    unicode(7) "aaaaaaa"
    [u"C3"]=>
    unicode(10) "bbbbbbbbbb"
    [u"C4"]=>
    unicode(6) "cccccc"
    [u"C5"]=>
    unicode(1) "e"
    [u"C6"]=>
    unicode(1) "f"
    [u"C7"]=>
    unicode(4) "dddd"
    [u"C8"]=>
    NULL
    [u"C9"]=>
    unicode(10) "12/04/2006"
    [u"C10"]=>
    unicode(10) "12/04/2006"
    [u"C12"]=>
    unicode(4) "2224"
    [u"C13"]=>
    NULL
    [u"C15"]=>
    unicode(7) "zzzzzzz"
  }
}
Done

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to