1--TEST--
2PDO OCI: Fetches 10K records from a table that contains 1 number and 2 LOB columns (stress test)
3--SKIPIF--
4<?php
5if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
6if (getenv('SKIP_SLOW_TESTS')) die('skip slow tests excluded by request');
7require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
8PDOTest::skip();
9?>
10--FILE--
11<?php
12
13// !! Note: uses data inserted in pdo_oci_stream_2a.phpt !!
14
15require('ext/pdo/tests/pdo_test.inc');
16$db = PDOTest::test_factory('ext/pdo_oci/tests/common.phpt');
17
18$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);  // Let's use streams
19
20// Since each column only has one lob descriptor, the last row is
21// shown twice because the lob descriptor for each column is reused in
22// the stream
23
24$i = 0;
25$j = 9;
26$a_val = ord('a');
27foreach($db->query("select data1 as d4_1, data2 as d4_2 from pdo_oci_stream_2 order by id") as $row) {
28    $a = $row['d4_1'];
29	$a1 = $row['d4_2'];
30
31    $str1 = stream_get_contents($a);
32	$str2 = stream_get_contents($a1);
33
34    $str1len = strlen($str1);
35	$str2len = strlen($str2);
36
37    $b = ord($str1[0]);
38	$b1 = ord($str2[0]);
39
40    if (($b != ($a_val + $i)) && ($str1len != (4086 + $i)) &&
41        ($b1 != ($a_val + $j)) && ($str2len != (4086 + $j))) {
42        printf("There is a bug!\n");
43        printf("Col1:\n");
44        printf("a_val = %d\n", $a_val);
45        printf("b     = %d\n", $b);
46        printf("i     = %d\n", $i);
47        printf("str1len = %d\n", $str1len);
48
49        printf("Col2:\n");
50        printf("a_val = %d\n", $a_val);
51        printf("b1    = %d\n", $b1);
52        printf("j     = %d\n", $j);
53        printf("str2len = %d\n", $str1len);
54
55    }
56    $i++;
57    if ($i>9)
58        $i = 0;
59	$j--;
60	if ($j<0)
61        $j = 9;
62}
63echo "Fetch operation done!\n";
64
65/* Cleanup */
66$db->exec("drop table pdo_oci_stream_2");
67
68?>
69--EXPECTF--
70Fetch operation done!
71