Annotation of embedaddon/php/ext/oci8/tests/bug37581.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Bug #37581 (oci_bind_array_by_name clobbers input array when using SQLT_AFC, AVC)
! 3: --SKIPIF--
! 4: <?php
! 5: $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
! 6: require(dirname(__FILE__).'/skipif.inc');
! 7: ?>
! 8: --FILE--
! 9: <?php
! 10:
! 11: require dirname(__FILE__)."/connect.inc";
! 12:
! 13: $p1 = "create or replace package ARRAYBINDPKG1 as
! 14: type str_array is table of char(2) index by binary_integer;
! 15: procedure array_bind(in_str in str_array, out_str out string);
! 16: end ARRAYBINDPKG1;";
! 17:
! 18: $p2 = "create or replace package body ARRAYBINDPKG1 as
! 19: procedure array_bind(in_str in str_array, out_str out string) is
! 20: begin
! 21: for i in 1 .. in_str.count loop
! 22: out_str := in_str(i);
! 23: end loop;
! 24: end array_bind;
! 25: end ARRAYBINDPKG1;";
! 26:
! 27: $s1 = oci_parse($c, $p1);
! 28: $s2 = oci_parse($c, $p2);
! 29: oci_execute($s1);
! 30: oci_execute($s2);
! 31:
! 32:
! 33: $stmt = oci_parse($c,'begin ARRAYBINDPKG1.array_bind(:in_arr, :out_str); end;');
! 34: $strings = array('A','B','C','D','E');
! 35:
! 36: oci_bind_array_by_name($stmt,':in_arr',$strings,5,1,SQLT_AFC);
! 37: oci_bind_by_name($stmt,':out_str',$result,10);
! 38:
! 39: oci_execute($stmt);
! 40: var_dump($strings);
! 41:
! 42: oci_execute($stmt);
! 43: var_dump($strings);
! 44:
! 45: echo "Done\n";
! 46: ?>
! 47: --EXPECTF--
! 48: array(5) {
! 49: [0]=>
! 50: string(1) "A"
! 51: [1]=>
! 52: string(1) "B"
! 53: [2]=>
! 54: string(1) "C"
! 55: [3]=>
! 56: string(1) "D"
! 57: [4]=>
! 58: string(1) "E"
! 59: }
! 60: array(5) {
! 61: [0]=>
! 62: string(1) "A"
! 63: [1]=>
! 64: string(1) "B"
! 65: [2]=>
! 66: string(1) "C"
! 67: [3]=>
! 68: string(1) "D"
! 69: [4]=>
! 70: string(1) "E"
! 71: }
! 72: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>