Annotation of embedaddon/php/ext/oci8/tests/bug51253.phpt, revision 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>