1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462 |
- # 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.
- mode cockroach
- # Test parsing arrays from strings.
- query T
- SELECT '{o, oOOo, "oOOo", "}"}'::text[]
- ----
- {o,oOOo,oOOo,"}"}
- query T
- SELECT '{1, 2, 3, null, NULL, nULL}'::int[]
- ----
- {1,2,3,NULL,NULL,NULL}
- query T
- SELECT '{ 1, 2 , 3 }'::int[]
- ----
- {1,2,3}
- query error invalid input syntax for type array: Array value must start with "\{": ""
- SELECT ''::int[]
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{1, 2, 3\} 4"
- SELECT '{1, 2, 3} 4'::int[]
- query T
- SELECT '{{1}, {2}}'::int[]
- ----
- {{1},{2}}
- query error invalid input syntax for type array: Specifying array lower bounds is not supported: "\[1:2\]=\{1,2\}"
- SELECT '[1:2]={1,2}'::int[]
- # Test coercion behavior of multidimensional arrays.
- query error ARRAY could not convert type text\[\] to integer\[\]
- SELECT ARRAY[ARRAY[1, 2], ARRAY['3', '4']]
- query T
- SELECT ARRAY[ARRAY[1, 2], ARRAY['3', '4']]::int[]
- ----
- {{1,2},{3,4}}
- # Test array_to_string.
- query TT
- SELECT array_to_string(ARRAY['a', 'b,', NULL, 'c'], ','), array_to_string(ARRAY['a', 'b,', NULL, 'c'], ',', NULL)
- ----
- a,b,,c a,b,,c
- query TT
- SELECT array_to_string(ARRAY['a', 'b,', 'c'], NULL), array_to_string(ARRAY['a', 'b,', NULL, 'c'], 'foo', 'zerp')
- ----
- NULL afoob,foozerpfooc
- query TT
- SELECT array_to_string(NULL::text[], ','), array_to_string(NULL::text[], 'foo', 'zerp')
- ----
- NULL NULL
- query error could not determine polymorphic type because input has type unknown
- SELECT array_to_string(NULL, ','), array_to_string(NULL, 'foo', 'zerp')
- # Handle empty arrays as an input
- query T
- SELECT array_to_string('{}'::text[], '')
- ----
- (empty)
- # Test ANY/SOME/ALL.
- query B
- SELECT 1 = ANY(ARRAY[1, 2])
- ----
- true
- query B
- SELECT 1 = SOME(ARRAY[1, 2])
- ----
- true
- query B
- SELECT 1 = ANY(ARRAY[2])
- ----
- false
- query error operator does not exist: integer = text
- SELECT 1 = ANY(ARRAY['1', '2'])
- query B
- SELECT 3 = ANY(ARRAY[ARRAY[1, 2], ARRAY[3,4]])
- ----
- true
- query error operator does not exist: integer = text
- SELECT 1 = ANY(ARRAY['hi'::text])
- query error invalid input syntax for type integer: invalid digit found in string: "hi"
- select 'hi' = any(array[1]);
- query error cannot determine type of empty array
- SELECT 'hi'::text = ANY(ARRAY[])
- query B
- SELECT 'hi'::text = ANY(ARRAY[]::text[])
- ----
- false
- query error ARRAY types integer and boolean cannot be matched
- SELECT 123.4 = ANY(ARRAY[1, true, 'hi'::text])
- query B
- SELECT 1 != ANY(ARRAY[1])
- ----
- false
- query B
- select 'hello'::text != ANY(ARRAY['there'::text])
- ----
- true
- query B
- select 'hello'::text <= ANY(ARRAY['there'::text])
- ----
- true
- query B
- select 'apple' like any (VALUES('a%'), ('b%'));
- ----
- true
- query B
- select 'apple' not like any (VALUES('a%'), ('b%'));
- ----
- true
- query B
- select 'apple' ilike any (VALUES('A%'), ('B%'));
- ----
- true
- query B
- select 'apple' like any (VALUES('A%'), ('B%'));
- ----
- false
- query B
- select 'apple' ~~ any (VALUES('a%'), ('b%'));
- ----
- true
- query B
- select 'apple' !~~ any (VALUES('a%'), ('b%'));
- ----
- true
- query B
- select 'apple' ~~* any (VALUES('A%'), ('B%'));
- ----
- true
- # Test ALL
- query B
- SELECT 1 = ALL(ARRAY[1, 2])
- ----
- false
- query B
- SELECT 5 <> ALL(ARRAY[ARRAY[1, 2], ARRAY[3,4]])
- ----
- true
- query B
- select 'apple' like all (VALUES('a%'), ('b%'));
- ----
- false
- query B
- select 'apple' like all (VALUES('a%'), ('appl%'));
- ----
- true
- query B
- select 'apple' not like all (VALUES('a%'), ('b%'));
- ----
- false
- query B
- select 'apple' ilike all (VALUES('A%'), ('B%'));
- ----
- false
- query B
- select 'apple' like all (VALUES('A%'), ('B%'));
- ----
- false
- # 🔬🔬 unnest
- query I rowsort
- SELECT unnest FROM unnest(ARRAY[1,2,3])
- ----
- 1
- 2
- 3
- query T rowsort
- SELECT unnest::text FROM unnest(ARRAY[[1,2],[3,4]])
- ----
- 1
- 2
- 3
- 4
- query T rowsort
- SELECT unnest::text FROM unnest(ARRAY[NULL])
- ----
- NULL
- query I rowsort
- SELECT unnest FROM unnest(ARRAY[NULL,1])
- ----
- NULL
- 1
- query T rowsort
- SELECT unnest::text FROM unnest(NULL::int[])
- ----
- query error function unnest\(unknown\) is not unique
- SELECT * FROM unnest(NULL)
- # array_agg
- query T
- SELECT array_agg(a) FROM (SELECT 1 AS a WHERE false)
- ----
- NULL
- query T
- SELECT array_agg(1)
- ----
- {1}
- query T
- select array_agg(unnest) FROM (SELECT NULL) x JOIN LATERAL unnest(ARRAY[1,2,NULL]) ON true;
- ----
- {1,2,NULL}
- statement ok
- CREATE TABLE t1 (a int)
- statement ok
- INSERT INTO t1 VALUES (1), (2), (3), (NULL), (NULL)
- query T
- SELECT array_agg(a) FROM (select a from t1 where a IS NOT NULL)
- ----
- {1,2,3}
- query T
- SELECT array_agg(a) FROM (select a from t1 where a IS NULL)
- ----
- {NULL,NULL}
- query T
- SELECT array_agg(a) FROM t1
- ----
- {1,2,3,NULL,NULL}
- query T
- SELECT array_agg(a::text) FROM t1
- ----
- {1,2,3,NULL,NULL}
- query T
- SELECT array_agg(a) FILTER (WHERE a IS NOT NULL) FROM t1
- ----
- {1,2,3}
- query T
- SELECT array_agg(a) FILTER (WHERE a IS NULL) FROM t1
- ----
- {NULL,NULL}
- query error function array_agg\(integer, integer\) does not exist
- SELECT array_agg(1, 2)
- statement ok
- CREATE TABLE t2 (a int, b date)
- statement ok
- INSERT INTO t2 VALUES (1, date '2020-01-01'), (NULL, date '2020-01-02')
- query T
- SELECT array_agg((a, b) ORDER BY a DESC)::text FROM t2;
- ----
- {"(,2020-01-02)","(1,2020-01-01)"}
- query TTT
- 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;
- ----
- {"(,2020-01-02)","(1,2020-01-01)"} {NULL,1} {2020-01-02,2020-01-01}
- query error arrays not yet supported
- SELECT array_agg(ARRAY[1])
- query error array_agg on char
- SELECT array_agg('a'::char)
- query error array_agg on char
- SELECT array_agg('a'::char(2))
- # array_agg with nested arrays
- statement ok
- CREATE TABLE t3 (a int[])
- statement ok
- INSERT INTO t3 VALUES (ARRAY[1]), (ARRAY[2]), (ARRAY[3])
- query error arrays not yet supported
- SELECT array_agg(a) FROM t3
- # Duplicates of cockroach/array.slt. todo@jldlaughlin: Remove when we support that file.
- # 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 T
- SELECT ARRAY['a', 'b', 'c'][4][2]
- ----
- NULL
- query T
- SELECT ARRAY[['a'], ['b'], ['c']][2][1]
- ----
- b
- query T
- SELECT ARRAY[['a'], ['b'], ['c']][2]
- ----
- NULL
- statement ok
- CREATE TABLE array_t (a int[]);
- statement ok
- INSERT INTO array_t VALUES (ARRAY[[[1,2],[3,4]],[[5,6],[7,8]]]);
- query TTTTTTTT
- SELECT
- a[1][1][1],
- a[1][1][2],
- a[1][2][1],
- a[1][2][2],
- a[2][1][1],
- a[2][1][2],
- a[2][2][1],
- a[2][2][2]
- FROM array_t;
- ----
- 1 2 3 4 5 6 7 8
- query T
- SELECT ARRAY[[1,2,3], [4,5,6]][2][-1]
- ----
- NULL
- query T
- SELECT ARRAY[1][null];
- ----
- NULL
- query T
- SELECT ARRAY[[1]][1][null];
- ----
- NULL
- # This differs from Cockroach, but matches Postgres.
- query T
- SELECT ARRAY['a', 'b', 'c'][3.5]
- ----
- 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
- query BB
- SELECT ARRAY[1] < ARRAY[1], ARRAY[1] <= ARRAY[1]
- ----
- false true
- query BB
- SELECT ARRAY[1] < ARRAY[2], ARRAY[1] <= ARRAY[2]
- ----
- true true
- query BB
- SELECT ARRAY[1] < ARRAY[[1]], ARRAY[1] <= ARRAY[[1]]
- ----
- true true
- query BB
- SELECT ARRAY[2] < ARRAY[1, 2], ARRAY[2] <= ARRAY[1, 2]
- ----
- false false
- query BB
- SELECT ARRAY[1] < ARRAY[NULL]::int[], ARRAY[1] <= ARRAY[NULL]::int[]
- ----
- true true
- query BB
- SELECT ARRAY[1] > ARRAY[1], ARRAY[1] >= ARRAY[1]
- ----
- false true
- query BB
- SELECT ARRAY[1] > ARRAY[2], ARRAY[1] >= ARRAY[2]
- ----
- false false
- query BB
- SELECT ARRAY[1] > ARRAY[[1]], ARRAY[1] >= ARRAY[[1]]
- ----
- false false
- query BB
- SELECT ARRAY[2] > ARRAY[1, 2], ARRAY[2] >= ARRAY[1, 2]
- ----
- true true
- query BB
- SELECT ARRAY[1] > ARRAY[NULL]::int[], ARRAY[1] >= ARRAY[NULL]::int[]
- ----
- false false
- query error operator does not exist: integer\[\] = text\[\]
- SELECT ARRAY[1,2,3] = ARRAY['1','2','3']
- query error operator does not exist: integer\[\] <> text\[\]
- SELECT ARRAY[1,2,3] != ARRAY['1','2','3']
- query error operator does not exist: integer\[\] < text\[\]
- SELECT ARRAY[1,2,3] < ARRAY['1','2','3']
- query error operator does not exist: integer\[\] <= text\[\]
- SELECT ARRAY[1,2,3] <= ARRAY['1','2','3']
- query error operator does not exist: integer\[\] > text\[\]
- SELECT ARRAY[1,2,3] > ARRAY['1','2','3']
- query error operator does not exist: integer\[\] >= text\[\]
- SELECT ARRAY[1,2,3] >= ARRAY['1','2','3']
- query T
- SELECT array_remove(ARRAY[1,2,3,2], 2)
- ----
- {1,3}
- query T
- SELECT array_remove(ARRAY[1,2,3,2], 5)
- ----
- {1,2,3,2}
- query T
- SELECT array_remove(ARRAY[1,2,3,NULL::INT], NULL::INT)
- ----
- {1,2,3}
- query T
- SELECT array_remove(ARRAY[1,NULL::INT,2,3,NULL::INT], NULL::INT)
- ----
- {1,2,3}
- query T
- SELECT array_remove(NULL::INT[], NULL::INT)
- ----
- NULL
- query T
- SELECT array_remove(NULL::INT[], 1)
- ----
- NULL
- query T
- SELECT array_remove(ARRAY[1,1,1], 1)
- ----
- {}
- query error removing elements from multidimensional arrays is not supported
- SELECT array_remove(ARRAY[[1]], 1)
- # array_cat
- query T
- SELECT array_cat(ARRAY[1, 2], ARRAY[3, 4])
- ----
- {1,2,3,4}
- query T
- SELECT array_cat(ARRAY[1, 2], ARRAY[3])
- ----
- {1,2,3}
- query T
- SELECT array_cat(ARRAY[1], ARRAY[2, 3])
- ----
- {1,2,3}
- query T
- SELECT array_cat(ARRAY[]::INT[], ARRAY[]::INT[])
- ----
- {}
- query T
- SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[]]::INT[])
- ----
- {}
- query T
- SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[[[]]]]::INT[])
- ----
- {}
- query T
- SELECT array_cat(ARRAY[[[[]]]]::INT[], ARRAY[[]]::INT[])
- ----
- {}
- query T
- SELECT array_cat(ARRAY[1, 2], ARRAY[]::INT[])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[1, 2], ARRAY[[]]::INT[])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[1, 2], ARRAY[[[[[]]]]]::INT[])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[[1, 2]], ARRAY[]::INT[])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[[1, 2]], ARRAY[[]]::INT[])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[[1, 2]], ARRAY[[[[[]]]]]::INT[])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[]::INT[], ARRAY[1,2])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[[]]::INT[], ARRAY[1,2])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[[[[[[]]]]]]::INT[], ARRAY[1,2])
- ----
- {1,2}
- query T
- SELECT array_cat(ARRAY[]::INT[], ARRAY[[1,2]])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[[]]::INT[], ARRAY[[1,2]])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[[[[[[]]]]]]::INT[], ARRAY[[1,2]])
- ----
- {{1,2}}
- query T
- SELECT array_cat(ARRAY[1,2], NULL::INT[])
- ----
- {1,2}
- query T
- SELECT array_cat(NULL::INT[], ARRAY[1,2])
- ----
- {1,2}
- query T
- SELECT array_cat(NULL::INT[], NULL::INT[])
- ----
- NULL
- query T
- SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[[5,6]])
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT array_cat(ARRAY[[1,2]], ARRAY[[3,4],[5,6]])
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6])
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT array_cat(ARRAY[1,2], ARRAY[[3,4],[5,6]])
- ----
- {{1,2},{3,4},{5,6}}
- simple
- SELECT array_cat(ARRAY[[1,2]], ARRAY[[3,4,5]]);
- ----
- db error: ERROR: cannot concatenate incompatible arrays
- DETAIL: Arrays with differing dimensions are not compatible for concatenation.
- simple
- SELECT array_cat(ARRAY[[[1,2]]], ARRAY[3,4]);
- ----
- db error: ERROR: cannot concatenate incompatible arrays
- DETAIL: Arrays of 3 and 1 dimensions are not compatible for concatenation.
- query error
- SELECT array_cat(ARRAY[1,2], ARRAY['3'])
- # array concatenation operator
- query T
- SELECT ARRAY[1, 2] || ARRAY[3, 4]
- ----
- {1,2,3,4}
- query T
- SELECT ARRAY[1, 2] || ARRAY[3]
- ----
- {1,2,3}
- query T
- SELECT ARRAY[1] || ARRAY[2, 3]
- ----
- {1,2,3}
- query T
- SELECT ARRAY[]::INT[] || ARRAY[]::INT[]
- ----
- {}
- query T
- SELECT ARRAY[[]]::INT[] || ARRAY[[]]::INT[]
- ----
- {}
- query T
- SELECT ARRAY[[]]::INT[] || ARRAY[[[[]]]]::INT[]
- ----
- {}
- query T
- SELECT ARRAY[[[[]]]]::INT[] || ARRAY[[]]::INT[]
- ----
- {}
- query T
- SELECT ARRAY[1, 2] || ARRAY[]::INT[]
- ----
- {1,2}
- query T
- SELECT ARRAY[1, 2] || ARRAY[[]]::INT[]
- ----
- {1,2}
- query T
- SELECT ARRAY[1, 2] || ARRAY[[[[[]]]]]::INT[]
- ----
- {1,2}
- query T
- SELECT ARRAY[[1, 2]] || ARRAY[]::INT[]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[[1, 2]] || ARRAY[[]]::INT[]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[[1, 2]] || ARRAY[[[[[]]]]]::INT[]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[]::INT[] || ARRAY[1,2]
- ----
- {1,2}
- query T
- SELECT ARRAY[[]]::INT[] || ARRAY[1,2]
- ----
- {1,2}
- query T
- SELECT ARRAY[[[[[[]]]]]]::INT[] || ARRAY[1,2]
- ----
- {1,2}
- query T
- SELECT ARRAY[]::INT[] || ARRAY[[1,2]]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[[]]::INT[] || ARRAY[[1,2]]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[[[[[[]]]]]]::INT[] || ARRAY[[1,2]]
- ----
- {{1,2}}
- query T
- SELECT ARRAY[1,2] || NULL::INT[]
- ----
- {1,2}
- query T
- SELECT NULL::INT[] || ARRAY[1,2]
- ----
- {1,2}
- query T
- SELECT NULL::INT[] || NULL::INT[]
- ----
- NULL
- query T
- SELECT ARRAY[[1,2],[3,4]] || ARRAY[[5,6]]
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT ARRAY[[1,2]] || ARRAY[[3,4],[5,6]]
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT ARRAY[[1,2],[3,4]] || ARRAY[5,6]
- ----
- {{1,2},{3,4},{5,6}}
- query T
- SELECT ARRAY[1,2] || ARRAY[[3,4],[5,6]]
- ----
- {{1,2},{3,4},{5,6}}
- simple
- SELECT ARRAY[[1,2]] || ARRAY[[3,4,5]];
- ----
- db error: ERROR: cannot concatenate incompatible arrays
- DETAIL: Arrays with differing dimensions are not compatible for concatenation.
- simple
- SELECT ARRAY[[[1,2]]] || ARRAY[3,4];
- ----
- db error: ERROR: cannot concatenate incompatible arrays
- DETAIL: Arrays of 3 and 1 dimensions are not compatible for concatenation.
- query error no overload for integer\[\] || text\[\]: arguments cannot be implicitly cast to any implementation's parameters; try providing explicit casts
- SELECT ARRAY[1,2] || ARRAY['3'])
- # array_agg with maps
- statement ok
- CREATE TABLE t4 (a MAP[text=>int])
- statement ok
- INSERT INTO t4 VALUES ('{a=>123}'), ('{b=>456}')
- query error array_agg on map\[text=>integer\] not yet supported
- SELECT array_agg(a) FROM t4
- # Verify nested arrays
- statement ok
- CREATE TABLE users (id int not null, other_field int not null)
- statement ok
- CREATE TABLE customer (id int not null, first_name string not null, last_name string not null, zip string not null)
- statement ok
- INSERT INTO users VALUES (1, 10), (2, 5), (3, 8);
- statement ok
- INSERT INTO customer VALUES (1, 'alice', 'lasta', '10003'::text), (2, 'bob', 'lastb', '10013'::text), (3, 'charlie', 'lastc', '11217'::text);
- query error ARRAY could not convert type integer\[\] to text\[\]
- 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
- query T
- 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
- ----
- {{alice},{10003},{1}}
- {{charlie},{11217},{3}}
- # Regression for database-issues#5326
- query error array_in not yet supported
- SELECT array_in('', 0, 0)
- ----
- # Array casting for column expressions
- statement ok
- CREATE TABLE array_t2 (
- a int[],
- b string[][],
- c varchar[],
- d int[][]
- );
- statement ok
- INSERT INTO array_t2 VALUES (
- array[1, 2, 3, 4, 5],
- array[['t1', 't2', 't3']],
- array['test1', 'test2', 'test3', 'test4']::varchar[],
- array[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
- );
- query T
- SELECT pg_typeof(a::string[]::int[]::text[]::float8[]) FROM array_t2;
- ----
- double precision[]
- query T
- SELECT pg_typeof(a::string[]) FROM array_t2;
- ----
- text[]
- query T
- SELECT pg_typeof(a::string[]::int[]) FROM array_t2;
- ----
- integer[]
- query error Evaluation error: invalid input syntax for type integer: invalid digit found in string: "t1"
- SELECT b::int[] FROM array_t2;
- query error CAST does not support casting from integer\[\] to date\[\]
- SELECT a::date[] FROM array_t2;
- query T
- SELECT a::string[]::int[]::text[]::float8[] FROM array_t2;
- ----
- {1,2,3,4,5}
- query T
- SELECT b::text[] FROM array_t2;
- ----
- {{t1,t2,t3}}
- query T
- SELECT d::text[][1][1] FROM array_t2;
- ----
- {{0,1,2},{3,4,5},{6,7,8}}
- query T
- SELECT (d::text[])[1][1] FROM array_t2;
- ----
- 0
- query T
- SELECT (d::text[])[1] FROM array_t2;
- ----
- NULL
- query T
- SELECT CAST(a as text[]) FROM array_t2;
- ----
- {1,2,3,4,5}
- statement ok
- UPDATE array_t2 SET c = NULL;
- query T
- SELECT c::int[] FROM array_t2;
- ----
- NULL
- query error CAST does not support casting from mz_aclitem\[\] to text\[\]
- SELECT privileges::text[] FROM mz_views;
- query error CAST does not support casting from regproc list to text list
- SELECT (LIST[1299::regproc]::regproc list)::text list
- # Array position
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun')
- ----
- 1
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 1)
- ----
- 1
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 2)
- ----
- 8
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'sun', 3)
- ----
- 8
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon')
- ----
- 2
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 1)
- ----
- 2
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 2)
- ----
- 2
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','sun'], 'mon', 3)
- ----
- NULL
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon', -3)
- ----
- 2
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'x')
- ----
- NULL
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'x', 1)
- ----
- NULL
- query I
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], null)
- ----
- NULL
- query I
- SELECT array_position(null::text[], 'abc')
- ----
- NULL
- query I
- SELECT array_position(null::text[], 'abc', null)
- ----
- NULL
- query I
- SELECT array_position(ARRAY['sun'], null, null)
- ----
- NULL
- query error initial position must not be null
- SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon', null)
- query error searching for elements in multidimensional arrays is not supported
- SELECT array_position(ARRAY[['mon']]::text[], 'mon')
- query error searching for elements in multidimensional arrays is not supported
- SELECT array_position(ARRAY[[null]]::text[], 'mon')
- query error searching for elements in multidimensional arrays is not supported
- SELECT array_position(ARRAY[['mon']]::text[], 'mon', 1)
- query error searching for elements in multidimensional arrays is not supported
- SELECT array_position(ARRAY[['mon']]::text[], null, 1)
- query error searching for elements in multidimensional arrays is not supported
- SELECT array_position(ARRAY[['mon']]::text[], 'mon', null)
- # multi-dimensional arrays
- # how else can we handle whitespace terminals in strings?
- query T rowsort
- SELECT
- concat_ws(
- E'\t',
- v,
- array_length(v, 1),
- array_length(v, 2),
- array_length(v, 3),
- array_length(v, 4),
- v[1],
- v[1][1],
- v[1][1][1],
- v[1][1][1][1],
- 'end'
- )
- FROM (
- SELECT a::text[] AS v FROM (
- VALUES (null),
- ('{a}'),
- ('{""}'),
- ('{''}'),
- ('{" "}'),
- ('{" 🌍 "}'),
- ('{\\}'),
- ('{"{",\\}'),
- ('{\"\", \"\\\"\"}'),
- ('{null}'),
- ('{b,b}'),
- ('{{c},{c},{c}}'),
- ('{{a}}'),
- ('{{a},{a}}'),
- ('{{a,b,c},{a,b,c}}'),
- ('{{{b},{b}},{{b},{b}}}'),
- ('{{{c},{c},{c}}}'),
- ('{{"c", d},{"c", d},{"c", d}}'),
- ('{{c, null},{null, d},{"null", null}}'),
- ('{{{{b},{b}}},{{{b},{b}}},{{{b},{b}}}}'),
- ('{{{a}}}'),
- ('{{{a}},{{a}}}'),
- ('{{{a}},{{null}}}'),
- ('{}'),
- ('{{},{}}'),
- ('{{{}},{{}}}'),
- ('{{{null}},{{null}}}'),
- -- Can exceed max dims with empty array which consolidates down
- ('{{{{{{{},{}}}}}}}')
- ) AS x (a)
- ) AS x (v);
- ----
- end
- {} end
- {} end
- {} end
- {} end
- {""} 1 end
- {'} 1 ' end
- {a} 1 a end
- {NULL} 1 end
- {" "} 1 end
- {b,b} 2 b end
- {"\\"} 1 \ end
- {{a}} 1 1 a end
- {"{","\\"} 2 { end
- {{a},{a}} 2 1 a end
- {{{a}}} 1 1 1 a end
- {" 🌍 "} 1 🌍 end
- {{c},{c},{c}} 3 1 c end
- {{{a}},{{a}}} 2 1 1 a end
- {{a,b,c},{a,b,c}} 2 3 a end
- {{{c},{c},{c}}} 1 3 1 c end
- {"\"\"","\"\\\"\""} 2 "" end
- {{{a}},{{NULL}}} 2 1 1 a end
- {{c,d},{c,d},{c,d}} 3 2 c end
- {{{NULL}},{{NULL}}} 2 1 1 end
- {{{b},{b}},{{b},{b}}} 2 2 1 b end
- {{c,NULL},{NULL,d},{null,NULL}} 3 2 c end
- {{{{b},{b}}},{{{b},{b}}},{{{b},{b}}}} 3 1 2 1 b end
- # Test that whitespace produces same results
- query T rowsort
- SELECT
- concat_ws(
- E'\t',
- v,
- array_length(v, 1),
- array_length(v, 2),
- array_length(v, 3),
- array_length(v, 4),
- v[1],
- v[1][1],
- v[1][1][1],
- v[1][1][1][1]
- )
- FROM (
- SELECT a::text[] AS v FROM (
- VALUES (null),
- (' {a}'),
- ('{null} '),
- ('{ b,b}'),
- ('{{c },{c},{c}}'),
- ('{{a }}'),
- ('{{a}, {a}}'),
- ('{{a,b,c},{ a,b,c}}'),
- ('{{{b},{b}},{{b},{b}} }'),
- ('{{{c},{c},{c}}} '),
- ('{ { c , d } , { c , d } , { c , d } } ')
- ) AS x (a)
- ) AS x (v);
- ----
- (empty)
- {a} 1 a
- {NULL} 1
- {b,b} 2 b
- {{a}} 1 1 a
- {{a},{a}} 2 1 a
- {{c},{c},{c}} 3 1 c
- {{a,b,c},{a,b,c}} 2 3 a
- {{{c},{c},{c}}} 1 3 1 c
- {{c,d},{c,d},{c,d}} 3 2 c
- {{{b},{b}},{{b},{b}}} 2 2 1 b
- #
- # Empty
- query error invalid input syntax for type array: Array value must start with "\{": ""
- SELECT ''::int[];
- query error invalid input syntax for type array: Array value must start with "\{": " "
- SELECT ' '::int[];
- #
- # Missing elems
- query error invalid input syntax for type array: Unexpected "\}" character\.: "\{1,\}"
- SELECT '{1,}'::int[];
- query error invalid input syntax for type array: Unexpected "," character\.: "\{,1\}"
- SELECT '{,1}'::int[];
- query error invalid input syntax for type array: Unexpected "," character\.: "\{,\}"
- SELECT '{,}'::int[];
- query error invalid input syntax for type array: Unexpected "\}" character\.: "\{\\" \\",\}"
- SELECT '{" ",}'::int[];
- query error invalid input syntax for type array: Unexpected "," character\.: "\{,\\" \\"\}"
- SELECT '{," "}'::int[];
- query error invalid input syntax for type array: Unexpected "\}" character\.: "\{',\}"
- SELECT '{'',}'::int[];
- query error invalid input syntax for type array: Unexpected "," character\.: "\{,'\}"
- SELECT '{,''}'::int[];
- #
- # Escapes
- query error invalid input syntax for type array: unterminated element: "\{\\\}"
- SELECT '{\}'::text[];
- #
- # Single chars
- query error invalid input syntax for type array: Unexpected end of input\.: "\{"
- SELECT '{'::int[];
- query error invalid input syntax for type array: Array value must start with "\{": "\}"
- SELECT '}'::int[];
- query error invalid input syntax for type array: Array value must start with "\{": ","
- SELECT ','::int[];
- query error invalid input syntax for type array: Array value must start with "\{": "a"
- SELECT 'a'::int[];
- query error invalid input syntax for type array: Array value must start with "\{": "'"
- SELECT ''''::int[];
- query error invalid input syntax for type array: Array value must start with "\{": "\\""
- SELECT '"'::int[];
- #
- # Lopsided brackets
- query error invalid input syntax for type array: Unexpected end of input\.: "\{\{a\}"
- SELECT '{{a}'::int[];
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{a\}\}"
- SELECT '{a}}'::int[];
- query error invalid input syntax for type array: Unexpected end of input\.: "\{\{\}"
- SELECT '{{}'::int[];
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{\}\}"
- SELECT '{}}'::int[];
- query error invalid input syntax for type array: Unexpected end of input\.: "\{ \{a\}"
- SELECT '{ {a}'::int[];
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{ a\}\}"
- SELECT '{ a}}'::int[];
- query error invalid input syntax for type array: Unexpected end of input\.: "\{\{ \}"
- SELECT '{{ }'::int[];
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{\} \}"
- SELECT '{} }'::int[];
- #
- # Missing commas++
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{1\}\{1\}"
- SELECT '{1}{1}'::text[];
- query error invalid input syntax for type array: Unexpected "\{" character\.: "\{\{1\}\{1\}\}"
- SELECT '{{1}{1}}'::text[];
- query error invalid input syntax for type array: Junk after closing right brace\.: "\{\}\{\}"
- SELECT '{}{}'::text[];
- query error invalid input syntax for type array: Unexpected "\{" character\.: "\{\{\}\{\}\}"
- SELECT '{{}{}}'::text[];
- #
- # Manged seps
- query error invalid input syntax for type array: Unexpected array element\.: "\{\{1,2\},\\\{2,3\}\}"
- SELECT E'{{1,2},\\{2,3}}'::text[];
- query error invalid input syntax for type array: Unexpected array element\.: "\{\{\\"1 2\\" x\},\{3\}\}"
- SELECT '{{"1 2" x},{3}}'::text[];
- #
- # Non-rectilinear
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1,\{2\}\},\{2,3\}\}"
- SELECT '{{1,{2}},{2,3}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1\},\{\{2\}\}\}"
- SELECT '{{1},{{2}}}'::text[];
- query error invalid input syntax for type array: Unexpected array element\.: "\{\{\{1\}\},\{2\}\}"
- SELECT '{{{1}},{2}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\},\{\{\}\}\}"
- SELECT '{{},{{}}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\{\}\},\{\}\}"
- SELECT '{{{}},{}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1\},\{\}\}"
- SELECT '{{1},{}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\},\{1\}\}"
- SELECT '{{},{1}}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{1,2\},\{1\}\}"
- SELECT '{{1,2},{1}}'::text[];
- #
- # Non-rectilinear w/ null
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{null, \{1\}\}"
- SELECT '{null, {1}}'::text[];
- query error invalid input syntax for type array: Unexpected array element\.: "\{\{1\}, null\}"
- SELECT '{{1}, null}'::text[];
- query error invalid input syntax for type array: Multidimensional arrays must have sub\-arrays with matching dimensions\.: "\{\{\{null\}\},\{\{\}\}\}"
- SELECT '{{{null}},{{}}}'::text[];
- # Exceeded dimensions
- query error number of array dimensions \(7\) exceeds the maximum allowed \(6\)
- SELECT '{{{{{{{7}}}}}}}'::int[];
- # We check max depth only after successfully parsing
- query error invalid input syntax for type array: Unexpected end of input\.: "\{\{\{\{\{\{\{7\}\}\}\}\}\}"
- SELECT '{{{{{{{7}}}}}}'::int[];
- query T
- SELECT ARRAY[1,4,3] @> ARRAY[3,1] AS contains
- ----
- true
- query T
- SELECT ARRAY[1,4,3] <@ ARRAY[3,1] AS contains
- ----
- false
- # array containment in Postgres does NOT account for duplicates
- query T
- 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
- ----
- true
- query T
- SELECT ARRAY[2,7] <@ ARRAY[1,7,4,2,6] AS is_contained_by
- ----
- true
- query T
- SELECT ARRAY[2,7] @> ARRAY[1,7,4,2,6] AS is_contained_by
- ----
- false
- # verify fix for issue database-issues#8223
- query T
- SELECT '{}'::TEXT[][] @> '{{a, b}, {a, A}}'::TEXT[][];
- ----
- false
- statement ok
- CREATE TABLE t5 (row_index int, multi_dim_text_array_empty TEXT[][], multi_dim_text_array_two_elem TEXT[][]);
- statement ok
- INSERT INTO t5 SELECT 0, '{{}}'::TEXT[][], '{{a, b}, {a, A}}'::TEXT[][];
- query T
- SELECT ((multi_dim_text_array_empty) @> (multi_dim_text_array_two_elem)) FROM t5;
- ----
- false
- query T
- SELECT '{}'::numeric[] @> '{}'::numeric[];
- ----
- true
- query T
- SELECT '{1,2}'::numeric[] @> '{}'::numeric[];
- ----
- true
- query T
- SELECT '{}'::numeric[] @> '{1,2}'::numeric[];
- ----
- false
- query T
- SELECT '{NULL}'::numeric[] @> '{NULL}'::numeric[];
- ----
- false
- query T
- SELECT '{NULL, 1}'::numeric[] @> '{1}'::numeric[];
- ----
- true
- query T
- SELECT '{1}'::numeric[] @> '{1, NULL}'::numeric[];
- ----
- false
- query T
- SELECT '{1, 2, 3, NULL}'::numeric[] @> '{1, NULL}'::numeric[];
- ----
- false
- query T
- SELECT ARRAY[1,3,7,NULL] @> ARRAY[1,3,7,NULL] AS contains;
- ----
- false
- # Make sure we can index into a CAST-ed array.
- statement ok
- CREATE TABLE jsons (payload jsonb, random_index int, random_id uuid);
- statement ok
- CREATE MATERIALIZED VIEW json_mv AS (
- SELECT * FROM jsons WHERE random_id = CAST(payload->>'my_field' AS uuid[])[random_index]
- )
|