array_fill.slt 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. # Misc. types
  10. query T
  11. SELECT array_fill(5, array[3])
  12. ----
  13. {5,5,5}
  14. query T
  15. SELECT array_fill(5.1::double, array[3])
  16. ----
  17. {5.1,5.1,5.1}
  18. query T
  19. SELECT array_fill(5.1, array[3])
  20. ----
  21. {5.1,5.1,5.1}
  22. query T
  23. SELECT array_fill('z'::text, array[3])
  24. ----
  25. {z,z,z}
  26. query T
  27. SELECT array_fill(INTERVAL '1d', array[3])
  28. ----
  29. {"1 day","1 day","1 day"}
  30. query T
  31. SELECT array_fill('[1,)'::int4range, array[3])
  32. ----
  33. {"[1,)","[1,)","[1,)"}
  34. query T
  35. SELECT (array_fill(5, array[3]))[1]
  36. ----
  37. 5
  38. # Lower bound adjustment works
  39. query T
  40. SELECT array_fill(5, array[3], array[2])
  41. ----
  42. [2:4]={5,5,5}
  43. query T
  44. SELECT array_fill(5, array[3, 1], array[2, 4])
  45. ----
  46. [2:4][4:4]={{5},{5},{5}}
  47. query T
  48. SELECT (array_fill(5, array[3], array[2]))[1]
  49. ----
  50. NULL
  51. query T
  52. SELECT (array_fill(5, array[3], array[2]))[2]
  53. ----
  54. 5
  55. query error wrong number of array subscripts
  56. SELECT array_fill(5, array[3], array[2, 1])
  57. query error wrong number of array subscripts
  58. SELECT array_fill(5, array[3, 1], array[2])
  59. query error wrong number of array subscripts
  60. SELECT array_fill(5, array[]::int[], array[2, 1])
  61. query error wrong number of array subscripts
  62. SELECT array_fill(5, array[3, 1], array[]::int[])
  63. # Reveal structure of array
  64. query T
  65. SELECT
  66. concat_ws(' ', o, i, COALESCE(((array_fill(5, ARRAY[3, 2]))[o][i])::text, 'null'))
  67. FROM generate_series(1, 4) AS o, generate_series(1, 4) AS i
  68. ORDER BY 1;
  69. ----
  70. 1 1 5
  71. 1 2 5
  72. 1 3 null
  73. 1 4 null
  74. 2 1 5
  75. 2 2 5
  76. 2 3 null
  77. 2 4 null
  78. 3 1 5
  79. 3 2 5
  80. 3 3 null
  81. 3 4 null
  82. 4 1 null
  83. 4 2 null
  84. 4 3 null
  85. 4 4 null
  86. query T
  87. SELECT array_fill(5, array[3, 2], array[2, 3])
  88. ----
  89. [2:4][3:4]={{5,5},{5,5},{5,5}}
  90. # Reveal structure of 2D array
  91. query T
  92. SELECT
  93. concat_ws(' ', o, i, COALESCE(((array_fill(5, ARRAY[3, 2], ARRAY[2, 3]))[o][i])::text, 'null'))
  94. FROM generate_series(1, 4) AS o, generate_series(1, 4) AS i
  95. ORDER BY 1;
  96. ----
  97. 1 1 null
  98. 1 2 null
  99. 1 3 null
  100. 1 4 null
  101. 2 1 null
  102. 2 2 null
  103. 2 3 5
  104. 2 4 5
  105. 3 1 null
  106. 3 2 null
  107. 3 3 5
  108. 3 4 5
  109. 4 1 null
  110. 4 2 null
  111. 4 3 5
  112. 4 4 5
  113. # Reveal structure of 3D array
  114. query T
  115. SELECT
  116. concat_ws(' ', a, b, c, COALESCE(((array_fill(5, ARRAY[3, 2, 1], ARRAY[1, 2, 3]))[a][b][c])::text, 'null'))
  117. FROM
  118. generate_series(1, 3) AS a,
  119. generate_series(1, 3) AS b,
  120. generate_series(1, 3) AS c
  121. ORDER BY 1;
  122. ----
  123. 1 1 1 null
  124. 1 1 2 null
  125. 1 1 3 null
  126. 1 2 1 null
  127. 1 2 2 null
  128. 1 2 3 5
  129. 1 3 1 null
  130. 1 3 2 null
  131. 1 3 3 5
  132. 2 1 1 null
  133. 2 1 2 null
  134. 2 1 3 null
  135. 2 2 1 null
  136. 2 2 2 null
  137. 2 2 3 5
  138. 2 3 1 null
  139. 2 3 2 null
  140. 2 3 3 5
  141. 3 1 1 null
  142. 3 1 2 null
  143. 3 1 3 null
  144. 3 2 1 null
  145. 3 2 2 null
  146. 3 2 3 5
  147. 3 3 1 null
  148. 3 3 2 null
  149. 3 3 3 5
  150. # Polymorphic solution
  151. query error db error: ERROR: could not determine polymorphic type because input has type unknown
  152. SELECT array_fill(null, array[3])
  153. query error db error: ERROR: could not determine polymorphic type because input has type unknown
  154. SELECT array_fill(null, null)
  155. query T
  156. SELECT array_fill(null::int, array[3])
  157. ----
  158. {NULL,NULL,NULL}
  159. # Prohibited types
  160. query error array_fill with arrays not yet supported
  161. SELECT array_fill(ARRAY[1], array[3, 2])
  162. query error array_fill with arrays not yet supported
  163. SELECT array_fill(ARRAY[1], array[3, 2], array[2, 3])
  164. query error array_fill on integer list not yet supported
  165. SELECT array_fill(LIST[1], array[3, 2])
  166. query error array_fill on integer list not yet supported
  167. SELECT array_fill(LIST[1], array[3, 2], array[2, 3])
  168. query error db error: ERROR: array_fill on char\(1\) not yet supported
  169. SELECT array_fill('c'::char, array[3, 2])
  170. query error db error: ERROR: array_fill on char\(1\) not yet supported
  171. SELECT array_fill('c'::char, array[3, 2], array[2, 3])
  172. query error array_fill on map\[text=>integer\] not yet supported
  173. SELECT array_fill('{}'::map[text=>int], array[3, 2])
  174. query error array_fill on map\[text=>integer\] not yet supported
  175. SELECT array_fill('{}'::map[text=>int], array[3, 2], array[2, 3])
  176. # Null errors
  177. query error dimension array or low bound array must not be null
  178. SELECT array_fill(1, null);
  179. query error dimension array or low bound array must not be null
  180. SELECT array_fill(null::int, null);
  181. query error dimension array or low bound array must not be null
  182. SELECT array_fill(1, ARRAY[8], null);
  183. query error dimension array or low bound array must not be null
  184. SELECT array_fill(1, null, ARRAY[8]);
  185. query error dimension values must not be null
  186. SELECT array_fill(1, ARRAY[null::int]);
  187. query error dimension values must not be null
  188. SELECT array_fill(null::int, ARRAY[null::int], ARRAY[8]);
  189. query error dimension values must not be null
  190. SELECT array_fill(1, ARRAY[8], ARRAY[null::int]);
  191. query error dimension values must not be null
  192. SELECT array_fill(1, ARRAY[null::int], ARRAY[null::int]);
  193. query error dimension values must not be null
  194. SELECT array_fill(1, ARRAY[6, null::int]);
  195. query error dimension values must not be null
  196. SELECT array_fill(null::int, ARRAY[6, null::int], ARRAY[8]);
  197. query error dimension values must not be null
  198. SELECT array_fill(1, ARRAY[8], ARRAY[6, null::int]);
  199. query error dimension values must not be null
  200. SELECT array_fill(1, ARRAY[6, null::int], ARRAY[6, null::int]);
  201. # Multi-dimensional w/ 0
  202. query T
  203. SELECT array_fill(1, ARRAY[0]);
  204. ----
  205. {}
  206. query T
  207. SELECT array_fill(1, ARRAY[4, 0]);
  208. ----
  209. {}
  210. query T
  211. SELECT array_fill(1, ARRAY[0, 4]);
  212. ----
  213. {}
  214. query T
  215. SELECT array_fill(1, ARRAY[4, 3, 0]);
  216. ----
  217. {}
  218. query T
  219. SELECT array_fill(1, ARRAY[4, 0, 3]);
  220. ----
  221. {}
  222. # Too large of array
  223. query error array size exceeds the maximum allowed \(134217728 bytes\)
  224. SELECT array_fill(2, ARRAY[-1]);
  225. query error array size exceeds the maximum allowed \(134217728 bytes\)
  226. SELECT array_fill(2, ARRAY[-1]);
  227. query error array size exceeds the maximum allowed \(134217728 bytes\)
  228. SELECT array_fill(1, ARRAY[4, -199]);
  229. query error array size exceeds the maximum allowed \(134217728 bytes\)
  230. SELECT array_fill(1, ARRAY[-199, 4]);
  231. query error array size exceeds the maximum allowed \(134217728 bytes\)
  232. SELECT array_fill(1, ARRAY[4, 3, -199]);
  233. query error array size exceeds the maximum allowed \(134217728 bytes\)
  234. SELECT array_fill(1, ARRAY[4, -199, 3]);
  235. query error array size exceeds the maximum allowed \(134217728 bytes\)
  236. SELECT array_fill(8, ARRAY[-1, -1, -1, -1]);
  237. query error number of array dimensions \(10\) exceeds the maximum allowed \(6\)
  238. SELECT array_fill(1, ARRAY[1,1,1,1,1,1,1,1,1,1]);
  239. query error number of array dimensions \(10\) exceeds the maximum allowed \(6\)
  240. SELECT array_fill(1, ARRAY[1,1,1,1,1,1,1,1,1,1], ARRAY[1,1,1,1,1,1,1,1,1,1]);
  241. # But large arrays are still ok
  242. query II
  243. SELECT array_length(a, 1), array_length(a, 2) FROM (
  244. SELECT array_fill(1, ARRAY[99, 101]) AS a
  245. );
  246. ----
  247. 99
  248. 101
  249. query II
  250. SELECT array_length(a, 1), array_length(a, 2) FROM (
  251. SELECT array_fill(1, ARRAY[99, 101], ARRAY[2, 3]) AS a
  252. );
  253. ----
  254. 99
  255. 101
  256. # Concatenating arrays
  257. query error cannot concatenate incompatible arrays
  258. SELECT array_fill(1, ARRAY[2], ARRAY[1] || array_fill(1, ARRAY[3, 2], ARRAY[4, 1]));
  259. # RHS is element of LHS
  260. query T
  261. SELECT array_fill(6, ARRAY[3, 2], ARRAY[4, 3]) || array_fill(7, ARRAY[2], ARRAY[3]);
  262. ----
  263. [4:7][3:4]={{6,6},{6,6},{6,6},{7,7}}
  264. # LHS is element of RHS
  265. query T
  266. SELECT array_fill(6, ARRAY[2], ARRAY[3]) || array_fill(7, ARRAY[3, 2], ARRAY[4, 3]);
  267. ----
  268. [4:7][3:4]={{6,6},{7,7},{7,7},{7,7}}
  269. # Array || Array
  270. query T
  271. SELECT array_fill(6, ARRAY[3, 2], ARRAY[4, 3]) || array_fill(7, ARRAY[3, 2], ARRAY[4, 3]);
  272. ----
  273. [4:9][3:4]={{6,6},{6,6},{6,6},{7,7},{7,7},{7,7}}
  274. # Negative lower bounds
  275. query T
  276. SELECT array_fill(3, ARRAY[2], ARRAY[-3]);
  277. ----
  278. [-3:-2]={3,3}
  279. query I
  280. SELECT (array_fill(3, ARRAY[2], ARRAY[-3]))[-3];
  281. ----
  282. 3
  283. query T
  284. SELECT
  285. concat_ws(E'\t', o, i, COALESCE(((array_fill(5, ARRAY[2, 2], ARRAY[-2, -1]))[o][i])::text, 'null'))
  286. FROM generate_series(-3, 0) AS o, generate_series(-2, 0) AS i
  287. ORDER BY o, i;
  288. ----
  289. -3 -2 null
  290. -3 -1 null
  291. -3 0 null
  292. -2 -2 null
  293. -2 -1 5
  294. -2 0 5
  295. -1 -2 null
  296. -1 -1 5
  297. -1 0 5
  298. 0 -2 null
  299. 0 -1 null
  300. 0 0 null