bind_char_3.phpt 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. --TEST--
  2. PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to CHAR parameter
  3. --EXTENSIONS--
  4. oci8
  5. --SKIPIF--
  6. <?php
  7. require(__DIR__."/connect.inc");
  8. // The bind buffer size edge cases seem to change each DB version.
  9. preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches);
  10. if (!(isset($matches[0]) && $matches[1] >= 12)) {
  11. die("skip expected output only valid when using Oracle 12c database");
  12. }
  13. ?>
  14. --ENV--
  15. NLS_LANG=.AL32UTF8
  16. --FILE--
  17. <?php
  18. require(__DIR__.'/connect.inc');
  19. // Initialization
  20. $stmtarray = array(
  21. "create or replace function bind_char_3_fn(p1 char) return char as begin return p1; end;",
  22. );
  23. oci8_test_sql_execute($c, $stmtarray);
  24. // Run Test
  25. echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n";
  26. $s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;");
  27. $bv1 = 'abc';
  28. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2);
  29. if ($r)
  30. do_e($s);
  31. var_dump($bv1, $bv2);
  32. echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  33. $bv1 = 'abc';
  34. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  35. if ($r)
  36. do_e($s);
  37. var_dump($bv1, $bv2);
  38. echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  39. $bv1 = 'abc';
  40. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  41. if ($r)
  42. do_e($s);
  43. var_dump($bv1, $bv2);
  44. echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  45. $bv1 = 'abc';
  46. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  47. if ($r)
  48. do_e($s);
  49. var_dump($bv1, $bv2);
  50. echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n";
  51. $bv1 = 'abc';
  52. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC);
  53. if ($r)
  54. do_e($s);
  55. var_dump($bv1, $bv2);
  56. echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n";
  57. $bv1 = 'abc';
  58. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC);
  59. if ($r)
  60. do_e($s);
  61. var_dump($bv1, $bv2);
  62. echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n";
  63. $bv1 = 'abc';
  64. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC);
  65. if ($r)
  66. do_e($s);
  67. var_dump($bv1, $bv2);
  68. echo "\n\nTests with ''\n\n";
  69. echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  70. $bv1 = '';
  71. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  72. if ($r)
  73. do_e($s);
  74. var_dump($bv1, $bv2);
  75. echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  76. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  77. if ($r)
  78. do_e($s);
  79. var_dump($bv1, $bv2);
  80. echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  81. $bv1 = '';
  82. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  83. if ($r)
  84. do_e($s);
  85. var_dump($bv1, $bv2);
  86. echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  87. $bv1 = '';
  88. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  89. if ($r)
  90. do_e($s);
  91. var_dump($bv1, $bv2);
  92. echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  93. $bv1 = '';
  94. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  95. if ($r)
  96. do_e($s);
  97. var_dump($bv1, $bv2);
  98. echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  99. $bv1 = '';
  100. $r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  101. if ($r)
  102. do_e($s);
  103. var_dump($bv1, $bv2);
  104. echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
  105. $bv1 = '';
  106. $r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
  107. if ($r)
  108. do_e($s);
  109. var_dump($bv1, $bv2);
  110. echo "\n\nTests with NULL\n";
  111. echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  112. $bv1 = null;
  113. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  114. if ($r)
  115. do_e($s);
  116. var_dump($bv1, $bv2);
  117. echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  118. $bv1 = null;
  119. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  120. if ($r)
  121. do_e($s);
  122. var_dump($bv1, $bv2);
  123. echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  124. $bv1 = null;
  125. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  126. if ($r)
  127. do_e($s);
  128. var_dump($bv1, $bv2);
  129. echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  130. $bv1 = null;
  131. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  132. if ($r)
  133. do_e($s);
  134. var_dump($bv1, $bv2);
  135. echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  136. $bv1 = null;
  137. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  138. if ($r)
  139. do_e($s);
  140. var_dump($bv1, $bv2);
  141. echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
  142. $bv1 = null;
  143. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
  144. if ($r)
  145. do_e($s);
  146. var_dump($bv1, $bv2);
  147. function do_e($s)
  148. {
  149. echo " Executing:\n";
  150. $r = @oci_execute($s);
  151. if (!$r) {
  152. $m = oci_error($s);
  153. echo " Oci_execute error ORA-".$m['code']."\n";
  154. return;
  155. }
  156. }
  157. // Cleanup
  158. $stmtarray = array(
  159. "drop function bind_char_3_fn"
  160. );
  161. oci8_test_sql_execute($c, $stmtarray);
  162. echo "Done\n";
  163. ?>
  164. --EXPECT--
  165. Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default
  166. Executing:
  167. Oci_execute error ORA-6502
  168. string(3) "abc"
  169. NULL
  170. Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  171. Executing:
  172. string(3) "abc"
  173. string(3) "abc"
  174. Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  175. Executing:
  176. string(3) "abc"
  177. string(3) "abc"
  178. Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  179. Executing:
  180. string(3) "abc"
  181. string(10) "abc "
  182. Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC
  183. Executing:
  184. string(3) "abc"
  185. string(3) "abc"
  186. Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC
  187. Executing:
  188. Oci_execute error ORA-6502
  189. string(3) "abc"
  190. string(3) "abc"
  191. Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC
  192. Executing:
  193. string(3) "abc"
  194. string(4) "abc "
  195. Tests with ''
  196. Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  197. Executing:
  198. string(0) ""
  199. NULL
  200. Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  201. Executing:
  202. string(0) ""
  203. NULL
  204. Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  205. Executing:
  206. string(0) ""
  207. NULL
  208. Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  209. Executing:
  210. string(0) ""
  211. NULL
  212. Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
  213. Executing:
  214. string(0) ""
  215. NULL
  216. Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC
  217. Executing:
  218. string(0) ""
  219. NULL
  220. Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC
  221. Executing:
  222. string(0) ""
  223. NULL
  224. Tests with NULL
  225. Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  226. Executing:
  227. NULL
  228. NULL
  229. Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  230. Executing:
  231. NULL
  232. NULL
  233. Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  234. Executing:
  235. NULL
  236. NULL
  237. Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  238. Executing:
  239. NULL
  240. NULL
  241. Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
  242. Executing:
  243. NULL
  244. NULL
  245. Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC
  246. Executing:
  247. NULL
  248. NULL
  249. Done