bind_char_3_11gR1.phpt 9.0 KB

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