array.slt 21 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/array
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. # not supported yet
  20. halt
  21. mode cockroach
  22. # pg arrays must preserve control characters when converted to string,
  23. # but their direct representation as string does not escape the
  24. # control characters. In order for the test file to remain valid
  25. # printable UTF-8, we double-escape the representations below.
  26. # TODO: Support bytea
  27. #statement ok
  28. #SET bytea_output = escape
  29. # array construction
  30. query error cannot determine type of empty array
  31. SELECT ARRAY[]
  32. query T
  33. SELECT ARRAY[1, 2, 3]
  34. ----
  35. {1,2,3}
  36. statement ok
  37. CREATE TABLE k (
  38. k INT PRIMARY KEY
  39. )
  40. statement ok
  41. INSERT INTO k VALUES (1), (2), (3), (4), (5)
  42. query T rowsort
  43. SELECT ARRAY[k] FROM k
  44. ----
  45. {1}
  46. {2}
  47. {3}
  48. {4}
  49. {5}
  50. query error expected 1 to be of type bool, found type int
  51. SELECT ARRAY['a', true, 1]
  52. query T
  53. SELECT ARRAY['a,', 'b{', 'c}', 'd', 'e f']
  54. ----
  55. {"a,","b{","c}",d,"e f"}
  56. query T
  57. SELECT ARRAY['1}'::BYTES]
  58. ----
  59. {"\\x317d"}
  60. # TODO(jordan): cockroach#16487
  61. # query T
  62. # SELECT ARRAY[e'g\x10h']
  63. # ----
  64. # {g\x10h}
  65. query TTTTTTT
  66. SELECT '', 'NULL', 'Null', 'null', NULL, '"', e'\''
  67. ----
  68. · NULL Null null NULL " '
  69. query T
  70. SELECT ARRAY['', 'NULL', 'Null', 'null', NULL, '"', e'\'']
  71. ----
  72. {"","NULL","Null","null",NULL,"\"",'}
  73. query T
  74. SELECT NULL::INT[]
  75. ----
  76. NULL
  77. query TTTT
  78. SELECT
  79. ARRAY[NULL]::STRING[],
  80. ARRAY[NULL]::INT[],
  81. ARRAY[NULL]::FLOAT[],
  82. ARRAY[NULL]::TIMESTAMP[]
  83. ----
  84. {NULL} {NULL} {NULL} {NULL}
  85. query BB
  86. SELECT NULL::INT[] IS DISTINCT FROM NULL, ARRAY[1,2,3] IS DISTINCT FROM NULL
  87. ----
  88. false true
  89. # materialize#19821
  90. query T
  91. SELECT ARRAY['one', 'two', 'fünf']
  92. ----
  93. {one,two,fünf}
  94. query T
  95. SELECT ARRAY[e'\n', e'g\x10h']::STRING::BYTES::STRING
  96. ----
  97. {"\012",g\020h}
  98. query T
  99. SELECT ARRAY['foo', 'bar']
  100. ----
  101. {foo,bar}
  102. # array construction from subqueries
  103. query T
  104. SELECT ARRAY(SELECT 3 WHERE false)
  105. ----
  106. {}
  107. statement ok
  108. SELECT ARRAY(SELECT 3 WHERE false) FROM k
  109. query T
  110. SELECT ARRAY(SELECT 3)
  111. ----
  112. {3}
  113. query T
  114. SELECT ARRAY(VALUES (1),(2),(1))
  115. ----
  116. {1,2,1}
  117. statement error arrays cannot have arrays as element type
  118. SELECT ARRAY(VALUES (ARRAY[1]))
  119. query T
  120. SELECT ARRAY(VALUES ('a'),('b'),('c'))
  121. ----
  122. {a,b,c}
  123. # TODO(justin): uncomment when cockroach#32715 is fixed.
  124. # query T
  125. # SELECT ARRAY(SELECT (1,2))
  126. # ----
  127. # {"(1,2)"}
  128. query error subquery must return only one column, found 2
  129. SELECT ARRAY(SELECT 1, 2)
  130. query T
  131. SELECT ARRAY[]:::int[]
  132. ----
  133. {}
  134. # casting strings to arrays
  135. query T
  136. SELECT '{1,2,3}'::INT[]
  137. ----
  138. {1,2,3}
  139. query T
  140. SELECT '{hello,"hello"}'::STRING[]
  141. ----
  142. {hello,hello}
  143. query T
  144. SELECT e'{he\\\\llo}'::STRING[]
  145. ----
  146. {"he\\llo"}
  147. query T
  148. SELECT '{"abc\nxyz"}'::STRING[]
  149. ----
  150. {abcnxyz}
  151. query T
  152. SELECT '{hello}'::VARCHAR(2)[]
  153. ----
  154. {he}
  155. # array casting
  156. query T
  157. SELECT ARRAY['foo']::STRING
  158. ----
  159. {foo}
  160. query T
  161. SELECT ARRAY[e'foo\nbar']::STRING::BYTES::STRING
  162. ----
  163. {"foo\012bar"}
  164. query TTTTTT
  165. SELECT
  166. ARRAY[e'foo\000bar']::STRING::BYTES::STRING,
  167. ARRAY[e'foo\001bar']::STRING::BYTES::STRING,
  168. ARRAY[e'foo\002bar']::STRING::BYTES::STRING,
  169. ARRAY[e'foo\030bar']::STRING::BYTES::STRING,
  170. ARRAY[e'foo\034bar']::STRING::BYTES::STRING,
  171. ARRAY[e'foo\100bar']::STRING::BYTES::STRING
  172. ----
  173. {foo\000bar} {foo\001bar} {foo\002bar} {foo\030bar} {foo\034bar} {foo@bar}
  174. query T
  175. SELECT ARRAY[1,2,3]::INT[]
  176. ----
  177. {1,2,3}
  178. query error invalid cast: int[] -> UUID[]
  179. SELECT ARRAY[1,2,3]::UUID[]
  180. query error invalid cast: inet[] -> INT[]
  181. SELECT ARRAY['8.8.8.8'::INET, '8.8.4.4'::INET]::INT[]
  182. query T
  183. SELECT ARRAY[1,2,3]::TEXT[]
  184. ----
  185. {1,2,3}
  186. query T
  187. SELECT ARRAY[1,2,3]::INT2VECTOR
  188. ----
  189. {1,2,3}
  190. # array subscript access
  191. query T
  192. SELECT ARRAY['a', 'b', 'c'][-1]
  193. ----
  194. NULL
  195. query T
  196. SELECT ARRAY['a', 'b', 'c'][0]
  197. ----
  198. NULL
  199. query T
  200. SELECT (ARRAY['a', 'b', 'c'])[2]
  201. ----
  202. b
  203. query T
  204. SELECT ARRAY['a', 'b', 'c'][2]
  205. ----
  206. b
  207. query T
  208. SELECT ARRAY['a', 'b', 'c'][4]
  209. ----
  210. NULL
  211. query T
  212. SELECT ARRAY['a', 'b', 'c'][1.5 + 1.5]
  213. ----
  214. c
  215. query I
  216. SELECT ARRAY[1, 2, 3][-1]
  217. ----
  218. NULL
  219. query I
  220. SELECT ARRAY[1, 2, 3][0]
  221. ----
  222. NULL
  223. query I
  224. SELECT ARRAY[1, 2, 3][2]
  225. ----
  226. 2
  227. query I
  228. SELECT ARRAY[1, 2, 3][4]
  229. ----
  230. NULL
  231. query I
  232. SELECT ARRAY[1, 2, 3][1.5 + 1.5]
  233. ----
  234. 3
  235. query error unimplemented: multidimensional indexing
  236. SELECT ARRAY['a', 'b', 'c'][4][2]
  237. query error incompatible ARRAY subscript type: decimal
  238. SELECT ARRAY['a', 'b', 'c'][3.5]
  239. query error could not parse "abc" as type int
  240. SELECT ARRAY['a', 'b', 'c']['abc']
  241. query error cannot subscript type integer because it is not an array
  242. SELECT (123)[2]
  243. # array slicing
  244. query error unimplemented: ARRAY slicing
  245. SELECT ARRAY['a', 'b', 'c'][:]
  246. query error unimplemented: ARRAY slicing
  247. SELECT ARRAY['a', 'b', 'c'][1:]
  248. query error unimplemented: ARRAY slicing
  249. SELECT ARRAY['a', 'b', 'c'][1:2]
  250. query error unimplemented: ARRAY slicing
  251. SELECT ARRAY['a', 'b', 'c'][:2]
  252. query error unimplemented: ARRAY slicing
  253. SELECT ARRAY['a', 'b', 'c'][2:1]
  254. # other forms of indirection
  255. # From a column name.
  256. query T
  257. SELECT a[1] FROM (SELECT ARRAY['a','b','c'] AS a)
  258. ----
  259. a
  260. # From a column ordinal.
  261. query T
  262. SELECT @1[1] FROM (SELECT ARRAY['a','b','c'] AS a)
  263. ----
  264. a
  265. # From a parenthetized expression.
  266. query I
  267. SELECT (ARRAY(VALUES (1),(2),(1)))[2]
  268. ----
  269. 2
  270. # From an ArrayFlatten expression - ARRAY(subquery)[...]
  271. query I
  272. SELECT ARRAY(VALUES (1),(2),(1))[2]
  273. ----
  274. 2
  275. # From a single-column subquery converted to a single datum.
  276. query I
  277. SELECT ((SELECT ARRAY[1, 2, 3]))[3]
  278. ----
  279. 3
  280. # From a subquery.
  281. query T
  282. SELECT (SELECT ARRAY['a', 'b', 'c'])[3]
  283. ----
  284. c
  285. query T
  286. SELECT ARRAY(SELECT generate_series(1,10) ORDER BY 1 DESC)
  287. ----
  288. {10,9,8,7,6,5,4,3,2,1}
  289. statement ok
  290. CREATE TABLE z (
  291. x INT PRIMARY KEY,
  292. y INT
  293. )
  294. statement ok
  295. INSERT INTO z VALUES (1, 5), (2, 4), (3, 3), (4, 2), (5, 1)
  296. query T
  297. SELECT ARRAY(SELECT x FROM z ORDER BY y)
  298. ----
  299. {5,4,3,2,1}
  300. # From a function call expression.
  301. query T
  302. SELECT current_schemas(true)[1]
  303. ----
  304. pg_catalog
  305. # From a CASE sub-expression.
  306. query I
  307. SELECT (CASE 1 = 1 WHEN true THEN ARRAY[1,2] ELSE ARRAY[2,3] END)[1]
  308. ----
  309. 1
  310. # From a tuple.
  311. query error cannot subscript type tuple{int, int, int} because it is not an array
  312. SELECT (1,2,3)[1]
  313. query error cannot subscript type tuple{int, int, int} because it is not an array
  314. SELECT ROW (1,2,3)[1]
  315. # Ensure grouping by an array column works
  316. statement ok
  317. SELECT conkey FROM pg_catalog.pg_constraint GROUP BY conkey
  318. statement ok
  319. SELECT indkey[0] FROM pg_catalog.pg_index
  320. # Verify serialization of array in expression (with distsql).
  321. statement ok
  322. CREATE TABLE t (k INT)
  323. statement ok
  324. INSERT INTO t VALUES (1), (2), (3), (4), (5)
  325. query I rowsort
  326. SELECT k FROM t WHERE k = ANY ARRAY[2,4]
  327. ----
  328. 2
  329. 4
  330. query I rowsort
  331. SELECT k FROM t WHERE k > ANY ARRAY[2,4]
  332. ----
  333. 3
  334. 4
  335. 5
  336. query I
  337. SELECT k FROM t WHERE k < ALL ARRAY[2,4]
  338. ----
  339. 1
  340. # Undocumented - bounds should be allowed, as in Postgres
  341. statement ok
  342. CREATE TABLE boundedtable (b INT[10], c INT ARRAY[10])
  343. statement ok
  344. DROP TABLE boundedtable
  345. # Creating multidimensional arrays should be disallowed.
  346. statement error unimplemented.*\nHINT.*32552
  347. CREATE TABLE badtable (b INT[][])
  348. # Nested arrays should be disallowed
  349. query error unimplemented: arrays cannot have arrays as element type.*\nHINT.*32552
  350. SELECT ARRAY[ARRAY[1,2,3]]
  351. # The postgres-compat aliases should be disallowed.
  352. # INT2VECTOR is deprecated in Postgres.
  353. query error VECTOR column types are unsupported
  354. CREATE TABLE badtable (b INT2VECTOR)
  355. # Using an array as a primary key should be disallowed. materialize#17154
  356. statement error column b is of type int\[\] and thus is not indexable
  357. CREATE TABLE badtable (b INT[] PRIMARY KEY)
  358. # Indexing an array column should be disallowed. materialize#17154
  359. statement error column b is of type int\[\] and thus is not indexable
  360. CREATE TABLE a (b INT[] UNIQUE)
  361. # Regression test for database-issues#5547
  362. statement ok
  363. CREATE TABLE ident (x INT)
  364. query T
  365. SELECT ARRAY[ROW()] FROM ident
  366. ----
  367. statement error column b is of type int\[\] and thus is not indexable
  368. CREATE TABLE a (
  369. b INT[],
  370. CONSTRAINT c UNIQUE (b)
  371. )
  372. statement error column b is of type int\[\] and thus is not indexable
  373. CREATE TABLE a (
  374. b INT[],
  375. INDEX c (b)
  376. )
  377. statement ok
  378. CREATE TABLE a (b INT ARRAY)
  379. query TT
  380. SHOW CREATE TABLE a
  381. ----
  382. a CREATE TABLE a (
  383. b INT8[] NULL,
  384. FAMILY "primary" (b, rowid)
  385. )
  386. statement ok
  387. DROP TABLE a
  388. statement ok
  389. CREATE TABLE a (b INT[], c INT[])
  390. statement error column b is of type int\[\] and thus is not indexable
  391. CREATE INDEX idx ON a (b)
  392. statement error the following columns are not indexable due to their type: b \(type int\[\]\), c \(type int\[\]\)
  393. CREATE INDEX idx ON a (b, c)
  394. statement ok
  395. DROP TABLE a
  396. # Int array columns.
  397. statement ok
  398. CREATE TABLE a (b INT[])
  399. statement ok
  400. INSERT INTO a VALUES (ARRAY[1,2,3])
  401. query T
  402. SELECT b FROM a
  403. ----
  404. {1,2,3}
  405. statement ok
  406. DELETE FROM a
  407. statement ok
  408. INSERT INTO a VALUES (NULL)
  409. query T
  410. SELECT b FROM a
  411. ----
  412. NULL
  413. statement ok
  414. DELETE FROM a
  415. statement ok
  416. INSERT INTO a VALUES (ARRAY[])
  417. query T
  418. SELECT b FROM a
  419. ----
  420. {}
  421. statement ok
  422. DELETE FROM a;
  423. # Make sure arrays originating from ARRAY_AGG work as expected.
  424. statement ok
  425. INSERT INTO a (SELECT array_agg(generate_series) from generate_series(1,3))
  426. query T
  427. SELECT * FROM a
  428. ----
  429. {1,2,3}
  430. query TT
  431. SHOW CREATE TABLE a
  432. ----
  433. a CREATE TABLE a (
  434. b INT8[] NULL,
  435. FAMILY "primary" (b, rowid)
  436. )
  437. statement error could not parse "foo" as type int
  438. INSERT INTO a VALUES (ARRAY['foo'])
  439. statement error could not parse "foo" as type int
  440. INSERT INTO a VALUES (ARRAY[1, 'foo'])
  441. statement ok
  442. DELETE FROM a
  443. statement ok
  444. INSERT INTO a VALUES (ARRAY[1,2,3]), (ARRAY[4,5]), (ARRAY[6])
  445. query I
  446. SELECT b[1] FROM a ORDER BY b[1]
  447. ----
  448. 1
  449. 4
  450. 6
  451. query I
  452. SELECT b[2] FROM a ORDER BY b[1]
  453. ----
  454. 2
  455. 5
  456. NULL
  457. # NULL values
  458. statement ok
  459. DELETE FROM a
  460. statement ok
  461. INSERT INTO a VALUES (ARRAY[NULL::INT]), (ARRAY[NULL::INT, 1]), (ARRAY[1, NULL::INT]), (ARRAY[NULL::INT, NULL::INT])
  462. query T rowsort
  463. SELECT * FROM a
  464. ----
  465. {NULL}
  466. {NULL,1}
  467. {1,NULL}
  468. {NULL,NULL}
  469. statement ok
  470. DELETE FROM a
  471. # Test with arrays bigger than 8 elements so the NULL bitmap has to be larger than a byte
  472. statement ok
  473. INSERT INTO a VALUES (ARRAY[1,2,3,4,5,6,7,8,NULL::INT])
  474. query T
  475. SELECT * FROM a
  476. ----
  477. {1,2,3,4,5,6,7,8,NULL}
  478. statement ok
  479. DROP TABLE a
  480. # Ensure that additional type info stays when used as an array.
  481. statement ok
  482. CREATE TABLE a (b SMALLINT[])
  483. query TT
  484. SHOW CREATE TABLE a
  485. ----
  486. a CREATE TABLE a (
  487. b INT2[] NULL,
  488. FAMILY "primary" (b, rowid)
  489. )
  490. statement error integer out of range for type int2 \(column "b"\)
  491. INSERT INTO a VALUES (ARRAY[100000])
  492. statement ok
  493. DROP TABLE a
  494. # String array columns.
  495. statement ok
  496. CREATE TABLE a (b STRING[])
  497. statement ok
  498. INSERT INTO a VALUES (ARRAY['foo', 'bar', 'baz'])
  499. query T
  500. SELECT b FROM a
  501. ----
  502. {foo,bar,baz}
  503. statement ok
  504. UPDATE a SET b = ARRAY[]
  505. query T
  506. SELECT b FROM a
  507. ----
  508. {}
  509. # Test NULLs with strings
  510. statement ok
  511. DELETE FROM a
  512. statement ok
  513. INSERT INTO a VALUES (ARRAY[NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, 'G'])
  514. query T
  515. SELECT * FROM a
  516. ----
  517. {NULL,NULL,NULL,NULL,NULL,NULL,G}
  518. statement ok
  519. DROP TABLE a
  520. # Bool array columns.
  521. statement ok
  522. CREATE TABLE a (b BOOL[])
  523. statement ok
  524. INSERT INTO a VALUES (ARRAY[]), (ARRAY[TRUE]), (ARRAY[FALSE]), (ARRAY[TRUE, TRUE]), (ARRAY[FALSE, TRUE])
  525. query T rowsort
  526. SELECT b FROM a
  527. ----
  528. {}
  529. {t}
  530. {f}
  531. {t,t}
  532. {f,t}
  533. statement ok
  534. DROP TABLE a
  535. # Float array columns.
  536. statement ok
  537. CREATE TABLE a (b FLOAT[])
  538. statement ok
  539. INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3])
  540. query T
  541. SELECT b FROM a
  542. ----
  543. {1.1,2.2,3.3}
  544. statement ok
  545. DROP TABLE a
  546. # Decimal array columns.
  547. statement ok
  548. CREATE TABLE a (b DECIMAL[])
  549. statement ok
  550. INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3])
  551. query T
  552. SELECT b FROM a
  553. ----
  554. {1.1,2.2,3.3}
  555. statement ok
  556. DROP TABLE a
  557. # Bytes array columns.
  558. statement ok
  559. CREATE TABLE a (b BYTES[])
  560. statement ok
  561. INSERT INTO a VALUES (ARRAY['foo','bar','baz'])
  562. query T
  563. SELECT b FROM a
  564. ----
  565. {"\\x666f6f","\\x626172","\\x62617a"}
  566. statement ok
  567. DROP TABLE a
  568. # Date array columns.
  569. statement ok
  570. CREATE TABLE a (b DATE[])
  571. statement ok
  572. INSERT INTO a VALUES (ARRAY[current_date])
  573. query I
  574. SELECT count(b) FROM a
  575. ----
  576. 1
  577. statement ok
  578. DROP TABLE a
  579. # Timestamp array columns.
  580. statement ok
  581. CREATE TABLE a (b TIMESTAMP[])
  582. statement ok
  583. INSERT INTO a VALUES (ARRAY[now()])
  584. query I
  585. SELECT count(b) FROM a
  586. ----
  587. 1
  588. statement ok
  589. DROP TABLE a
  590. # Interval array columns.
  591. statement ok
  592. CREATE TABLE a (b INTERVAL[])
  593. statement ok
  594. INSERT INTO a VALUES (ARRAY['1-2'::interval])
  595. query T
  596. SELECT b FROM a
  597. ----
  598. {"1 year 2 mons"}
  599. statement ok
  600. DROP TABLE a
  601. # UUID array columns.
  602. statement ok
  603. CREATE TABLE a (b UUID[])
  604. statement ok
  605. INSERT INTO a VALUES (ARRAY[uuid_v4()::uuid])
  606. query I
  607. SELECT count(b) FROM a
  608. ----
  609. 1
  610. statement ok
  611. DROP TABLE a
  612. # OID array columns.
  613. statement ok
  614. CREATE TABLE a (b OID[])
  615. statement ok
  616. INSERT INTO a VALUES (ARRAY[1])
  617. query T
  618. SELECT b FROM a
  619. ----
  620. {1}
  621. statement ok
  622. DROP TABLE a
  623. # Collated string array columns.
  624. statement ok
  625. CREATE TABLE a (b STRING[] COLLATE en)
  626. statement ok
  627. INSERT INTO a VALUES (ARRAY['hello' COLLATE en]), (ARRAY['goodbye' COLLATE en])
  628. query T rowsort
  629. SELECT * FROM a
  630. ----
  631. {hello}
  632. {goodbye}
  633. statement error value type collatedstring{fr}\[\] doesn't match type collatedstring{en}\[\] of column "b"
  634. INSERT INTO a VALUES (ARRAY['hello' COLLATE fr])
  635. statement ok
  636. DROP TABLE a
  637. query T
  638. SELECT * FROM unnest(ARRAY['a', 'B']) ORDER BY UNNEST;
  639. ----
  640. B
  641. a
  642. query T
  643. SELECT * FROM unnest(ARRAY['a' COLLATE en, 'B' COLLATE en]) ORDER BY UNNEST;
  644. ----
  645. a
  646. B
  647. # TODO(justin): type system limitation
  648. statement error unsupported binary operator
  649. SELECT ARRAY['foo' COLLATE en] || ARRAY['bar' COLLATE en]
  650. statement error unsupported binary operator
  651. SELECT ARRAY['foo' COLLATE en] || 'bar' COLLATE en
  652. statement ok
  653. CREATE TABLE a (b STRING[])
  654. statement ok
  655. INSERT INTO a VALUES (ARRAY['foo'])
  656. statement error value type collatedstring{en}\[\] doesn't match type text\[\] of column "b"
  657. INSERT INTO a VALUES (ARRAY['foo' COLLATE en])
  658. statement ok
  659. DROP TABLE a
  660. # Array operators
  661. # Element append
  662. query T
  663. SELECT ARRAY['a','b','c'] || 'd'
  664. ----
  665. {a,b,c,d}
  666. query T
  667. SELECT ARRAY[1,2,3] || 4
  668. ----
  669. {1,2,3,4}
  670. query T
  671. SELECT NULL::INT[] || 4
  672. ----
  673. {4}
  674. query T
  675. SELECT 4 || NULL::INT[]
  676. ----
  677. {4}
  678. query T
  679. SELECT ARRAY[1,2,3] || NULL::INT
  680. ----
  681. {1,2,3,NULL}
  682. query T
  683. SELECT NULL::INT[] || NULL::INT
  684. ----
  685. {NULL}
  686. query T
  687. SELECT NULL::INT || ARRAY[1,2,3]
  688. ----
  689. {NULL,1,2,3}
  690. query TT
  691. SELECT NULL::INT || NULL::INT[], NULL::INT[] || NULL::INT
  692. ----
  693. {NULL} {NULL}
  694. query T
  695. SELECT 1 || ARRAY[2,3,4]
  696. ----
  697. {1,2,3,4}
  698. # This is a departure from Postgres' behavior.
  699. # In Postgres, ARRAY[1,2,3] || NULL = ARRAY[1,2,3].
  700. query T
  701. SELECT ARRAY[1,2,3] || NULL
  702. ----
  703. {1,2,3}
  704. query T
  705. SELECT NULL || ARRAY[1,2,3]
  706. ----
  707. {1,2,3}
  708. # This test is here because its typechecking is related to the above
  709. query TT
  710. SELECT NULL || 'asdf', 'asdf' || NULL
  711. ----
  712. NULL NULL
  713. statement ok
  714. CREATE TABLE a (b INT[])
  715. # Ensure arrays appended to still encode properly.
  716. statement ok
  717. INSERT INTO a VALUES (ARRAY[])
  718. statement ok
  719. UPDATE a SET b = b || 1
  720. statement ok
  721. UPDATE a SET b = b || 2
  722. statement ok
  723. UPDATE a SET b = b || 3
  724. statement ok
  725. UPDATE a SET b = b || 4
  726. query T
  727. SELECT b FROM a
  728. ----
  729. {1,2,3,4}
  730. statement ok
  731. UPDATE a SET b = NULL::INT || b || NULL::INT
  732. query T
  733. SELECT b FROM a
  734. ----
  735. {NULL,1,2,3,4,NULL}
  736. # Array append
  737. query T
  738. SELECT ARRAY[1,2,3] || ARRAY[4,5,6]
  739. ----
  740. {1,2,3,4,5,6}
  741. query T
  742. SELECT ARRAY['a','b','c'] || ARRAY['d','e','f']
  743. ----
  744. {a,b,c,d,e,f}
  745. query T
  746. SELECT ARRAY[1,2,3] || NULL::INT[]
  747. ----
  748. {1,2,3}
  749. query T
  750. SELECT NULL::INT[] || ARRAY[4,5,6]
  751. ----
  752. {4,5,6}
  753. query T
  754. SELECT NULL::INT[] || NULL::INT[]
  755. ----
  756. NULL
  757. # Array equality
  758. query B
  759. SELECT ARRAY[1,2,3] = ARRAY[1,2,3]
  760. ----
  761. true
  762. query B
  763. SELECT ARRAY[1,2,4] = ARRAY[1,2,3]
  764. ----
  765. false
  766. query B
  767. SELECT ARRAY[1,2,3] != ARRAY[1,2,3]
  768. ----
  769. false
  770. query B
  771. SELECT ARRAY[1,2,4] != ARRAY[1,2,3]
  772. ----
  773. true
  774. query B
  775. SELECT ARRAY[1,2,4] = NULL
  776. ----
  777. NULL
  778. # This behavior is surprising (one might expect that the result would be
  779. # NULL), but it's how Postgres behaves.
  780. query B
  781. SELECT ARRAY[1,2,NULL] = ARRAY[1,2,3]
  782. ----
  783. false
  784. # ARRAY_APPEND function
  785. query TT
  786. SELECT array_append(ARRAY[1,2,3], 4), array_append(ARRAY[1,2,3], NULL::INT)
  787. ----
  788. {1,2,3,4} {1,2,3,NULL}
  789. query TT
  790. SELECT array_append(NULL::INT[], 4), array_append(NULL::INT[], NULL::INT)
  791. ----
  792. {4} {NULL}
  793. # ARRAY_PREPEND function
  794. query TT
  795. SELECT array_prepend(4, ARRAY[1,2,3]), array_prepend(NULL::INT, ARRAY[1,2,3])
  796. ----
  797. {4,1,2,3} {NULL,1,2,3}
  798. query TT
  799. SELECT array_prepend(4, NULL::INT[]), array_prepend(NULL::INT, NULL::INT[])
  800. ----
  801. {4} {NULL}
  802. # ARRAY_CAT function
  803. query TT
  804. SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5,6]), array_cat(ARRAY[1,2,3], NULL::INT[])
  805. ----
  806. {1,2,3,4,5,6} {1,2,3}
  807. query TT
  808. SELECT array_cat(NULL::INT[], ARRAY[4,5,6]), array_cat(NULL::INT[], NULL::INT[])
  809. ----
  810. {4,5,6} NULL
  811. # ARRAY_REMOVE function
  812. query T
  813. SELECT array_remove(ARRAY[1,2,3,2], 2)
  814. ----
  815. {1,3}
  816. query T
  817. SELECT array_remove(ARRAY[1,2,3,NULL::INT], NULL::INT)
  818. ----
  819. {1,2,3}
  820. query T
  821. SELECT array_remove(NULL::INT[], NULL::INT)
  822. ----
  823. NULL
  824. # ARRAY_REPLACE function
  825. query T
  826. SELECT array_replace(ARRAY[1,2,5,4], 5, 3)
  827. ----
  828. {1,2,3,4}
  829. query TT
  830. SELECT array_replace(ARRAY[1,2,NULL,4], NULL::INT, 3), array_replace(NULL::INT[], 5, 3)
  831. ----
  832. {1,2,3,4} NULL
  833. # ARRAY_POSITION function
  834. query I
  835. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon')
  836. ----
  837. 2
  838. query I
  839. SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'abc')
  840. ----
  841. NULL
  842. query I
  843. SELECT array_position(NULL::STRING[], 'abc')
  844. ----
  845. NULL
  846. # ARRAY_POSITIONS function
  847. query TT
  848. SELECT array_positions(ARRAY['A','A','B','A'], 'A'), array_positions(ARRAY['A','A','B','A'], 'C')
  849. ----
  850. {1,2,4} {}
  851. query T
  852. SELECT array_positions(NULL::STRING[], 'A')
  853. ----
  854. NULL
  855. query T
  856. SELECT string_to_array('axbxc', 'x')
  857. ----
  858. {a,b,c}
  859. query T
  860. SELECT string_to_array('~a~~b~c', '~')
  861. ----
  862. {"",a,"",b,c}
  863. query T
  864. SELECT string_to_array('~foo~~bar~baz', '~', 'bar')
  865. ----
  866. {"",foo,"",NULL,baz}
  867. query T
  868. SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy')
  869. ----
  870. {xx,NULL,zz}
  871. query T
  872. SELECT string_to_array('foo', '')
  873. ----
  874. {foo}
  875. query T
  876. SELECT string_to_array('', '')
  877. ----
  878. {}
  879. query T
  880. SELECT string_to_array('', 'foo')
  881. ----
  882. {}
  883. query T
  884. SELECT string_to_array('a', NULL)
  885. ----
  886. {a}
  887. query T
  888. SELECT string_to_array(NULL, 'a')
  889. ----
  890. NULL
  891. query T
  892. SELECT string_to_array(NULL, 'a', 'b')
  893. ----
  894. NULL
  895. query T
  896. SELECT string_to_array('a', 'foo', NULL)
  897. ----
  898. {a}
  899. query T
  900. SELECT string_to_array('foofoofoofoo', 'foo', 'foo')
  901. ----
  902. {"","","","",""}
  903. # Regression test for materialize#23429.
  904. statement ok
  905. CREATE TABLE x (a STRING[], b INT[])
  906. statement ok
  907. UPDATE x SET a = ARRAY[], b = ARRAY[]
  908. # Github Issue 24175: Regression test for error when using ANY with UUID array.
  909. statement ok
  910. CREATE TABLE documents (shared_users UUID[]);
  911. statement ok
  912. INSERT INTO documents
  913. VALUES
  914. (ARRAY[]),
  915. (ARRAY['3ae3560e-d771-4b63-affb-47e8d7853680'::UUID,
  916. '6CC1B5C1-FE4F-417D-96BD-AFD1FEEEC34F'::UUID]),
  917. (ARRAY['C6F8286C-3A41-4D7E-A4F4-3234B7A57BA9'::UUID])
  918. query T
  919. SELECT *
  920. FROM documents
  921. WHERE '3ae3560e-d771-4b63-affb-47e8d7853680'::UUID = ANY (documents.shared_users);
  922. ----
  923. {3ae3560e-d771-4b63-affb-47e8d7853680,6cc1b5c1-fe4f-417d-96bd-afd1feeec34f}
  924. statement ok
  925. CREATE TABLE u (x INT)
  926. statement ok
  927. INSERT INTO u VALUES (1), (2)
  928. statement ok
  929. CREATE TABLE v (y INT[])
  930. statement ok
  931. INSERT INTO v VALUES (ARRAY[1, 2])
  932. # Regression test for cockroach#30191. Ensure ArrayFlatten returns correct type.
  933. query T
  934. SELECT * FROM v WHERE y = ARRAY(SELECT x FROM u ORDER BY x);
  935. ----
  936. {1,2}
  937. # Regression test for cockroach#34439. Ensure that empty arrays are interned correctly.
  938. query B
  939. SELECT ARRAY[''] = ARRAY[] FROM (VALUES (1)) WHERE ARRAY[B''] != ARRAY[]
  940. ----
  941. false
  942. subtest 36477
  943. statement ok
  944. CREATE TABLE array_single_family (a INT PRIMARY KEY, b INT[], FAMILY fam0(a), FAMILY fam1(b))
  945. statement ok
  946. INSERT INTO array_single_family VALUES(0,ARRAY[])
  947. statement ok
  948. INSERT INTO array_single_family VALUES(1,ARRAY[1])
  949. statement ok
  950. INSERT INTO array_single_family VALUES(2,ARRAY[1,2])
  951. statement ok
  952. INSERT INTO array_single_family VALUES(3,ARRAY[1,2,NULL])
  953. statement ok
  954. INSERT INTO array_single_family VALUES(4,ARRAY[NULL,2,3])
  955. statement ok
  956. INSERT INTO array_single_family VALUES(5,ARRAY[1,NULL,3])
  957. statement ok
  958. INSERT INTO array_single_family VALUES(6,ARRAY[NULL::INT])
  959. statement ok
  960. INSERT INTO array_single_family VALUES(7,ARRAY[NULL::INT,NULL::INT])
  961. statement ok
  962. INSERT INTO array_single_family VALUES(8,ARRAY[NULL::INT,NULL::INT,NULL::INT])
  963. query IT colnames
  964. SELECT a, b FROM array_single_family ORDER BY a
  965. ----
  966. a b
  967. 0 {}
  968. 1 {1}
  969. 2 {1,2}
  970. 3 {1,2,NULL}
  971. 4 {NULL,2,3}
  972. 5 {1,NULL,3}
  973. 6 {NULL}
  974. 7 {NULL,NULL}
  975. 8 {NULL,NULL,NULL}
  976. statement ok
  977. DROP TABLE array_single_family
  978. query TT
  979. SELECT ARRAY[]::int[], ARRAY[]:::int[]
  980. ----
  981. {} {}
  982. subtest 37544
  983. query T
  984. SELECT
  985. col_1
  986. FROM
  987. (
  988. VALUES
  989. (ARRAY[]::INT8[]),
  990. (ARRAY[]::INT8[])
  991. )
  992. AS tab_1 (col_1)
  993. GROUP BY
  994. tab_1.col_1
  995. ----
  996. {}