Skip to content

Commit 1c6ea06

Browse files
committed
New OCI8 test
1 parent 73ba495 commit 1c6ea06

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed

ext/oci8/tests/bug51253.phpt

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

0 commit comments

Comments
 (0)