arrays.slt 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462
  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. mode cockroach
  10. # Test parsing arrays from strings.
  11. query T
  12. SELECT '{o, oOOo, "oOOo", "}"}'::text[]
  13. ----
  14. {o,oOOo,oOOo,"}"}
  15. query T
  16. SELECT '{1, 2, 3, null, NULL, nULL}'::int[]
  17. ----
  18. {1,2,3,NULL,NULL,NULL}
  19. query T
  20. SELECT '{ 1, 2 , 3 }'::int[]
  21. ----
  22. {1,2,3}
  23. query error invalid input syntax for type array: Array value must start with "\{": ""
  24. SELECT ''::int[]
  25. query error invalid input syntax for type array: Junk after closing right brace\.: "\{1, 2, 3\} 4"
  26. SELECT '{1, 2, 3} 4'::int[]
  27. query T
  28. SELECT '{{1}, {2}}'::int[]
  29. ----
  30. {{1},{2}}
  31. query error invalid input syntax for type array: Specifying array lower bounds is not supported: "\[1:2\]=\{1,2\}"
  32. SELECT '[1:2]={1,2}'::int[]
  33. # Test coercion behavior of multidimensional arrays.
  34. query error ARRAY could not convert type text\[\] to integer\[\]
  35. SELECT ARRAY[ARRAY[1, 2], ARRAY['3', '4']]
  36. query T
  37. SELECT ARRAY[ARRAY[1, 2], ARRAY['3', '4']]::int[]
  38. ----
  39. {{1,2},{3,4}}
  40. # Test array_to_string.
  41. query TT
  42. SELECT array_to_string(ARRAY['a', 'b,', NULL, 'c'], ','), array_to_string(ARRAY['a', 'b,', NULL, 'c'], ',', NULL)
  43. ----
  44. a,b,,c a,b,,c
  45. query TT
  46. SELECT array_to_string(ARRAY['a', 'b,', 'c'], NULL), array_to_string(ARRAY['a', 'b,', NULL, 'c'], 'foo', 'zerp')
  47. ----
  48. NULL afoob,foozerpfooc
  49. query TT
  50. SELECT array_to_string(NULL::text[], ','), array_to_string(NULL::text[], 'foo', 'zerp')
  51. ----
  52. NULL NULL
  53. query error could not determine polymorphic type because input has type unknown
  54. SELECT array_to_string(NULL, ','), array_to_string(NULL, 'foo', 'zerp')
  55. # Handle empty arrays as an input
  56. query T
  57. SELECT array_to_string('{}'::text[], '')
  58. ----
  59. (empty)
  60. # Test ANY/SOME/ALL.
  61. query B
  62. SELECT 1 = ANY(ARRAY[1, 2])
  63. ----
  64. true
  65. query B
  66. SELECT 1 = SOME(ARRAY[1, 2])
  67. ----
  68. true
  69. query B
  70. SELECT 1 = ANY(ARRAY[2])
  71. ----
  72. false
  73. query error operator does not exist: integer = text
  74. SELECT 1 = ANY(ARRAY['1', '2'])
  75. query B
  76. SELECT 3 = ANY(ARRAY[ARRAY[1, 2], ARRAY[3,4]])
  77. ----
  78. true
  79. query error operator does not exist: integer = text
  80. SELECT 1 = ANY(ARRAY['hi'::text])
  81. query error invalid input syntax for type integer: invalid digit found in string: "hi"
  82. select 'hi' = any(array[1]);
  83. query error cannot determine type of empty array
  84. SELECT 'hi'::text = ANY(ARRAY[])
  85. query B
  86. SELECT 'hi'::text = ANY(ARRAY[]::text[])
  87. ----
  88. false
  89. query error ARRAY types integer and boolean cannot be matched
  90. SELECT 123.4 = ANY(ARRAY[1, true, 'hi'::text])
  91. query B
  92. SELECT 1 != ANY(ARRAY[1])
  93. ----
  94. false
  95. query B
  96. select 'hello'::text != ANY(ARRAY['there'::text])
  97. ----
  98. true
  99. query B
  100. select 'hello'::text <= ANY(ARRAY['there'::text])
  101. ----
  102. true
  103. query B
  104. select 'apple' like any (VALUES('a%'), ('b%'));
  105. ----
  106. true
  107. query B
  108. select 'apple' not like any (VALUES('a%'), ('b%'));
  109. ----
  110. true
  111. query B
  112. select 'apple' ilike any (VALUES('A%'), ('B%'));
  113. ----
  114. true
  115. query B
  116. select 'apple' like any (VALUES('A%'), ('B%'));
  117. ----
  118. false
  119. query B
  120. select 'apple' ~~ any (VALUES('a%'), ('b%'));
  121. ----
  122. true
  123. query B
  124. select 'apple' !~~ any (VALUES('a%'), ('b%'));
  125. ----
  126. true
  127. query B
  128. select 'apple' ~~* any (VALUES('A%'), ('B%'));
  129. ----
  130. true
  131. # Test ALL
  132. query B
  133. SELECT 1 = ALL(ARRAY[1, 2])
  134. ----
  135. false
  136. query B
  137. SELECT 5 <> ALL(ARRAY[ARRAY[1, 2], ARRAY[3,4]])
  138. ----
  139. true
  140. query B
  141. select 'apple' like all (VALUES('a%'), ('b%'));
  142. ----
  143. false
  144. query B
  145. select 'apple' like all (VALUES('a%'), ('appl%'));
  146. ----
  147. true
  148. query B
  149. select 'apple' not like all (VALUES('a%'), ('b%'));
  150. ----
  151. false
  152. query B
  153. select 'apple' ilike all (VALUES('A%'), ('B%'));
  154. ----
  155. false
  156. query B
  157. select 'apple' like all (VALUES('A%'), ('B%'));
  158. ----
  159. false
  160. # 🔬🔬 unnest
  161. query I rowsort
  162. SELECT unnest FROM unnest(ARRAY[1,2,3])
  163. ----
  164. 1
  165. 2
  166. 3
  167. query T rowsort
  168. SELECT unnest::text FROM unnest(ARRAY[[1,2],[3,4]])
  169. ----
  170. 1
  171. 2
  172. 3
  173. 4
  174. query T rowsort
  175. SELECT unnest::text FROM unnest(ARRAY[NULL])
  176. ----
  177. NULL
  178. query I rowsort
  179. SELECT unnest FROM unnest(ARRAY[NULL,1])
  180. ----
  181. NULL
  182. 1
  183. query T rowsort
  184. SELECT unnest::text FROM unnest(NULL::int[])
  185. ----
  186. query error function unnest\(unknown\) is not unique
  187. SELECT * FROM unnest(NULL)
  188. # array_agg
  189. query T
  190. SELECT array_agg(a) FROM (SELECT 1 AS a WHERE false)
  191. ----
  192. NULL
  193. query T
  194. SELECT array_agg(1)
  195. ----
  196. {1}
  197. query T
  198. select array_agg(unnest) FROM (SELECT NULL) x JOIN LATERAL unnest(ARRAY[1,2,NULL]) ON true;
  199. ----
  200. {1,2,NULL}
  201. statement ok
  202. CREATE TABLE t1 (a int)
  203. statement ok
  204. INSERT INTO t1 VALUES (1), (2), (3), (NULL), (NULL)
  205. query T
  206. SELECT array_agg(a) FROM (select a from t1 where a IS NOT NULL)
  207. ----
  208. {1,2,3}
  209. query T
  210. SELECT array_agg(a) FROM (select a from t1 where a IS NULL)
  211. ----
  212. {NULL,NULL}
  213. query T
  214. SELECT array_agg(a) FROM t1
  215. ----
  216. {1,2,3,NULL,NULL}
  217. query T
  218. SELECT array_agg(a::text) FROM t1
  219. ----
  220. {1,2,3,NULL,NULL}
  221. query T
  222. SELECT array_agg(a) FILTER (WHERE a IS NOT NULL) FROM t1
  223. ----
  224. {1,2,3}
  225. query T
  226. SELECT array_agg(a) FILTER (WHERE a IS NULL) FROM t1
  227. ----
  228. {NULL,NULL}
  229. query error function array_agg\(integer, integer\) does not exist
  230. SELECT array_agg(1, 2)
  231. statement ok
  232. CREATE TABLE t2 (a int, b date)
  233. statement ok
  234. INSERT INTO t2 VALUES (1, date '2020-01-01'), (NULL, date '2020-01-02')
  235. query T
  236. SELECT array_agg((a, b) ORDER BY a DESC)::text FROM t2;
  237. ----
  238. {"(,2020-01-02)","(1,2020-01-01)"}
  239. query TTT
  240. SELECT array_agg((a, b) ORDER BY a DESC)::text, array_agg(a ORDER BY a DESC), array_agg(b ORDER BY b DESC) FROM t2;
  241. ----
  242. {"(,2020-01-02)","(1,2020-01-01)"} {NULL,1} {2020-01-02,2020-01-01}
  243. query error arrays not yet supported
  244. SELECT array_agg(ARRAY[1])
  245. query error array_agg on char
  246. SELECT array_agg('a'::char)
  247. query error array_agg on char
  248. SELECT array_agg('a'::char(2))
  249. # array_agg with nested arrays
  250. statement ok
  251. CREATE TABLE t3 (a int[])
  252. statement ok
  253. INSERT INTO t3 VALUES (ARRAY[1]), (ARRAY[2]), (ARRAY[3])
  254. query error arrays not yet supported
  255. SELECT array_agg(a) FROM t3
  256. # Duplicates of cockroach/array.slt. todo@jldlaughlin: Remove when we support that file.
  257. # array subscript access
  258. query T
  259. SELECT ARRAY['a', 'b', 'c'][-1]
  260. ----
  261. NULL
  262. query T
  263. SELECT ARRAY['a', 'b', 'c'][0]
  264. ----
  265. NULL
  266. query T
  267. SELECT (ARRAY['a', 'b', 'c'])[2]
  268. ----
  269. b
  270. query T
  271. SELECT ARRAY['a', 'b', 'c'][2]
  272. ----
  273. b
  274. query T
  275. SELECT ARRAY['a', 'b', 'c'][4]
  276. ----
  277. NULL
  278. query T
  279. SELECT ARRAY['a', 'b', 'c'][1.5 + 1.5]
  280. ----
  281. c
  282. query I
  283. SELECT ARRAY[1, 2, 3][-1]
  284. ----
  285. NULL
  286. query I
  287. SELECT ARRAY[1, 2, 3][0]
  288. ----
  289. NULL
  290. query I
  291. SELECT ARRAY[1, 2, 3][2]
  292. ----
  293. 2
  294. query I
  295. SELECT ARRAY[1, 2, 3][4]
  296. ----
  297. NULL
  298. query I
  299. SELECT ARRAY[1, 2, 3][1.5 + 1.5]
  300. ----
  301. 3
  302. query T
  303. SELECT ARRAY['a', 'b', 'c'][4][2]
  304. ----
  305. NULL
  306. query T
  307. SELECT ARRAY[['a'], ['b'], ['c']][2][1]
  308. ----
  309. b
  310. query T
  311. SELECT ARRAY[['a'], ['b'], ['c']][2]
  312. ----
  313. NULL
  314. statement ok
  315. CREATE TABLE array_t (a int[]);
  316. statement ok
  317. INSERT INTO array_t VALUES (ARRAY[[[1,2],[3,4]],[[5,6],[7,8]]]);
  318. query TTTTTTTT
  319. SELECT
  320. a[1][1][1],
  321. a[1][1][2],
  322. a[1][2][1],
  323. a[1][2][2],
  324. a[2][1][1],
  325. a[2][1][2],
  326. a[2][2][1],
  327. a[2][2][2]
  328. FROM array_t;
  329. ----
  330. 1 2 3 4 5 6 7 8
  331. query T
  332. SELECT ARRAY[[1,2,3], [4,5,6]][2][-1]
  333. ----
  334. NULL
  335. query T
  336. SELECT ARRAY[1][null];
  337. ----
  338. NULL
  339. query T
  340. SELECT ARRAY[[1]][1][null];
  341. ----
  342. NULL
  343. # This differs from Cockroach, but matches Postgres.
  344. query T
  345. SELECT ARRAY['a', 'b', 'c'][3.5]
  346. ----
  347. NULL
  348. # Array equality
  349. query B
  350. SELECT ARRAY[1,2,3] = ARRAY[1,2,3]
  351. ----
  352. true
  353. query B
  354. SELECT ARRAY[1,2,4] = ARRAY[1,2,3]
  355. ----
  356. false
  357. query B
  358. SELECT ARRAY[1,2,3] != ARRAY[1,2,3]
  359. ----
  360. false
  361. query B
  362. SELECT ARRAY[1,2,4] != ARRAY[1,2,3]
  363. ----
  364. true
  365. query B
  366. SELECT ARRAY[1,2,4] = NULL
  367. ----
  368. NULL
  369. # This behavior is surprising (one might expect that the result would be
  370. # NULL), but it's how Postgres behaves.
  371. query B
  372. SELECT ARRAY[1,2,NULL] = ARRAY[1,2,3]
  373. ----
  374. false
  375. query BB
  376. SELECT ARRAY[1] < ARRAY[1], ARRAY[1] <= ARRAY[1]
  377. ----
  378. false true
  379. query BB
  380. SELECT ARRAY[1] < ARRAY[2], ARRAY[1] <= ARRAY[2]
  381. ----
  382. true true
  383. query BB
  384. SELECT ARRAY[1] < ARRAY[[1]], ARRAY[1] <= ARRAY[[1]]
  385. ----
  386. true true
  387. query BB
  388. SELECT ARRAY[2] < ARRAY[1, 2], ARRAY[2] <= ARRAY[1, 2]
  389. ----
  390. false false
  391. query BB
  392. SELECT ARRAY[1] < ARRAY[NULL]::int[], ARRAY[1] <= ARRAY[NULL]::int[]
  393. ----
  394. true true
  395. query BB
  396. SELECT ARRAY[1] > ARRAY[1], ARRAY[1] >= ARRAY[1]
  397. ----
  398. false true
  399. query BB
  400. SELECT ARRAY[1] > ARRAY[2], ARRAY[1] >= ARRAY[2]
  401. ----
  402. false false
  403. query BB
  404. SELECT ARRAY[1] > ARRAY[[1]], ARRAY[1] >= ARRAY[[1]]
  405. ----
  406. false false
  407. query BB
  408. SELECT ARRAY[2] > ARRAY[1, 2], ARRAY[2] >= ARRAY[1, 2]
  409. ----
  410. true true
  411. query BB
  412. SELECT ARRAY[1] > ARRAY[NULL]::int[], ARRAY[1] >= ARRAY[NULL]::int[]
  413. ----
  414. false false
  415. query error operator does not exist: integer\[\] = text\[\]
  416. SELECT ARRAY[1,2,3] = ARRAY['1','2','3']
  417. query error operator does not exist: integer\[\] <> text\[\]
  418. SELECT ARRAY[1,2,3] != ARRAY['1','2','3']
  419. query error operator does not exist: integer\[\] < text\[\]
  420. SELECT ARRAY[1,2,3] < ARRAY['1','2','3']
  421. query error operator does not exist: integer\[\] <= text\[\]
  422. SELECT ARRAY[1,2,3] <= ARRAY['1','2','3']
  423. query error operator does not exist: integer\[\] > text\[\]
  424. SELECT ARRAY[1,2,3] > ARRAY['1','2','3']
  425. query error operator does not exist: integer\[\] >= text\[\]
  426. SELECT ARRAY[1,2,3] >= ARRAY['1','2','3']
  427. query T
  428. SELECT array_remove(ARRAY[1,2,3,2], 2)
  429. ----
  430. {1,3}
  431. query T
  432. SELECT array_remove(ARRAY[1,2,3,2], 5)
  433. ----
  434. {1,2,3,2}
  435. query T
  436. SELECT array_remove(ARRAY[1,2,3,NULL::INT], NULL::INT)
  437. ----
  438. {1,2,3}
  439. query T
  440. SELECT array_remove(ARRAY[1,NULL::INT,2,3,NULL::INT], NULL::INT)
  441. ----
  442. {1,2,3}
  443. query T
  444. SELECT array_remove(NULL::INT[], NULL::INT)
  445. ----
  446. NULL
  447. query T
  448. SELECT array_remove(NULL::INT[], 1)
  449. ----
  450. NULL
  451. query T
  452. SELECT array_remove(ARRAY[1,1,1], 1)
  453. ----
  454. {}
  455. query error removing elements from multidimensional arrays is not supported
  456. SELECT array_remove(ARRAY[[1]], 1)
  457. # array_cat
  458. query T
  459. SELECT array_cat(ARRAY[1, 2], ARRAY[3, 4])
  460. ----
  461. {1,2,3,4}
  462. query T
  463. SELECT array_cat(ARRAY[1, 2], ARRAY[3])
  464. ----
  465. {1,2,3}
  466. query T
  467. SELECT array_cat(ARRAY[1], ARRAY[2, 3])
  468. ----
  469. {1,2,3}
  470. query T
  471. SELECT array_cat(ARRAY[]::INT[], ARRAY[]::INT[])
  472. ----
  473. {}
  474. query T
  475. SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[]]::INT[])
  476. ----
  477. {}
  478. query T
  479. SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[[[]]]]::INT[])
  480. ----
  481. {}
  482. query T
  483. SELECT array_cat(ARRAY[[[[]]]]::INT[], ARRAY[[]]::INT[])
  484. ----
  485. {}
  486. query T
  487. SELECT array_cat(ARRAY[1, 2], ARRAY[]::INT[])
  488. ----
  489. {1,2}
  490. query T
  491. SELECT array_cat(ARRAY[1, 2], ARRAY[[]]::INT[])
  492. ----
  493. {1,2}
  494. query T
  495. SELECT array_cat(ARRAY[1, 2], ARRAY[[[[[]]]]]::INT[])
  496. ----
  497. {1,2}
  498. query T
  499. SELECT array_cat(ARRAY[[1, 2]], ARRAY[]::INT[])
  500. ----
  501. {{1,2}}
  502. query T
  503. SELECT array_cat(ARRAY[[1, 2]], ARRAY[[]]::INT[])
  504. ----
  505. {{1,2}}
  506. query T
  507. SELECT array_cat(ARRAY[[1, 2]], ARRAY[[[[[]]]]]::INT[])
  508. ----
  509. {{1,2}}
  510. query T
  511. SELECT array_cat(ARRAY[]::INT[], ARRAY[1,2])
  512. ----
  513. {1,2}
  514. query T
  515. SELECT array_cat(ARRAY[[]]::INT[], ARRAY[1,2])
  516. ----
  517. {1,2}
  518. query T
  519. SELECT array_cat(ARRAY[[[[[[]]]]]]::INT[], ARRAY[1,2])
  520. ----
  521. {1,2}
  522. query T
  523. SELECT array_cat(ARRAY[]::INT[], ARRAY[[1,2]])
  524. ----
  525. {{1,2}}
  526. query T
  527. SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[1,2]])
  528. ----
  529. {{1,2}}
  530. query T
  531. SELECT array_cat(ARRAY[[[[[[]]]]]]::INT[], ARRAY[[1,2]])
  532. ----
  533. {{1,2}}
  534. query T
  535. SELECT array_cat(ARRAY[1,2], NULL::INT[])
  536. ----
  537. {1,2}
  538. query T
  539. SELECT array_cat(NULL::INT[], ARRAY[1,2])
  540. ----
  541. {1,2}
  542. query T
  543. SELECT array_cat(NULL::INT[], NULL::INT[])
  544. ----
  545. NULL
  546. query T
  547. SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[[5,6]])
  548. ----
  549. {{1,2},{3,4},{5,6}}
  550. query T
  551. SELECT array_cat(ARRAY[[1,2]], ARRAY[[3,4],[5,6]])
  552. ----
  553. {{1,2},{3,4},{5,6}}
  554. query T
  555. SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6])
  556. ----
  557. {{1,2},{3,4},{5,6}}
  558. query T
  559. SELECT array_cat(ARRAY[1,2], ARRAY[[3,4],[5,6]])
  560. ----
  561. {{1,2},{3,4},{5,6}}
  562. simple
  563. SELECT array_cat(ARRAY[[1,2]], ARRAY[[3,4,5]]);
  564. ----
  565. db error: ERROR: cannot concatenate incompatible arrays
  566. DETAIL: Arrays with differing dimensions are not compatible for concatenation.
  567. simple
  568. SELECT array_cat(ARRAY[[[1,2]]], ARRAY[3,4]);
  569. ----
  570. db error: ERROR: cannot concatenate incompatible arrays
  571. DETAIL: Arrays of 3 and 1 dimensions are not compatible for concatenation.
  572. query error
  573. SELECT array_cat(ARRAY[1,2], ARRAY['3'])
  574. # array concatenation operator
  575. query T
  576. SELECT ARRAY[1, 2] || ARRAY[3, 4]
  577. ----
  578. {1,2,3,4}
  579. query T
  580. SELECT ARRAY[1, 2] || ARRAY[3]
  581. ----
  582. {1,2,3}
  583. query T
  584. SELECT ARRAY[1] || ARRAY[2, 3]
  585. ----
  586. {1,2,3}
  587. query T
  588. SELECT ARRAY[]::INT[] || ARRAY[]::INT[]
  589. ----
  590. {}
  591. query T
  592. SELECT ARRAY[[]]::INT[] || ARRAY[[]]::INT[]
  593. ----
  594. {}
  595. query T
  596. SELECT ARRAY[[]]::INT[] || ARRAY[[[[]]]]::INT[]
  597. ----
  598. {}
  599. query T
  600. SELECT ARRAY[[[[]]]]::INT[] || ARRAY[[]]::INT[]
  601. ----
  602. {}
  603. query T
  604. SELECT ARRAY[1, 2] || ARRAY[]::INT[]
  605. ----
  606. {1,2}
  607. query T
  608. SELECT ARRAY[1, 2] || ARRAY[[]]::INT[]
  609. ----
  610. {1,2}
  611. query T
  612. SELECT ARRAY[1, 2] || ARRAY[[[[[]]]]]::INT[]
  613. ----
  614. {1,2}
  615. query T
  616. SELECT ARRAY[[1, 2]] || ARRAY[]::INT[]
  617. ----
  618. {{1,2}}
  619. query T
  620. SELECT ARRAY[[1, 2]] || ARRAY[[]]::INT[]
  621. ----
  622. {{1,2}}
  623. query T
  624. SELECT ARRAY[[1, 2]] || ARRAY[[[[[]]]]]::INT[]
  625. ----
  626. {{1,2}}
  627. query T
  628. SELECT ARRAY[]::INT[] || ARRAY[1,2]
  629. ----
  630. {1,2}
  631. query T
  632. SELECT ARRAY[[]]::INT[] || ARRAY[1,2]
  633. ----
  634. {1,2}
  635. query T
  636. SELECT ARRAY[[[[[[]]]]]]::INT[] || ARRAY[1,2]
  637. ----
  638. {1,2}
  639. query T
  640. SELECT ARRAY[]::INT[] || ARRAY[[1,2]]
  641. ----
  642. {{1,2}}
  643. query T
  644. SELECT ARRAY[[]]::INT[] || ARRAY[[1,2]]
  645. ----
  646. {{1,2}}
  647. query T
  648. SELECT ARRAY[[[[[[]]]]]]::INT[] || ARRAY[[1,2]]
  649. ----
  650. {{1,2}}
  651. query T
  652. SELECT ARRAY[1,2] || NULL::INT[]
  653. ----
  654. {1,2}
  655. query T
  656. SELECT NULL::INT[] || ARRAY[1,2]
  657. ----
  658. {1,2}
  659. query T
  660. SELECT NULL::INT[] || NULL::INT[]
  661. ----
  662. NULL
  663. query T
  664. SELECT ARRAY[[1,2],[3,4]] || ARRAY[[5,6]]
  665. ----
  666. {{1,2},{3,4},{5,6}}
  667. query T
  668. SELECT ARRAY[[1,2]] || ARRAY[[3,4],[5,6]]
  669. ----
  670. {{1,2},{3,4},{5,6}}
  671. query T
  672. SELECT ARRAY[[1,2],[3,4]] || ARRAY[5,6]
  673. ----
  674. {{1,2},{3,4},{5,6}}
  675. query T
  676. SELECT ARRAY[1,2] || ARRAY[[3,4],[5,6]]
  677. ----
  678. {{1,2},{3,4},{5,6}}
  679. simple
  680. SELECT ARRAY[[1,2]] || ARRAY[[3,4,5]];
  681. ----
  682. db error: ERROR: cannot concatenate incompatible arrays
  683. DETAIL: Arrays with differing dimensions are not compatible for concatenation.
  684. simple
  685. SELECT ARRAY[[[1,2]]] || ARRAY[3,4];
  686. ----
  687. db error: ERROR: cannot concatenate incompatible arrays
  688. DETAIL: Arrays of 3 and 1 dimensions are not compatible for concatenation.
  689. query error no overload for integer\[\] || text\[\]: arguments cannot be implicitly cast to any implementation's parameters; try providing explicit casts
  690. SELECT ARRAY[1,2] || ARRAY['3'])
  691. # array_agg with maps
  692. statement ok
  693. CREATE TABLE t4 (a MAP[text=>int])
  694. statement ok
  695. INSERT INTO t4 VALUES ('{a=>123}'), ('{b=>456}')
  696. query error array_agg on map\[text=>integer\] not yet supported
  697. SELECT array_agg(a) FROM t4
  698. # Verify nested arrays
  699. statement ok
  700. CREATE TABLE users (id int not null, other_field int not null)
  701. statement ok
  702. CREATE TABLE customer (id int not null, first_name string not null, last_name string not null, zip string not null)
  703. statement ok
  704. INSERT INTO users VALUES (1, 10), (2, 5), (3, 8);
  705. statement ok
  706. INSERT INTO customer VALUES (1, 'alice', 'lasta', '10003'::text), (2, 'bob', 'lastb', '10013'::text), (3, 'charlie', 'lastc', '11217'::text);
  707. query error ARRAY could not convert type integer\[\] to text\[\]
  708. SELECT ARRAY[ARRAY[customer.first_name, customer.last_name], ARRAY[customer.zip], ARRAY[customer.id]]::text FROM customer JOIN users ON customer.id = users.id ORDER BY users.other_field DESC LIMIT 2
  709. query T
  710. SELECT ARRAY[ARRAY[customer.first_name], ARRAY[customer.zip], ARRAY[customer.id::text]]::text FROM customer JOIN users ON customer.id = users.id ORDER BY users.other_field DESC LIMIT 2
  711. ----
  712. {{alice},{10003},{1}}
  713. {{charlie},{11217},{3}}
  714. # Regression for database-issues#5326
  715. query error array_in not yet supported
  716. SELECT array_in('', 0, 0)
  717. ----
  718. # Array casting for column expressions
  719. statement ok
  720. CREATE TABLE array_t2 (
  721. a int[],
  722. b string[][],
  723. c varchar[],
  724. d int[][]
  725. );
  726. statement ok
  727. INSERT INTO array_t2 VALUES (
  728. array[1, 2, 3, 4, 5],
  729. array[['t1', 't2', 't3']],
  730. array['test1', 'test2', 'test3', 'test4']::varchar[],
  731. array[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  732. );
  733. query T
  734. SELECT pg_typeof(a::string[]::int[]::text[]::float8[]) FROM array_t2;
  735. ----
  736. double precision[]
  737. query T
  738. SELECT pg_typeof(a::string[]) FROM array_t2;
  739. ----
  740. text[]
  741. query T
  742. SELECT pg_typeof(a::string[]::int[]) FROM array_t2;
  743. ----
  744. integer[]
  745. query error Evaluation error: invalid input syntax for type integer: invalid digit found in string: "t1"
  746. SELECT b::int[] FROM array_t2;
  747. query error CAST does not support casting from integer\[\] to date\[\]
  748. SELECT a::date[] FROM array_t2;
  749. query T
  750. SELECT a::string[]::int[]::text[]::float8[] FROM array_t2;
  751. ----
  752. {1,2,3,4,5}
  753. query T
  754. SELECT b::text[] FROM array_t2;
  755. ----
  756. {{t1,t2,t3}}
  757. query T
  758. SELECT d::text[][1][1] FROM array_t2;
  759. ----
  760. {{0,1,2},{3,4,5},{6,7,8}}
  761. query T
  762. SELECT (d::text[])[1][1] FROM array_t2;
  763. ----
  764. 0
  765. query T
  766. SELECT (d::text[])[1] FROM array_t2;
  767. ----
  768. NULL
  769. query T
  770. SELECT CAST(a as text[]) FROM array_t2;
  771. ----
  772. {1,2,3,4,5}
  773. statement ok
  774. UPDATE array_t2 SET c = NULL;
  775. query T
  776. SELECT c::int[] FROM array_t2;
  777. ----
  778. NULL
  779. query error CAST does not support casting from mz_aclitem\[\] to text\[\]
  780. SELECT privileges::text[] FROM mz_views;
  781. query error CAST does not support casting from regproc list to text list
  782. SELECT (LIST[1299::regproc]::regproc list)::text list
  783. # Array position
  784. query I
  785. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun')
  786. ----
  787. 1
  788. query I
  789. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 1)
  790. ----
  791. 1
  792. query I
  793. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 2)
  794. ----
  795. 8
  796. query I
  797. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 3)
  798. ----
  799. 8
  800. query I
  801. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon')
  802. ----
  803. 2
  804. query I
  805. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 1)
  806. ----
  807. 2
  808. query I
  809. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 2)
  810. ----
  811. 2
  812. query I
  813. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 3)
  814. ----
  815. NULL
  816. query I
  817. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon', -3)
  818. ----
  819. 2
  820. query I
  821. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'x')
  822. ----
  823. NULL
  824. query I
  825. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'x', 1)
  826. ----
  827. NULL
  828. query I
  829. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], null)
  830. ----
  831. NULL
  832. query I
  833. SELECT array_position(null::text[], 'abc')
  834. ----
  835. NULL
  836. query I
  837. SELECT array_position(null::text[], 'abc', null)
  838. ----
  839. NULL
  840. query I
  841. SELECT array_position(ARRAY['sun'], null, null)
  842. ----
  843. NULL
  844. query error initial position must not be null
  845. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon', null)
  846. query error searching for elements in multidimensional arrays is not supported
  847. SELECT array_position(ARRAY[['mon']]::text[], 'mon')
  848. query error searching for elements in multidimensional arrays is not supported
  849. SELECT array_position(ARRAY[[null]]::text[], 'mon')
  850. query error searching for elements in multidimensional arrays is not supported
  851. SELECT array_position(ARRAY[['mon']]::text[], 'mon', 1)
  852. query error searching for elements in multidimensional arrays is not supported
  853. SELECT array_position(ARRAY[['mon']]::text[], null, 1)
  854. query error searching for elements in multidimensional arrays is not supported
  855. SELECT array_position(ARRAY[['mon']]::text[], 'mon', null)
  856. # multi-dimensional arrays
  857. # how else can we handle whitespace terminals in strings?
  858. query T rowsort
  859. SELECT
  860. concat_ws(
  861. E'\t',
  862. v,
  863. array_length(v, 1),
  864. array_length(v, 2),
  865. array_length(v, 3),
  866. array_length(v, 4),
  867. v[1],
  868. v[1][1],
  869. v[1][1][1],
  870. v[1][1][1][1],
  871. 'end'
  872. )
  873. FROM (
  874. SELECT a::text[] AS v FROM (
  875. VALUES (null),
  876. ('{a}'),
  877. ('{""}'),
  878. ('{''}'),
  879. ('{" "}'),
  880. ('{" 🌍 "}'),
  881. ('{\\}'),
  882. ('{"{",\\}'),
  883. ('{\"\", \"\\\"\"}'),
  884. ('{null}'),
  885. ('{b,b}'),
  886. ('{{c},{c},{c}}'),
  887. ('{{a}}'),
  888. ('{{a},{a}}'),
  889. ('{{a,b,c},{a,b,c}}'),
  890. ('{{{b},{b}},{{b},{b}}}'),
  891. ('{{{c},{c},{c}}}'),
  892. ('{{"c", d},{"c", d},{"c", d}}'),
  893. ('{{c, null},{null, d},{"null", null}}'),
  894. ('{{{{b},{b}}},{{{b},{b}}},{{{b},{b}}}}'),
  895. ('{{{a}}}'),
  896. ('{{{a}},{{a}}}'),
  897. ('{{{a}},{{null}}}'),
  898. ('{}'),
  899. ('{{},{}}'),
  900. ('{{{}},{{}}}'),
  901. ('{{{null}},{{null}}}'),
  902. -- Can exceed max dims with empty array which consolidates down
  903. ('{{{{{{{},{}}}}}}}')
  904. ) AS x (a)
  905. ) AS x (v);
  906. ----
  907. end
  908. {} end
  909. {} end
  910. {} end
  911. {} end
  912. {""} 1 end
  913. {'} 1 ' end
  914. {a} 1 a end
  915. {NULL} 1 end
  916. {" "} 1 end
  917. {b,b} 2 b end
  918. {"\\"} 1 \ end
  919. {{a}} 1 1 a end
  920. {"{","\\"} 2 { end
  921. {{a},{a}} 2 1 a end
  922. {{{a}}} 1 1 1 a end
  923. {" 🌍 "} 1 🌍 end
  924. {{c},{c},{c}} 3 1 c end
  925. {{{a}},{{a}}} 2 1 1 a end
  926. {{a,b,c},{a,b,c}} 2 3 a end
  927. {{{c},{c},{c}}} 1 3 1 c end
  928. {"\"\"","\"\\\"\""} 2 "" end
  929. {{{a}},{{NULL}}} 2 1 1 a end
  930. {{c,d},{c,d},{c,d}} 3 2 c end
  931. {{{NULL}},{{NULL}}} 2 1 1 end
  932. {{{b},{b}},{{b},{b}}} 2 2 1 b end
  933. {{c,NULL},{NULL,d},{null,NULL}} 3 2 c end
  934. {{{{b},{b}}},{{{b},{b}}},{{{b},{b}}}} 3 1 2 1 b end
  935. # Test that whitespace produces same results
  936. query T rowsort
  937. SELECT
  938. concat_ws(
  939. E'\t',
  940. v,
  941. array_length(v, 1),
  942. array_length(v, 2),
  943. array_length(v, 3),
  944. array_length(v, 4),
  945. v[1],
  946. v[1][1],
  947. v[1][1][1],
  948. v[1][1][1][1]
  949. )
  950. FROM (
  951. SELECT a::text[] AS v FROM (
  952. VALUES (null),
  953. (' {a}'),
  954. ('{null} '),
  955. ('{ b,b}'),
  956. ('{{c },{c},{c}}'),
  957. ('{{a }}'),
  958. ('{{a}, {a}}'),
  959. ('{{a,b,c},{ a,b,c}}'),
  960. ('{{{b},{b}},{{b},{b}} }'),
  961. ('{{{c},{c},{c}}} '),
  962. ('{ { c , d } , { c , d } , { c , d } } ')
  963. ) AS x (a)
  964. ) AS x (v);
  965. ----
  966. (empty)
  967. {a} 1 a
  968. {NULL} 1
  969. {b,b} 2 b
  970. {{a}} 1 1 a
  971. {{a},{a}} 2 1 a
  972. {{c},{c},{c}} 3 1 c
  973. {{a,b,c},{a,b,c}} 2 3 a
  974. {{{c},{c},{c}}} 1 3 1 c
  975. {{c,d},{c,d},{c,d}} 3 2 c
  976. {{{b},{b}},{{b},{b}}} 2 2 1 b
  977. #
  978. # Empty
  979. query error invalid input syntax for type array: Array value must start with "\{": ""
  980. SELECT ''::int[];
  981. query error invalid input syntax for type array: Array value must start with "\{": " "
  982. SELECT ' '::int[];
  983. #
  984. # Missing elems
  985. query error invalid input syntax for type array: Unexpected "\}" character\.: "\{1,\}"
  986. SELECT '{1,}'::int[];
  987. query error invalid input syntax for type array: Unexpected "," character\.: "\{,1\}"
  988. SELECT '{,1}'::int[];
  989. query error invalid input syntax for type array: Unexpected "," character\.: "\{,\}"
  990. SELECT '{,}'::int[];
  991. query error invalid input syntax for type array: Unexpected "\}" character\.: "\{\\" \\",\}"
  992. SELECT '{" ",}'::int[];
  993. query error invalid input syntax for type array: Unexpected "," character\.: "\{,\\" \\"\}"
  994. SELECT '{," "}'::int[];
  995. query error invalid input syntax for type array: Unexpected "\}" character\.: "\{',\}"
  996. SELECT '{'',}'::int[];
  997. query error invalid input syntax for type array: Unexpected "," character\.: "\{,'\}"
  998. SELECT '{,''}'::int[];
  999. #
  1000. # Escapes
  1001. query error invalid input syntax for type array: unterminated element: "\{\\\}"
  1002. SELECT '{\}'::text[];
  1003. #
  1004. # Single chars
  1005. query error invalid input syntax for type array: Unexpected end of input\.: "\{"
  1006. SELECT '{'::int[];
  1007. query error invalid input syntax for type array: Array value must start with "\{": "\}"
  1008. SELECT '}'::int[];
  1009. query error invalid input syntax for type array: Array value must start with "\{": ","
  1010. SELECT ','::int[];
  1011. query error invalid input syntax for type array: Array value must start with "\{": "a"
  1012. SELECT 'a'::int[];
  1013. query error invalid input syntax for type array: Array value must start with "\{": "'"
  1014. SELECT ''''::int[];
  1015. query error invalid input syntax for type array: Array value must start with "\{": "\\""
  1016. SELECT '"'::int[];
  1017. #
  1018. # Lopsided brackets
  1019. query error invalid input syntax for type array: Unexpected end of input\.: "\{\{a\}"
  1020. SELECT '{{a}'::int[];
  1021. query error invalid input syntax for type array: Junk after closing right brace\.: "\{a\}\}"
  1022. SELECT '{a}}'::int[];
  1023. query error invalid input syntax for type array: Unexpected end of input\.: "\{\{\}"
  1024. SELECT '{{}'::int[];
  1025. query error invalid input syntax for type array: Junk after closing right brace\.: "\{\}\}"
  1026. SELECT '{}}'::int[];
  1027. query error invalid input syntax for type array: Unexpected end of input\.: "\{ \{a\}"
  1028. SELECT '{ {a}'::int[];
  1029. query error invalid input syntax for type array: Junk after closing right brace\.: "\{ a\}\}"
  1030. SELECT '{ a}}'::int[];
  1031. query error invalid input syntax for type array: Unexpected end of input\.: "\{\{ \}"
  1032. SELECT '{{ }'::int[];
  1033. query error invalid input syntax for type array: Junk after closing right brace\.: "\{\} \}"
  1034. SELECT '{} }'::int[];
  1035. #
  1036. # Missing commas++
  1037. query error invalid input syntax for type array: Junk after closing right brace\.: "\{1\}\{1\}"
  1038. SELECT '{1}{1}'::text[];
  1039. query error invalid input syntax for type array: Unexpected "\{" character\.: "\{\{1\}\{1\}\}"
  1040. SELECT '{{1}{1}}'::text[];
  1041. query error invalid input syntax for type array: Junk after closing right brace\.: "\{\}\{\}"
  1042. SELECT '{}{}'::text[];
  1043. query error invalid input syntax for type array: Unexpected "\{" character\.: "\{\{\}\{\}\}"
  1044. SELECT '{{}{}}'::text[];
  1045. #
  1046. # Manged seps
  1047. query error invalid input syntax for type array: Unexpected array element\.: "\{\{1,2\},\\\{2,3\}\}"
  1048. SELECT E'{{1,2},\\{2,3}}'::text[];
  1049. query error invalid input syntax for type array: Unexpected array element\.: "\{\{\\"1 2\\" x\},\{3\}\}"
  1050. SELECT '{{"1 2" x},{3}}'::text[];
  1051. #
  1052. # Non-rectilinear
  1053. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1,\{2\}\},\{2,3\}\}"
  1054. SELECT '{{1,{2}},{2,3}}'::text[];
  1055. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1\},\{\{2\}\}\}"
  1056. SELECT '{{1},{{2}}}'::text[];
  1057. query error invalid input syntax for type array: Unexpected array element\.: "\{\{\{1\}\},\{2\}\}"
  1058. SELECT '{{{1}},{2}}'::text[];
  1059. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\},\{\{\}\}\}"
  1060. SELECT '{{},{{}}}'::text[];
  1061. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\{\}\},\{\}\}"
  1062. SELECT '{{{}},{}}'::text[];
  1063. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1\},\{\}\}"
  1064. SELECT '{{1},{}}'::text[];
  1065. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\},\{1\}\}"
  1066. SELECT '{{},{1}}'::text[];
  1067. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1,2\},\{1\}\}"
  1068. SELECT '{{1,2},{1}}'::text[];
  1069. #
  1070. # Non-rectilinear w/ null
  1071. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{null, \{1\}\}"
  1072. SELECT '{null, {1}}'::text[];
  1073. query error invalid input syntax for type array: Unexpected array element\.: "\{\{1\}, null\}"
  1074. SELECT '{{1}, null}'::text[];
  1075. query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\{null\}\},\{\{\}\}\}"
  1076. SELECT '{{{null}},{{}}}'::text[];
  1077. # Exceeded dimensions
  1078. query error number of array dimensions \(7\) exceeds the maximum allowed \(6\)
  1079. SELECT '{{{{{{{7}}}}}}}'::int[];
  1080. # We check max depth only after successfully parsing
  1081. query error invalid input syntax for type array: Unexpected end of input\.: "\{\{\{\{\{\{\{7\}\}\}\}\}\}"
  1082. SELECT '{{{{{{{7}}}}}}'::int[];
  1083. query T
  1084. SELECT ARRAY[1,4,3] @> ARRAY[3,1] AS contains
  1085. ----
  1086. true
  1087. query T
  1088. SELECT ARRAY[1,4,3] <@ ARRAY[3,1] AS contains
  1089. ----
  1090. false
  1091. # array containment in Postgres does NOT account for duplicates
  1092. query T
  1093. SELECT ARRAY[1,4,3] @> ARRAY[3,1,1,1,1,1,1,1,1,1,1,1,3,3,1,3,3,3,3,3,1,1,3,3,3] AS contains
  1094. ----
  1095. true
  1096. query T
  1097. SELECT ARRAY[2,7] <@ ARRAY[1,7,4,2,6] AS is_contained_by
  1098. ----
  1099. true
  1100. query T
  1101. SELECT ARRAY[2,7] @> ARRAY[1,7,4,2,6] AS is_contained_by
  1102. ----
  1103. false
  1104. # verify fix for issue database-issues#8223
  1105. query T
  1106. SELECT '{}'::TEXT[][] @> '{{a, b}, {a, A}}'::TEXT[][];
  1107. ----
  1108. false
  1109. statement ok
  1110. CREATE TABLE t5 (row_index int, multi_dim_text_array_empty TEXT[][], multi_dim_text_array_two_elem TEXT[][]);
  1111. statement ok
  1112. INSERT INTO t5 SELECT 0, '{{}}'::TEXT[][], '{{a, b}, {a, A}}'::TEXT[][];
  1113. query T
  1114. SELECT ((multi_dim_text_array_empty) @> (multi_dim_text_array_two_elem)) FROM t5;
  1115. ----
  1116. false
  1117. query T
  1118. SELECT '{}'::numeric[] @> '{}'::numeric[];
  1119. ----
  1120. true
  1121. query T
  1122. SELECT '{1,2}'::numeric[] @> '{}'::numeric[];
  1123. ----
  1124. true
  1125. query T
  1126. SELECT '{}'::numeric[] @> '{1,2}'::numeric[];
  1127. ----
  1128. false
  1129. query T
  1130. SELECT '{NULL}'::numeric[] @> '{NULL}'::numeric[];
  1131. ----
  1132. false
  1133. query T
  1134. SELECT '{NULL, 1}'::numeric[] @> '{1}'::numeric[];
  1135. ----
  1136. true
  1137. query T
  1138. SELECT '{1}'::numeric[] @> '{1, NULL}'::numeric[];
  1139. ----
  1140. false
  1141. query T
  1142. SELECT '{1, 2, 3, NULL}'::numeric[] @> '{1, NULL}'::numeric[];
  1143. ----
  1144. false
  1145. query T
  1146. SELECT ARRAY[1,3,7,NULL] @> ARRAY[1,3,7,NULL] AS contains;
  1147. ----
  1148. false
  1149. # Make sure we can index into a CAST-ed array.
  1150. statement ok
  1151. CREATE TABLE jsons (payload jsonb, random_index int, random_id uuid);
  1152. statement ok
  1153. CREATE MATERIALIZED VIEW json_mv AS (
  1154. SELECT * FROM jsons WHERE random_id = CAST(payload->>'my_field' AS uuid[])[random_index]
  1155. )