12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322 |
- # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # This file is derived from the logic test suite in CockroachDB. The
- # original file was retrieved on June 10, 2019 from:
- #
- # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/array
- #
- # The original source code is subject to the terms of the Apache
- # 2.0 license, a copy of which can be found in the LICENSE file at the
- # root of this repository.
- # not supported yet
- halt
- mode cockroach
- # pg arrays must preserve control characters when converted to string,
- # but their direct representation as string does not escape the
- # control characters. In order for the test file to remain valid
- # printable UTF-8, we double-escape the representations below.
- # TODO: Support bytea
- #statement ok
- #SET bytea_output = escape
- # array construction
- query error cannot determine type of empty array
- SELECT ARRAY[]
- query T
- SELECT ARRAY[1, 2, 3]
- ----
- {1,2,3}
- statement ok
- CREATE TABLE k (
- k INT PRIMARY KEY
- )
- statement ok
- INSERT INTO k VALUES (1), (2), (3), (4), (5)
- query T rowsort
- SELECT ARRAY[k] FROM k
- ----
- {1}
- {2}
- {3}
- {4}
- {5}
- query error expected 1 to be of type bool, found type int
- SELECT ARRAY['a', true, 1]
- query T
- SELECT ARRAY['a,', 'b{', 'c}', 'd', 'e f']
- ----
- {"a,","b{","c}",d,"e f"}
- query T
- SELECT ARRAY['1}'::BYTES]
- ----
- {"\\x317d"}
- # TODO(jordan): cockroach#16487
- # query T
- # SELECT ARRAY[e'g\x10h']
- # ----
- # {g\x10h}
- query TTTTTTT
- SELECT '', 'NULL', 'Null', 'null', NULL, '"', e'\''
- ----
- · NULL Null null NULL " '
- query T
- SELECT ARRAY['', 'NULL', 'Null', 'null', NULL, '"', e'\'']
- ----
- {"","NULL","Null","null",NULL,"\"",'}
- query T
- SELECT NULL::INT[]
- ----
- NULL
- query TTTT
- SELECT
- ARRAY[NULL]::STRING[],
- ARRAY[NULL]::INT[],
- ARRAY[NULL]::FLOAT[],
- ARRAY[NULL]::TIMESTAMP[]
- ----
- {NULL} {NULL} {NULL} {NULL}
- query BB
- SELECT NULL::INT[] IS DISTINCT FROM NULL, ARRAY[1,2,3] IS DISTINCT FROM NULL
- ----
- false true
- # materialize#19821
- query T
- SELECT ARRAY['one', 'two', 'fünf']
- ----
- {one,two,fünf}
- query T
- SELECT ARRAY[e'\n', e'g\x10h']::STRING::BYTES::STRING
- ----
- {"\012",g\020h}
- query T
- SELECT ARRAY['foo', 'bar']
- ----
- {foo,bar}
- # array construction from subqueries
- query T
- SELECT ARRAY(SELECT 3 WHERE false)
- ----
- {}
- statement ok
- SELECT ARRAY(SELECT 3 WHERE false) FROM k
- query T
- SELECT ARRAY(SELECT 3)
- ----
- {3}
- query T
- SELECT ARRAY(VALUES (1),(2),(1))
- ----
- {1,2,1}
- statement error arrays cannot have arrays as element type
- SELECT ARRAY(VALUES (ARRAY[1]))
- query T
- SELECT ARRAY(VALUES ('a'),('b'),('c'))
- ----
- {a,b,c}
- # TODO(justin): uncomment when cockroach#32715 is fixed.
- # query T
- # SELECT ARRAY(SELECT (1,2))
- # ----
- # {"(1,2)"}
- query error subquery must return only one column, found 2
- SELECT ARRAY(SELECT 1, 2)
- query T
- SELECT ARRAY[]:::int[]
- ----
- {}
- # casting strings to arrays
- query T
- SELECT '{1,2,3}'::INT[]
- ----
- {1,2,3}
- query T
- SELECT '{hello,"hello"}'::STRING[]
- ----
- {hello,hello}
- query T
- SELECT e'{he\\\\llo}'::STRING[]
- ----
- {"he\\llo"}
- query T
- SELECT '{"abc\nxyz"}'::STRING[]
- ----
- {abcnxyz}
- query T
- SELECT '{hello}'::VARCHAR(2)[]
- ----
- {he}
- # array casting
- query T
- SELECT ARRAY['foo']::STRING
- ----
- {foo}
- query T
- SELECT ARRAY[e'foo\nbar']::STRING::BYTES::STRING
- ----
- {"foo\012bar"}
- query TTTTTT
- SELECT
- ARRAY[e'foo\000bar']::STRING::BYTES::STRING,
- ARRAY[e'foo\001bar']::STRING::BYTES::STRING,
- ARRAY[e'foo\002bar']::STRING::BYTES::STRING,
- ARRAY[e'foo\030bar']::STRING::BYTES::STRING,
- ARRAY[e'foo\034bar']::STRING::BYTES::STRING,
- ARRAY[e'foo\100bar']::STRING::BYTES::STRING
- ----
- {foo\000bar} {foo\001bar} {foo\002bar} {foo\030bar} {foo\034bar} {foo@bar}
- query T
- SELECT ARRAY[1,2,3]::INT[]
- ----
- {1,2,3}
- query error invalid cast: int[] -> UUID[]
- SELECT ARRAY[1,2,3]::UUID[]
- query error invalid cast: inet[] -> INT[]
- SELECT ARRAY['8.8.8.8'::INET, '8.8.4.4'::INET]::INT[]
- query T
- SELECT ARRAY[1,2,3]::TEXT[]
- ----
- {1,2,3}
- query T
- SELECT ARRAY[1,2,3]::INT2VECTOR
- ----
- {1,2,3}
- # array subscript access
- query T
- SELECT ARRAY['a', 'b', 'c'][-1]
- ----
- NULL
- query T
- SELECT ARRAY['a', 'b', 'c'][0]
- ----
- NULL
- query T
- SELECT (ARRAY['a', 'b', 'c'])[2]
- ----
- b
- query T
- SELECT ARRAY['a', 'b', 'c'][2]
- ----
- b
- query T
- SELECT ARRAY['a', 'b', 'c'][4]
- ----
- NULL
- query T
- SELECT ARRAY['a', 'b', 'c'][1.5 + 1.5]
- ----
- c
- query I
- SELECT ARRAY[1, 2, 3][-1]
- ----
- NULL
- query I
- SELECT ARRAY[1, 2, 3][0]
- ----
- NULL
- query I
- SELECT ARRAY[1, 2, 3][2]
- ----
- 2
- query I
- SELECT ARRAY[1, 2, 3][4]
- ----
- NULL
- query I
- SELECT ARRAY[1, 2, 3][1.5 + 1.5]
- ----
- 3
- query error unimplemented: multidimensional indexing
- SELECT ARRAY['a', 'b', 'c'][4][2]
- query error incompatible ARRAY subscript type: decimal
- SELECT ARRAY['a', 'b', 'c'][3.5]
- query error could not parse "abc" as type int
- SELECT ARRAY['a', 'b', 'c']['abc']
- query error cannot subscript type integer because it is not an array
- SELECT (123)[2]
- # array slicing
- query error unimplemented: ARRAY slicing
- SELECT ARRAY['a', 'b', 'c'][:]
- query error unimplemented: ARRAY slicing
- SELECT ARRAY['a', 'b', 'c'][1:]
- query error unimplemented: ARRAY slicing
- SELECT ARRAY['a', 'b', 'c'][1:2]
- query error unimplemented: ARRAY slicing
- SELECT ARRAY['a', 'b', 'c'][:2]
- query error unimplemented: ARRAY slicing
- SELECT ARRAY['a', 'b', 'c'][2:1]
- # other forms of indirection
- # From a column name.
- query T
- SELECT a[1] FROM (SELECT ARRAY['a','b','c'] AS a)
- ----
- a
- # From a column ordinal.
- query T
- SELECT @1[1] FROM (SELECT ARRAY['a','b','c'] AS a)
- ----
- a
- # From a parenthetized expression.
- query I
- SELECT (ARRAY(VALUES (1),(2),(1)))[2]
- ----
- 2
- # From an ArrayFlatten expression - ARRAY(subquery)[...]
- query I
- SELECT ARRAY(VALUES (1),(2),(1))[2]
- ----
- 2
- # From a single-column subquery converted to a single datum.
- query I
- SELECT ((SELECT ARRAY[1, 2, 3]))[3]
- ----
- 3
- # From a subquery.
- query T
- SELECT (SELECT ARRAY['a', 'b', 'c'])[3]
- ----
- c
- query T
- SELECT ARRAY(SELECT generate_series(1,10) ORDER BY 1 DESC)
- ----
- {10,9,8,7,6,5,4,3,2,1}
- statement ok
- CREATE TABLE z (
- x INT PRIMARY KEY,
- y INT
- )
- statement ok
- INSERT INTO z VALUES (1, 5), (2, 4), (3, 3), (4, 2), (5, 1)
- query T
- SELECT ARRAY(SELECT x FROM z ORDER BY y)
- ----
- {5,4,3,2,1}
- # From a function call expression.
- query T
- SELECT current_schemas(true)[1]
- ----
- pg_catalog
- # From a CASE sub-expression.
- query I
- SELECT (CASE 1 = 1 WHEN true THEN ARRAY[1,2] ELSE ARRAY[2,3] END)[1]
- ----
- 1
- # From a tuple.
- query error cannot subscript type tuple{int, int, int} because it is not an array
- SELECT (1,2,3)[1]
- query error cannot subscript type tuple{int, int, int} because it is not an array
- SELECT ROW (1,2,3)[1]
- # Ensure grouping by an array column works
- statement ok
- SELECT conkey FROM pg_catalog.pg_constraint GROUP BY conkey
- statement ok
- SELECT indkey[0] FROM pg_catalog.pg_index
- # Verify serialization of array in expression (with distsql).
- statement ok
- CREATE TABLE t (k INT)
- statement ok
- INSERT INTO t VALUES (1), (2), (3), (4), (5)
- query I rowsort
- SELECT k FROM t WHERE k = ANY ARRAY[2,4]
- ----
- 2
- 4
- query I rowsort
- SELECT k FROM t WHERE k > ANY ARRAY[2,4]
- ----
- 3
- 4
- 5
- query I
- SELECT k FROM t WHERE k < ALL ARRAY[2,4]
- ----
- 1
- # Undocumented - bounds should be allowed, as in Postgres
- statement ok
- CREATE TABLE boundedtable (b INT[10], c INT ARRAY[10])
- statement ok
- DROP TABLE boundedtable
- # Creating multidimensional arrays should be disallowed.
- statement error unimplemented.*\nHINT.*32552
- CREATE TABLE badtable (b INT[][])
- # Nested arrays should be disallowed
- query error unimplemented: arrays cannot have arrays as element type.*\nHINT.*32552
- SELECT ARRAY[ARRAY[1,2,3]]
- # The postgres-compat aliases should be disallowed.
- # INT2VECTOR is deprecated in Postgres.
- query error VECTOR column types are unsupported
- CREATE TABLE badtable (b INT2VECTOR)
- # Using an array as a primary key should be disallowed. materialize#17154
- statement error column b is of type int\[\] and thus is not indexable
- CREATE TABLE badtable (b INT[] PRIMARY KEY)
- # Indexing an array column should be disallowed. materialize#17154
- statement error column b is of type int\[\] and thus is not indexable
- CREATE TABLE a (b INT[] UNIQUE)
- # Regression test for database-issues#5547
- statement ok
- CREATE TABLE ident (x INT)
- query T
- SELECT ARRAY[ROW()] FROM ident
- ----
- statement error column b is of type int\[\] and thus is not indexable
- CREATE TABLE a (
- b INT[],
- CONSTRAINT c UNIQUE (b)
- )
- statement error column b is of type int\[\] and thus is not indexable
- CREATE TABLE a (
- b INT[],
- INDEX c (b)
- )
- statement ok
- CREATE TABLE a (b INT ARRAY)
- query TT
- SHOW CREATE TABLE a
- ----
- a CREATE TABLE a (
- b INT8[] NULL,
- FAMILY "primary" (b, rowid)
- )
- statement ok
- DROP TABLE a
- statement ok
- CREATE TABLE a (b INT[], c INT[])
- statement error column b is of type int\[\] and thus is not indexable
- CREATE INDEX idx ON a (b)
- statement error the following columns are not indexable due to their type: b \(type int\[\]\), c \(type int\[\]\)
- CREATE INDEX idx ON a (b, c)
- statement ok
- DROP TABLE a
- # Int array columns.
- statement ok
- CREATE TABLE a (b INT[])
- statement ok
- INSERT INTO a VALUES (ARRAY[1,2,3])
- query T
- SELECT b FROM a
- ----
- {1,2,3}
- statement ok
- DELETE FROM a
- statement ok
- INSERT INTO a VALUES (NULL)
- query T
- SELECT b FROM a
- ----
- NULL
- statement ok
- DELETE FROM a
- statement ok
- INSERT INTO a VALUES (ARRAY[])
- query T
- SELECT b FROM a
- ----
- {}
- statement ok
- DELETE FROM a;
- # Make sure arrays originating from ARRAY_AGG work as expected.
- statement ok
- INSERT INTO a (SELECT array_agg(generate_series) from generate_series(1,3))
- query T
- SELECT * FROM a
- ----
- {1,2,3}
- query TT
- SHOW CREATE TABLE a
- ----
- a CREATE TABLE a (
- b INT8[] NULL,
- FAMILY "primary" (b, rowid)
- )
- statement error could not parse "foo" as type int
- INSERT INTO a VALUES (ARRAY['foo'])
- statement error could not parse "foo" as type int
- INSERT INTO a VALUES (ARRAY[1, 'foo'])
- statement ok
- DELETE FROM a
- statement ok
- INSERT INTO a VALUES (ARRAY[1,2,3]), (ARRAY[4,5]), (ARRAY[6])
- query I
- SELECT b[1] FROM a ORDER BY b[1]
- ----
- 1
- 4
- 6
- query I
- SELECT b[2] FROM a ORDER BY b[1]
- ----
- 2
- 5
- NULL
- # NULL values
- statement ok
- DELETE FROM a
- statement ok
- INSERT INTO a VALUES (ARRAY[NULL::INT]), (ARRAY[NULL::INT, 1]), (ARRAY[1, NULL::INT]), (ARRAY[NULL::INT, NULL::INT])
- query T rowsort
- SELECT * FROM a
- ----
- {NULL}
- {NULL,1}
- {1,NULL}
- {NULL,NULL}
- statement ok
- DELETE FROM a
- # Test with arrays bigger than 8 elements so the NULL bitmap has to be larger than a byte
- statement ok
- INSERT INTO a VALUES (ARRAY[1,2,3,4,5,6,7,8,NULL::INT])
- query T
- SELECT * FROM a
- ----
- {1,2,3,4,5,6,7,8,NULL}
- statement ok
- DROP TABLE a
- # Ensure that additional type info stays when used as an array.
- statement ok
- CREATE TABLE a (b SMALLINT[])
- query TT
- SHOW CREATE TABLE a
- ----
- a CREATE TABLE a (
- b INT2[] NULL,
- FAMILY "primary" (b, rowid)
- )
- statement error integer out of range for type int2 \(column "b"\)
- INSERT INTO a VALUES (ARRAY[100000])
- statement ok
- DROP TABLE a
- # String array columns.
- statement ok
- CREATE TABLE a (b STRING[])
- statement ok
- INSERT INTO a VALUES (ARRAY['foo', 'bar', 'baz'])
- query T
- SELECT b FROM a
- ----
- {foo,bar,baz}
- statement ok
- UPDATE a SET b = ARRAY[]
- query T
- SELECT b FROM a
- ----
- {}
- # Test NULLs with strings
- statement ok
- DELETE FROM a
- statement ok
- INSERT INTO a VALUES (ARRAY[NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, 'G'])
- query T
- SELECT * FROM a
- ----
- {NULL,NULL,NULL,NULL,NULL,NULL,G}
- statement ok
- DROP TABLE a
- # Bool array columns.
- statement ok
- CREATE TABLE a (b BOOL[])
- statement ok
- INSERT INTO a VALUES (ARRAY[]), (ARRAY[TRUE]), (ARRAY[FALSE]), (ARRAY[TRUE, TRUE]), (ARRAY[FALSE, TRUE])
- query T rowsort
- SELECT b FROM a
- ----
- {}
- {t}
- {f}
- {t,t}
- {f,t}
- statement ok
- DROP TABLE a
- # Float array columns.
- statement ok
- CREATE TABLE a (b FLOAT[])
- statement ok
- INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3])
- query T
- SELECT b FROM a
- ----
- {1.1,2.2,3.3}
- statement ok
- DROP TABLE a
- # Decimal array columns.
- statement ok
- CREATE TABLE a (b DECIMAL[])
- statement ok
- INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3])
- query T
- SELECT b FROM a
- ----
- {1.1,2.2,3.3}
- statement ok
- DROP TABLE a
- # Bytes array columns.
- statement ok
- CREATE TABLE a (b BYTES[])
- statement ok
- INSERT INTO a VALUES (ARRAY['foo','bar','baz'])
- query T
- SELECT b FROM a
- ----
- {"\\x666f6f","\\x626172","\\x62617a"}
- statement ok
- DROP TABLE a
- # Date array columns.
- statement ok
- CREATE TABLE a (b DATE[])
- statement ok
- INSERT INTO a VALUES (ARRAY[current_date])
- query I
- SELECT count(b) FROM a
- ----
- 1
- statement ok
- DROP TABLE a
- # Timestamp array columns.
- statement ok
- CREATE TABLE a (b TIMESTAMP[])
- statement ok
- INSERT INTO a VALUES (ARRAY[now()])
- query I
- SELECT count(b) FROM a
- ----
- 1
- statement ok
- DROP TABLE a
- # Interval array columns.
- statement ok
- CREATE TABLE a (b INTERVAL[])
- statement ok
- INSERT INTO a VALUES (ARRAY['1-2'::interval])
- query T
- SELECT b FROM a
- ----
- {"1 year 2 mons"}
- statement ok
- DROP TABLE a
- # UUID array columns.
- statement ok
- CREATE TABLE a (b UUID[])
- statement ok
- INSERT INTO a VALUES (ARRAY[uuid_v4()::uuid])
- query I
- SELECT count(b) FROM a
- ----
- 1
- statement ok
- DROP TABLE a
- # OID array columns.
- statement ok
- CREATE TABLE a (b OID[])
- statement ok
- INSERT INTO a VALUES (ARRAY[1])
- query T
- SELECT b FROM a
- ----
- {1}
- statement ok
- DROP TABLE a
- # Collated string array columns.
- statement ok
- CREATE TABLE a (b STRING[] COLLATE en)
- statement ok
- INSERT INTO a VALUES (ARRAY['hello' COLLATE en]), (ARRAY['goodbye' COLLATE en])
- query T rowsort
- SELECT * FROM a
- ----
- {hello}
- {goodbye}
- statement error value type collatedstring{fr}\[\] doesn't match type collatedstring{en}\[\] of column "b"
- INSERT INTO a VALUES (ARRAY['hello' COLLATE fr])
- statement ok
- DROP TABLE a
- query T
- SELECT * FROM unnest(ARRAY['a', 'B']) ORDER BY UNNEST;
- ----
- B
- a
- query T
- SELECT * FROM unnest(ARRAY['a' COLLATE en, 'B' COLLATE en]) ORDER BY UNNEST;
- ----
- a
- B
- # TODO(justin): type system limitation
- statement error unsupported binary operator
- SELECT ARRAY['foo' COLLATE en] || ARRAY['bar' COLLATE en]
- statement error unsupported binary operator
- SELECT ARRAY['foo' COLLATE en] || 'bar' COLLATE en
- statement ok
- CREATE TABLE a (b STRING[])
- statement ok
- INSERT INTO a VALUES (ARRAY['foo'])
- statement error value type collatedstring{en}\[\] doesn't match type text\[\] of column "b"
- INSERT INTO a VALUES (ARRAY['foo' COLLATE en])
- statement ok
- DROP TABLE a
- # Array operators
- # Element append
- query T
- SELECT ARRAY['a','b','c'] || 'd'
- ----
- {a,b,c,d}
- query T
- SELECT ARRAY[1,2,3] || 4
- ----
- {1,2,3,4}
- query T
- SELECT NULL::INT[] || 4
- ----
- {4}
- query T
- SELECT 4 || NULL::INT[]
- ----
- {4}
- query T
- SELECT ARRAY[1,2,3] || NULL::INT
- ----
- {1,2,3,NULL}
- query T
- SELECT NULL::INT[] || NULL::INT
- ----
- {NULL}
- query T
- SELECT NULL::INT || ARRAY[1,2,3]
- ----
- {NULL,1,2,3}
- query TT
- SELECT NULL::INT || NULL::INT[], NULL::INT[] || NULL::INT
- ----
- {NULL} {NULL}
- query T
- SELECT 1 || ARRAY[2,3,4]
- ----
- {1,2,3,4}
- # This is a departure from Postgres' behavior.
- # In Postgres, ARRAY[1,2,3] || NULL = ARRAY[1,2,3].
- query T
- SELECT ARRAY[1,2,3] || NULL
- ----
- {1,2,3}
- query T
- SELECT NULL || ARRAY[1,2,3]
- ----
- {1,2,3}
- # This test is here because its typechecking is related to the above
- query TT
- SELECT NULL || 'asdf', 'asdf' || NULL
- ----
- NULL NULL
- statement ok
- CREATE TABLE a (b INT[])
- # Ensure arrays appended to still encode properly.
- statement ok
- INSERT INTO a VALUES (ARRAY[])
- statement ok
- UPDATE a SET b = b || 1
- statement ok
- UPDATE a SET b = b || 2
- statement ok
- UPDATE a SET b = b || 3
- statement ok
- UPDATE a SET b = b || 4
- query T
- SELECT b FROM a
- ----
- {1,2,3,4}
- statement ok
- UPDATE a SET b = NULL::INT || b || NULL::INT
- query T
- SELECT b FROM a
- ----
- {NULL,1,2,3,4,NULL}
- # Array append
- query T
- SELECT ARRAY[1,2,3] || ARRAY[4,5,6]
- ----
- {1,2,3,4,5,6}
- query T
- SELECT ARRAY['a','b','c'] || ARRAY['d','e','f']
- ----
- {a,b,c,d,e,f}
- query T
- SELECT ARRAY[1,2,3] || NULL::INT[]
- ----
- {1,2,3}
- query T
- SELECT NULL::INT[] || ARRAY[4,5,6]
- ----
- {4,5,6}
- query T
- SELECT NULL::INT[] || NULL::INT[]
- ----
- NULL
- # Array equality
- query B
- SELECT ARRAY[1,2,3] = ARRAY[1,2,3]
- ----
- true
- query B
- SELECT ARRAY[1,2,4] = ARRAY[1,2,3]
- ----
- false
- query B
- SELECT ARRAY[1,2,3] != ARRAY[1,2,3]
- ----
- false
- query B
- SELECT ARRAY[1,2,4] != ARRAY[1,2,3]
- ----
- true
- query B
- SELECT ARRAY[1,2,4] = NULL
- ----
- NULL
- # This behavior is surprising (one might expect that the result would be
- # NULL), but it's how Postgres behaves.
- query B
- SELECT ARRAY[1,2,NULL] = ARRAY[1,2,3]
- ----
- false
- # ARRAY_APPEND function
- query TT
- SELECT array_append(ARRAY[1,2,3], 4), array_append(ARRAY[1,2,3], NULL::INT)
- ----
- {1,2,3,4} {1,2,3,NULL}
- query TT
- SELECT array_append(NULL::INT[], 4), array_append(NULL::INT[], NULL::INT)
- ----
- {4} {NULL}
- # ARRAY_PREPEND function
- query TT
- SELECT array_prepend(4, ARRAY[1,2,3]), array_prepend(NULL::INT, ARRAY[1,2,3])
- ----
- {4,1,2,3} {NULL,1,2,3}
- query TT
- SELECT array_prepend(4, NULL::INT[]), array_prepend(NULL::INT, NULL::INT[])
- ----
- {4} {NULL}
- # ARRAY_CAT function
- query TT
- SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5,6]), array_cat(ARRAY[1,2,3], NULL::INT[])
- ----
- {1,2,3,4,5,6} {1,2,3}
- query TT
- SELECT array_cat(NULL::INT[], ARRAY[4,5,6]), array_cat(NULL::INT[], NULL::INT[])
- ----
- {4,5,6} NULL
- # ARRAY_REMOVE function
- query T
- SELECT array_remove(ARRAY[1,2,3,2], 2)
- ----
- {1,3}
- query T
- SELECT array_remove(ARRAY[1,2,3,NULL::INT], NULL::INT)
- ----
- {1,2,3}
- query T
- SELECT array_remove(NULL::INT[], NULL::INT)
- ----
- NULL
- # ARRAY_REPLACE function
- query T
- SELECT array_replace(ARRAY[1,2,5,4], 5, 3)
- ----
- {1,2,3,4}
- query TT
- SELECT array_replace(ARRAY[1,2,NULL,4], NULL::INT, 3), array_replace(NULL::INT[], 5, 3)
- ----
- {1,2,3,4} NULL
- # ARRAY_POSITION function
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon')
- ----
- 2
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'abc')
- ----
- NULL
- query I
- SELECT array_position(NULL::STRING[], 'abc')
- ----
- NULL
- # ARRAY_POSITIONS function
- query TT
- SELECT array_positions(ARRAY['A','A','B','A'], 'A'), array_positions(ARRAY['A','A','B','A'], 'C')
- ----
- {1,2,4} {}
- query T
- SELECT array_positions(NULL::STRING[], 'A')
- ----
- NULL
- query T
- SELECT string_to_array('axbxc', 'x')
- ----
- {a,b,c}
- query T
- SELECT string_to_array('~a~~b~c', '~')
- ----
- {"",a,"",b,c}
- query T
- SELECT string_to_array('~foo~~bar~baz', '~', 'bar')
- ----
- {"",foo,"",NULL,baz}
- query T
- SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy')
- ----
- {xx,NULL,zz}
- query T
- SELECT string_to_array('foo', '')
- ----
- {foo}
- query T
- SELECT string_to_array('', '')
- ----
- {}
- query T
- SELECT string_to_array('', 'foo')
- ----
- {}
- query T
- SELECT string_to_array('a', NULL)
- ----
- {a}
- query T
- SELECT string_to_array(NULL, 'a')
- ----
- NULL
- query T
- SELECT string_to_array(NULL, 'a', 'b')
- ----
- NULL
- query T
- SELECT string_to_array('a', 'foo', NULL)
- ----
- {a}
- query T
- SELECT string_to_array('foofoofoofoo', 'foo', 'foo')
- ----
- {"","","","",""}
- # Regression test for materialize#23429.
- statement ok
- CREATE TABLE x (a STRING[], b INT[])
- statement ok
- UPDATE x SET a = ARRAY[], b = ARRAY[]
- # Github Issue 24175: Regression test for error when using ANY with UUID array.
- statement ok
- CREATE TABLE documents (shared_users UUID[]);
- statement ok
- INSERT INTO documents
- VALUES
- (ARRAY[]),
- (ARRAY['3ae3560e-d771-4b63-affb-47e8d7853680'::UUID,
- '6CC1B5C1-FE4F-417D-96BD-AFD1FEEEC34F'::UUID]),
- (ARRAY['C6F8286C-3A41-4D7E-A4F4-3234B7A57BA9'::UUID])
- query T
- SELECT *
- FROM documents
- WHERE '3ae3560e-d771-4b63-affb-47e8d7853680'::UUID = ANY (documents.shared_users);
- ----
- {3ae3560e-d771-4b63-affb-47e8d7853680,6cc1b5c1-fe4f-417d-96bd-afd1feeec34f}
- statement ok
- CREATE TABLE u (x INT)
- statement ok
- INSERT INTO u VALUES (1), (2)
- statement ok
- CREATE TABLE v (y INT[])
- statement ok
- INSERT INTO v VALUES (ARRAY[1, 2])
- # Regression test for cockroach#30191. Ensure ArrayFlatten returns correct type.
- query T
- SELECT * FROM v WHERE y = ARRAY(SELECT x FROM u ORDER BY x);
- ----
- {1,2}
- # Regression test for cockroach#34439. Ensure that empty arrays are interned correctly.
- query B
- SELECT ARRAY[''] = ARRAY[] FROM (VALUES (1)) WHERE ARRAY[B''] != ARRAY[]
- ----
- false
- subtest 36477
- statement ok
- CREATE TABLE array_single_family (a INT PRIMARY KEY, b INT[], FAMILY fam0(a), FAMILY fam1(b))
- statement ok
- INSERT INTO array_single_family VALUES(0,ARRAY[])
- statement ok
- INSERT INTO array_single_family VALUES(1,ARRAY[1])
- statement ok
- INSERT INTO array_single_family VALUES(2,ARRAY[1,2])
- statement ok
- INSERT INTO array_single_family VALUES(3,ARRAY[1,2,NULL])
- statement ok
- INSERT INTO array_single_family VALUES(4,ARRAY[NULL,2,3])
- statement ok
- INSERT INTO array_single_family VALUES(5,ARRAY[1,NULL,3])
- statement ok
- INSERT INTO array_single_family VALUES(6,ARRAY[NULL::INT])
- statement ok
- INSERT INTO array_single_family VALUES(7,ARRAY[NULL::INT,NULL::INT])
- statement ok
- INSERT INTO array_single_family VALUES(8,ARRAY[NULL::INT,NULL::INT,NULL::INT])
- query IT colnames
- SELECT a, b FROM array_single_family ORDER BY a
- ----
- a b
- 0 {}
- 1 {1}
- 2 {1,2}
- 3 {1,2,NULL}
- 4 {NULL,2,3}
- 5 {1,NULL,3}
- 6 {NULL}
- 7 {NULL,NULL}
- 8 {NULL,NULL,NULL}
- statement ok
- DROP TABLE array_single_family
- query TT
- SELECT ARRAY[]::int[], ARRAY[]:::int[]
- ----
- {} {}
- subtest 37544
- query T
- SELECT
- col_1
- FROM
- (
- VALUES
- (ARRAY[]::INT8[]),
- (ARRAY[]::INT8[])
- )
- AS tab_1 (col_1)
- GROUP BY
- tab_1.col_1
- ----
- {}
|