1--TEST--
2Bug #46994 (CLOB size does not update when using CLOB IN OUT param in stored procedure)
3--EXTENSIONS--
4oci8
5--SKIPIF--
6<?php
7$target_dbs = array('oracledb' => true, 'timesten' => false);  // test runs on these DBs
8require(__DIR__.'/skipif.inc');
9?>
10--FILE--
11<?php
12
13require(__DIR__.'/connect.inc');
14
15// Initialization
16
17$stmtarray = array(
18    "create or replace procedure bug46994_proc1(p1 in out nocopy clob) is
19         begin
20             dbms_lob.trim(p1, 0);
21             dbms_lob.writeappend(p1, 26, 'This should be the output.');
22         end bug46994_proc1;",
23    "create or replace procedure bug46994_proc2(p1 in out nocopy clob) is
24         begin
25             dbms_lob.trim(p1, 0);
26             dbms_lob.writeappend(p1, 37, 'The output should be even longer now.');
27         end bug46994_proc2;"
28);
29
30oci8_test_sql_execute($c, $stmtarray);
31
32// Run Test
33
34$myclob = oci_new_descriptor($c, OCI_D_LOB);
35$myclob->writeTemporary("some data", OCI_TEMP_CLOB);
36
37echo "Test 1\n";
38
39$s = oci_parse($c, "begin bug46994_proc1(:myclob); end;");
40oci_bind_by_name($s, ":myclob", $myclob, -1, SQLT_CLOB);
41oci_execute($s, OCI_DEFAULT);
42var_dump($myclob->load());
43
44echo "Test 2\n";
45
46$s = oci_parse($c, "begin bug46994_proc2(:myclob); end;");
47oci_bind_by_name($s, ":myclob", $myclob, -1, SQLT_CLOB);
48oci_execute($s, OCI_DEFAULT);
49var_dump($myclob->load());
50
51echo "Test 3\n";
52
53$s = oci_parse($c, "begin bug46994_proc1(:myclob); end;");
54oci_bind_by_name($s, ":myclob", $myclob, -1, SQLT_CLOB);
55oci_execute($s, OCI_DEFAULT);
56var_dump($myclob->load());
57
58echo "Test 4\n";
59
60var_dump($myclob->load());  // Use cached size code path
61
62// Cleanup
63
64$stmtarray = array(
65    "drop procedure bug46994_proc1",
66    "drop procedure bug46994_proc2"
67);
68
69oci8_test_sql_execute($c, $stmtarray);
70
71oci_close($c);
72
73?>
74--EXPECT--
75Test 1
76string(26) "This should be the output."
77Test 2
78string(37) "The output should be even longer now."
79Test 3
80string(26) "This should be the output."
81Test 4
82string(26) "This should be the output."
83