bug41069.phpt 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. --TEST--
  2. Bug #41069 (Oracle crash with certain data over a DB-link when prefetch memory limit used - Oracle bug 6039623)
  3. --EXTENSIONS--
  4. oci8
  5. --SKIPIF--
  6. <?php
  7. $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
  8. require(__DIR__.'/skipif.inc');
  9. if (empty($dbase)) die ("skip requires network connection alias for DB link loopback");
  10. if ($test_drcp) die("skip DRCP does not support shared database links");
  11. ?>
  12. --INI--
  13. oci8.default_prefetch=5
  14. --FILE--
  15. <?php
  16. require(__DIR__.'/connect.inc');
  17. // Initialization
  18. $stmtarray = array(
  19. "alter session set nls_date_format = 'MM/DD/YYYY'",
  20. "drop database link bug41069_dblink",
  21. "drop table bug41069_tab",
  22. "create shared database link bug41069_dblink authenticated by $user identified by $password using '$dbase'",
  23. "create table bug41069_tab
  24. (
  25. c1 number(20),
  26. c2 varchar2(60 byte),
  27. c3 varchar2(1000 byte),
  28. c4 varchar2(255 byte),
  29. c5 varchar2(2 byte),
  30. c6 varchar2(1 byte),
  31. c7 varchar2(255 byte),
  32. c8 varchar2(50 byte),
  33. c9 date,
  34. c10 date,
  35. c12 number(20),
  36. c13 varchar2(20 byte),
  37. c15 varchar2(50 byte)
  38. )",
  39. "insert into bug41069_tab (c1, c2, c5, c6, c9, c10, c12, c15) values
  40. (111, 'aaaaaaa', 'b', 'c', '01/17/2008', '01/07/2017', 2222, 'zzzzzzzzzz')",
  41. "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c13, c15) values
  42. (112, 'aaaaaaa', 'bbbbbbbb', 'ccccccc', 'd', 'e', 'rrrrrrr', '04/16/2007', '04/16/2007', 2223, 'xxxxxxxx', 'zzzzzzzz')",
  43. "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c15) values
  44. (113, 'aaaaaaa', 'bbbbbbbbbb', 'cccccc', 'e', 'f', 'dddd', '12/04/2006', '12/04/2006', 2224, 'zzzzzzz')"
  45. );
  46. oci8_test_sql_execute($c, $stmtarray);
  47. // Run Tests
  48. echo "Test 1: non-DB link case that always worked\n";
  49. $stid = oci_parse($c, 'select * from bug41069_tab order by c1');
  50. oci_execute($stid, OCI_DEFAULT);
  51. oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW);
  52. var_dump($results);
  53. echo "Test 2: Should not crash\n";
  54. $stid = oci_parse($c, 'select * from bug41069_tab@bug41069_dblink order by c1');
  55. oci_execute($stid, OCI_DEFAULT);
  56. oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW);
  57. var_dump($results);
  58. // Cleanup
  59. $c = oci_new_connect($user, $password, $dbase);
  60. $stmtarray = array(
  61. "drop database link bug41069_dblink",
  62. "drop table bug41069_tab"
  63. );
  64. oci8_test_sql_execute($c, $stmtarray);
  65. echo "Done\n";
  66. ?>
  67. --EXPECT--
  68. Test 1: non-DB link case that always worked
  69. array(3) {
  70. [0]=>
  71. array(13) {
  72. ["C1"]=>
  73. string(3) "111"
  74. ["C2"]=>
  75. string(7) "aaaaaaa"
  76. ["C3"]=>
  77. NULL
  78. ["C4"]=>
  79. NULL
  80. ["C5"]=>
  81. string(1) "b"
  82. ["C6"]=>
  83. string(1) "c"
  84. ["C7"]=>
  85. NULL
  86. ["C8"]=>
  87. NULL
  88. ["C9"]=>
  89. string(10) "01/17/2008"
  90. ["C10"]=>
  91. string(10) "01/07/2017"
  92. ["C12"]=>
  93. string(4) "2222"
  94. ["C13"]=>
  95. NULL
  96. ["C15"]=>
  97. string(10) "zzzzzzzzzz"
  98. }
  99. [1]=>
  100. array(13) {
  101. ["C1"]=>
  102. string(3) "112"
  103. ["C2"]=>
  104. string(7) "aaaaaaa"
  105. ["C3"]=>
  106. string(8) "bbbbbbbb"
  107. ["C4"]=>
  108. string(7) "ccccccc"
  109. ["C5"]=>
  110. string(1) "d"
  111. ["C6"]=>
  112. string(1) "e"
  113. ["C7"]=>
  114. string(7) "rrrrrrr"
  115. ["C8"]=>
  116. NULL
  117. ["C9"]=>
  118. string(10) "04/16/2007"
  119. ["C10"]=>
  120. string(10) "04/16/2007"
  121. ["C12"]=>
  122. string(4) "2223"
  123. ["C13"]=>
  124. string(8) "xxxxxxxx"
  125. ["C15"]=>
  126. string(8) "zzzzzzzz"
  127. }
  128. [2]=>
  129. array(13) {
  130. ["C1"]=>
  131. string(3) "113"
  132. ["C2"]=>
  133. string(7) "aaaaaaa"
  134. ["C3"]=>
  135. string(10) "bbbbbbbbbb"
  136. ["C4"]=>
  137. string(6) "cccccc"
  138. ["C5"]=>
  139. string(1) "e"
  140. ["C6"]=>
  141. string(1) "f"
  142. ["C7"]=>
  143. string(4) "dddd"
  144. ["C8"]=>
  145. NULL
  146. ["C9"]=>
  147. string(10) "12/04/2006"
  148. ["C10"]=>
  149. string(10) "12/04/2006"
  150. ["C12"]=>
  151. string(4) "2224"
  152. ["C13"]=>
  153. NULL
  154. ["C15"]=>
  155. string(7) "zzzzzzz"
  156. }
  157. }
  158. Test 2: Should not crash
  159. array(3) {
  160. [0]=>
  161. array(13) {
  162. ["C1"]=>
  163. string(3) "111"
  164. ["C2"]=>
  165. string(7) "aaaaaaa"
  166. ["C3"]=>
  167. NULL
  168. ["C4"]=>
  169. NULL
  170. ["C5"]=>
  171. string(1) "b"
  172. ["C6"]=>
  173. string(1) "c"
  174. ["C7"]=>
  175. NULL
  176. ["C8"]=>
  177. NULL
  178. ["C9"]=>
  179. string(10) "01/17/2008"
  180. ["C10"]=>
  181. string(10) "01/07/2017"
  182. ["C12"]=>
  183. string(4) "2222"
  184. ["C13"]=>
  185. NULL
  186. ["C15"]=>
  187. string(10) "zzzzzzzzzz"
  188. }
  189. [1]=>
  190. array(13) {
  191. ["C1"]=>
  192. string(3) "112"
  193. ["C2"]=>
  194. string(7) "aaaaaaa"
  195. ["C3"]=>
  196. string(8) "bbbbbbbb"
  197. ["C4"]=>
  198. string(7) "ccccccc"
  199. ["C5"]=>
  200. string(1) "d"
  201. ["C6"]=>
  202. string(1) "e"
  203. ["C7"]=>
  204. string(7) "rrrrrrr"
  205. ["C8"]=>
  206. NULL
  207. ["C9"]=>
  208. string(10) "04/16/2007"
  209. ["C10"]=>
  210. string(10) "04/16/2007"
  211. ["C12"]=>
  212. string(4) "2223"
  213. ["C13"]=>
  214. string(8) "xxxxxxxx"
  215. ["C15"]=>
  216. string(8) "zzzzzzzz"
  217. }
  218. [2]=>
  219. array(13) {
  220. ["C1"]=>
  221. string(3) "113"
  222. ["C2"]=>
  223. string(7) "aaaaaaa"
  224. ["C3"]=>
  225. string(10) "bbbbbbbbbb"
  226. ["C4"]=>
  227. string(6) "cccccc"
  228. ["C5"]=>
  229. string(1) "e"
  230. ["C6"]=>
  231. string(1) "f"
  232. ["C7"]=>
  233. string(4) "dddd"
  234. ["C8"]=>
  235. NULL
  236. ["C9"]=>
  237. string(10) "12/04/2006"
  238. ["C10"]=>
  239. string(10) "12/04/2006"
  240. ["C12"]=>
  241. string(4) "2224"
  242. ["C13"]=>
  243. NULL
  244. ["C15"]=>
  245. string(7) "zzzzzzz"
  246. }
  247. }
  248. Done