Annotation of embedaddon/php/ext/oci8/tests/bug51253.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Bug #51253 (oci_bind_array_by_name() array references)
                      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: $drop = "DROP table bind_test";
                     14: $statement = oci_parse($c, $drop);
                     15: @oci_execute($statement);
                     16: 
                     17: $create = "CREATE table bind_test(name VARCHAR(20))";
                     18: $statement = oci_parse($c, $create);
                     19: oci_execute($statement);
                     20: 
                     21: $create_pkg = "
                     22: CREATE OR REPLACE PACKAGE ARRAYBINDPKG1 AS 
                     23:   TYPE ARRTYPE IS TABLE OF VARCHAR(20) INDEX BY BINARY_INTEGER; 
                     24:   PROCEDURE iobind(c1 IN OUT ARRTYPE); 
                     25: END ARRAYBINDPKG1;";
                     26: $statement = oci_parse($c, $create_pkg);
                     27: oci_execute($statement);
                     28: 
                     29: $create_pkg_body = "
                     30: CREATE OR REPLACE PACKAGE BODY ARRAYBINDPKG1 AS 
                     31:   CURSOR CUR IS SELECT name FROM bind_test;
                     32:   PROCEDURE iobind(c1 IN OUT ARRTYPE) IS
                     33:     BEGIN
                     34:     FOR i IN 1..5 LOOP
                     35:       INSERT INTO bind_test VALUES (c1(i));
                     36:     END LOOP;
                     37:     IF NOT CUR%ISOPEN THEN
                     38:       OPEN CUR;
                     39:     END IF;
                     40:     FOR i IN REVERSE 1..5 LOOP
                     41:       FETCH CUR INTO c1(i);
                     42:       IF CUR%NOTFOUND THEN
                     43:         CLOSE CUR;
                     44:         EXIT;
                     45:       END IF;
                     46:     END LOOP;
                     47:   END iobind;
                     48: END ARRAYBINDPKG1;";
                     49: $statement = oci_parse($c, $create_pkg_body);
                     50: oci_execute($statement);
                     51: 
                     52: echo "Test 1\n";
                     53: $statement = oci_parse($c, "BEGIN ARRAYBINDPKG1.iobind(:c1); END;");
                     54: $array1 = array("one", "two", "three", "four", "five");
                     55: $array2 = $array1;
                     56: oci_bind_array_by_name($statement, ":c1", $array2, 5, -1, SQLT_CHR);
                     57: oci_execute($statement);
                     58: 
                     59: var_dump($array1);
                     60: var_dump($array2);
                     61: 
                     62: 
                     63: echo "Test 2\n";
                     64: $statement = oci_parse($c, "BEGIN ARRAYBINDPKG1.iobind(:c1); END;");
                     65: $array1 = array("one", "two", "three", "four", "five");
                     66: $array2 = &$array1;
                     67: oci_bind_array_by_name($statement, ":c1", $array2, 5, -1, SQLT_CHR);
                     68: oci_execute($statement);
                     69: 
                     70: var_dump($array1);
                     71: var_dump($array2);
                     72: 
                     73: 
                     74: echo "Test 3\n";
                     75: $statement = oci_parse($c, "BEGIN ARRAYBINDPKG1.iobind(:c1); END;");
                     76: $array1 = array("one", "two", "three", "four", "five");
                     77: $array2 = &$array1;
                     78: oci_bind_array_by_name($statement, ":c1", $array1, 5, -1, SQLT_CHR);
                     79: oci_execute($statement);
                     80: 
                     81: var_dump($array1);
                     82: var_dump($array2);
                     83: 
                     84: // Cleanup
                     85: $statement = oci_parse($c, "DROP PACKAGE ARRAYBINDPKG1");
                     86: @oci_execute($statement);
                     87: $statement = oci_parse($c, "DROP TABLE BIND_TEST");
                     88: @oci_execute($statement);
                     89: 
                     90: echo "Done\n";
                     91: ?>
                     92: --EXPECT--     
                     93: Test 1
                     94: array(5) {
                     95:   [0]=>
                     96:   string(4) "five"
                     97:   [1]=>
                     98:   string(4) "four"
                     99:   [2]=>
                    100:   string(5) "three"
                    101:   [3]=>
                    102:   string(3) "two"
                    103:   [4]=>
                    104:   string(3) "one"
                    105: }
                    106: array(5) {
                    107:   [0]=>
                    108:   string(4) "five"
                    109:   [1]=>
                    110:   string(4) "four"
                    111:   [2]=>
                    112:   string(5) "three"
                    113:   [3]=>
                    114:   string(3) "two"
                    115:   [4]=>
                    116:   string(3) "one"
                    117: }
                    118: Test 2
                    119: array(5) {
                    120:   [0]=>
                    121:   string(3) "one"
                    122:   [1]=>
                    123:   string(3) "two"
                    124:   [2]=>
                    125:   string(5) "three"
                    126:   [3]=>
                    127:   string(4) "four"
                    128:   [4]=>
                    129:   string(4) "five"
                    130: }
                    131: array(5) {
                    132:   [0]=>
                    133:   string(3) "one"
                    134:   [1]=>
                    135:   string(3) "two"
                    136:   [2]=>
                    137:   string(5) "three"
                    138:   [3]=>
                    139:   string(4) "four"
                    140:   [4]=>
                    141:   string(4) "five"
                    142: }
                    143: Test 3
                    144: array(5) {
                    145:   [0]=>
                    146:   string(4) "five"
                    147:   [1]=>
                    148:   string(4) "four"
                    149:   [2]=>
                    150:   string(5) "three"
                    151:   [3]=>
                    152:   string(3) "two"
                    153:   [4]=>
                    154:   string(3) "one"
                    155: }
                    156: array(5) {
                    157:   [0]=>
                    158:   string(4) "five"
                    159:   [1]=>
                    160:   string(4) "four"
                    161:   [2]=>
                    162:   string(5) "three"
                    163:   [3]=>
                    164:   string(3) "two"
                    165:   [4]=>
                    166:   string(3) "one"
                    167: }
                    168: Done

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>