12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478 |
- # 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:
- #
- # 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.
- mode cockroach
- simple conn=mz_system,user=mz_system
- ALTER SYSTEM SET unsafe_enable_table_keys = true
- ----
- COMPLETE 0
- simple conn=mz_system,user=mz_system
- ALTER SYSTEM SET enable_repeat_row = true
- ----
- COMPLETE 0
- statement ok
- CREATE TABLE y (a JSONB)
- # Ensure this does not panic.
- query TTTT
- SELECT * FROM y a, y b, jsonb_each(a.a);
- ----
- query I rowsort
- SELECT generate_series FROM generate_series(1, 3)
- ----
- 1
- 2
- 3
- query I rowsort
- SELECT generate_series FROM generate_series(2, 4)
- ----
- 2
- 3
- 4
- query II colnames,rowsort
- SELECT * FROM generate_series(2, 4) WITH ORDINALITY
- ----
- generate_series ordinality
- 2 1
- 3 2
- 4 3
- query I rowsort
- SELECT generate_series FROM generate_series(-2, 2)
- ----
- 0
- 1
- 2
- -2
- -1
- query I rowsort
- SELECT generate_series FROM generate_series(-2::bigint, 2)
- ----
- 0
- 1
- 2
- -2
- -1
- query I
- SELECT generate_series FROM generate_series(null, 1)
- ----
- query I
- SELECT generate_series FROM generate_series(1, null)
- ----
- query error db error: ERROR: function generate_series\(unknown, unknown\) is not unique
- SELECT generate_series FROM generate_series(null, null)
- ----
- statement error invalid input syntax for type integer: invalid digit found in string: "foo"
- SELECT generate_series FROM generate_series('foo', 2)
- statement error invalid input syntax for type integer: invalid digit found in string: "foo"
- SELECT generate_series FROM generate_series(1, 'foo')
- statement error db error: ERROR: function generate_series\(integer\) does not exist
- SELECT generate_series FROM generate_series(2)
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2, 2)
- ----
- CallTable generate_series(-2, 2, 1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT generate_series FROM generate_series(-2, 2)
- ----
- Explained Query (fast path):
- Constant
- - (0)
- - (-1)
- - (1)
- - (2)
- - (-2)
- Target cluster: quickstart
- EOF
- query I colnames
- SELECT x FROM generate_series(1, 3) x
- ----
- x
- 1
- 2
- 3
- # generate_series with lateral joins.
- statement ok
- CREATE TABLE x (a INT PRIMARY KEY, b INT)
- statement ok
- INSERT INTO x VALUES (1, 2), (2, 3), (3, 4)
- query III
- SELECT * FROM x, generate_series(1, a)
- ----
- 1 2 1
- 2 3 1
- 2 3 2
- 3 4 1
- 3 4 2
- 3 4 3
- # Both from the first one.
- query IIIII
- SELECT * FROM x x1, x x2, generate_series(x1.a, x1.b) WHERE x1.b = x2.b
- ----
- 1 2 1 2 1
- 1 2 1 2 2
- 2 3 2 3 2
- 2 3 2 3 3
- 3 4 3 4 3
- 3 4 3 4 4
- # Both from the second one.
- query IIIII
- SELECT * FROM x x1, x x2, generate_series(x2.a, x2.b) WHERE x1.b = x2.b
- ----
- 1 2 1 2 1
- 1 2 1 2 2
- 2 3 2 3 2
- 2 3 2 3 3
- 3 4 3 4 3
- 3 4 3 4 4
- # One from each.
- query IIIII rowsort
- SELECT * FROM x x1, x x2, generate_series(x1.a, x2.a) WHERE x1.b = x2.b
- ----
- 1 2 1 2 1
- 2 3 2 3 2
- 3 4 3 4 3
- # Regression test for database-issues#1206: a table function as the first FROM item inside of
- # a LATERAL subquery should not miscount outer scope depth.
- query II
- SELECT x.a, generate_series FROM x, LATERAL (SELECT * FROM generate_series(1, x.a))
- ----
- 1 1
- 2 1
- 2 2
- 3 1
- 3 2
- 3 3
- # Regression test for database-issues#1700: crash when a filter references an output column of
- # a table function
- query IIIII rowsort
- SELECT * FROM x x1, x x2, generate_series(x1.a, x2.b) AS x3(b) WHERE x1.b = x2.b AND x1.a = x3.b
- ----
- 1 2 1 2 1
- 2 3 2 3 2
- 3 4 3 4 3
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT * FROM x, generate_series(1, a)
- ----
- CrossJoin
- Get materialize.public.x
- CallTable generate_series(1, #^0{a}, 1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT * FROM x, generate_series(100::bigint, a)
- ----
- CrossJoin
- Get materialize.public.x
- CallTable generate_series(integer_to_bigint(100), integer_to_bigint(#^0{a}), 1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x, generate_series(1, 10)
- ----
- Explained Query:
- CrossJoin type=differential // { arity: 3 }
- implementation
- %0:x[×] » %1[×]
- ArrangeBy keys=[[]] // { arity: 2 }
- ReadStorage materialize.public.x // { arity: 2 }
- ArrangeBy keys=[[]] // { arity: 1 }
- Constant // { arity: 1 }
- - (1)
- - (2)
- - (3)
- - (4)
- - (5)
- - (6)
- - (7)
- - (8)
- - (9)
- - (10)
- Source materialize.public.x
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x, generate_series(1, a)
- ----
- Explained Query:
- FlatMap generate_series(1, #0{a}, 1) // { arity: 3 }
- ReadStorage materialize.public.x // { arity: 2 }
- Source materialize.public.x
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x x1, x x2, generate_series(x1.a, x2.a) WHERE x1.b = x2.b
- ----
- Explained Query:
- With
- cte l0 =
- ArrangeBy keys=[[#1{b}]] // { arity: 2 }
- Filter (#1{b}) IS NOT NULL // { arity: 2 }
- ReadStorage materialize.public.x // { arity: 2 }
- Return // { arity: 5 }
- Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
- FlatMap generate_series(#0{a}, #2{a}, 1) // { arity: 4 }
- Project (#0{a}..=#2{a}) // { arity: 3 }
- Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
- implementation
- %0:l0[#1{b}]K » %1:l0[#1{b}]K
- Get l0 // { arity: 2 }
- Get l0 // { arity: 2 }
- Source materialize.public.x
- filter=((#1{b}) IS NOT NULL)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x x1, x x2, generate_series(x1.a, x2.a) WHERE x1.b = x2.b
- ----
- Explained Query:
- With
- cte l0 =
- ArrangeBy keys=[[#1{b}]] // { arity: 2 }
- Filter (#1{b}) IS NOT NULL // { arity: 2 }
- ReadStorage materialize.public.x // { arity: 2 }
- Return // { arity: 5 }
- Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
- FlatMap generate_series(#0{a}, #2{a}, 1) // { arity: 4 }
- Project (#0{a}..=#2{a}) // { arity: 3 }
- Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
- implementation
- %0:l0[#1{b}]K » %1:l0[#1{b}]K
- Get l0 // { arity: 2 }
- Get l0 // { arity: 2 }
- Source materialize.public.x
- filter=((#1{b}) IS NOT NULL)
- Target cluster: quickstart
- EOF
- # Regression test for database-issues#1700: crash when a filter references an output column of
- # a table function around a join
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x x1, x x2, generate_series(x1.a, x2.b) AS x3(b) WHERE x1.b = x2.b AND x1.a = x3.b
- ----
- Explained Query:
- With
- cte l0 =
- ArrangeBy keys=[[#1{b}]] // { arity: 2 }
- Filter (#1{b}) IS NOT NULL // { arity: 2 }
- ReadStorage materialize.public.x // { arity: 2 }
- Return // { arity: 5 }
- Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
- Filter (#0{a} = #3{b}) // { arity: 4 }
- FlatMap generate_series(#0{a}, #1{b}, 1) // { arity: 4 }
- Project (#0{a}..=#2{a}) // { arity: 3 }
- Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
- implementation
- %0:l0[#1{b}]K » %1:l0[#1{b}]K
- Get l0 // { arity: 2 }
- Get l0 // { arity: 2 }
- Source materialize.public.x
- filter=((#1{b}) IS NOT NULL)
- Target cluster: quickstart
- EOF
- query I
- SELECT * FROM generate_series(0,3), repeat_row(generate_series);
- ----
- 1
- 2
- 2
- 3
- 3
- 3
- query I
- SELECT abs(generate_series) FROM generate_series(-1, 2), repeat_row(generate_series);
- ----
- 2
- 2
- statement error Negative multiplicity in constant result: -1
- SELECT * FROM (values ('a')), repeat_row(-1)
- statement error constant folding encountered reduce on collection with non-positive multiplicities
- SELECT (SELECT 1 FROM repeat_row(-1))
- query T
- SELECT generate_series FROM generate_series(null, null, null)
- ----
- query I
- SELECT generate_series FROM generate_series(1, 3, 1)
- ----
- 1
- 2
- 3
- query error step size cannot equal zero
- SELECT generate_series FROM generate_series(1, 100, 0)
- ----
- query error step size cannot equal zero
- SELECT generate_series FROM generate_series(1::bigint, 100::bigint, 0::bigint)
- ----
- query I
- SELECT generate_series FROM generate_series(1, 10, 11)
- ----
- 1
- query I
- SELECT generate_series FROM generate_series(1::bigint, 10::bigint, 11::bigint)
- ----
- 1
- query I
- SELECT generate_series FROM generate_series(3, 1, -1)
- ----
- 1
- 2
- 3
- query I
- SELECT generate_series FROM generate_series(3::bigint, 1::bigint, -1::bigint)
- ----
- 1
- 2
- 3
- query I
- SELECT generate_series FROM generate_series(1, 10, -1)
- ----
- query I
- SELECT generate_series FROM generate_series(1::bigint, 10::bigint, -1::bigint)
- ----
- query I
- SELECT generate_series FROM generate_series(2, 4, 2)
- ----
- 2
- 4
- query I
- SELECT generate_series FROM generate_series(2::bigint, 4::bigint, 2::bigint)
- ----
- 2
- 4
- query I rowsort
- SELECT generate_series FROM generate_series(-2, 2, 3)
- ----
- 1
- -2
- query I rowsort
- SELECT generate_series FROM generate_series(-2::bigint, 2::bigint, 3::bigint)
- ----
- 1
- -2
- query I
- SELECT generate_series FROM generate_series(-2::bigint, 2, 1)
- ORDER BY 1
- ----
- -2
- -1
- 0
- 1
- 2
- query I
- SELECT generate_series FROM generate_series(null, 1, 1)
- ----
- query I
- SELECT generate_series FROM generate_series(null, 1::bigint, 1::bigint)
- ----
- query I
- SELECT generate_series FROM generate_series(1, null, 1)
- ----
- query I
- SELECT generate_series FROM generate_series(1::bigint, null, 1::bigint)
- ----
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2, 2, 1)
- ----
- CallTable generate_series(-2, 2, 1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2::bigint, 2::bigint, 1::bigint)
- ----
- CallTable generate_series(integer_to_bigint(-2), integer_to_bigint(2), integer_to_bigint(1))
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT generate_series FROM generate_series(-2, 2, 2)
- ----
- Explained Query (fast path):
- Constant
- - (0)
- - (2)
- - (-2)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT generate_series FROM generate_series(-2::bigint, 2::bigint, 2::bigint)
- ----
- Explained Query (fast path):
- Constant
- - (0)
- - (2)
- - (-2)
- Target cluster: quickstart
- EOF
- # information_schema._pg_expandarray
- query error db error: ERROR: function information_schema\._pg_expandarray\(\) does not exist
- SELECT information_schema._pg_expandarray()
- query error db error: ERROR: function information_schema\._pg_expandarray\(\) does not exist
- SELECT * FROM information_schema._pg_expandarray()
- query error cannot determine type of empty array
- SELECT information_schema._pg_expandarray(ARRAY[])
- query error cannot determine type of empty array
- SELECT * FROM information_schema._pg_expandarray(ARRAY[])
- query error could not determine polymorphic type because input has type unknown
- SELECT * FROM information_schema._pg_expandarray(NULL)
- query error could not determine polymorphic type because input has type unknown
- SELECT information_schema._pg_expandarray(NULL)
- query T colnames
- SELECT information_schema._pg_expandarray(ARRAY[]::int[])
- ----
- _pg_expandarray
- query TI colnames
- SELECT * FROM information_schema._pg_expandarray(ARRAY[]::int[])
- ----
- x n
- query T colnames
- SELECT information_schema._pg_expandarray(ARRAY[100])
- ----
- _pg_expandarray
- (100,1)
- query TI
- SELECT * FROM information_schema._pg_expandarray(ARRAY[100])
- ----
- 100 1
- query T
- SELECT information_schema._pg_expandarray(ARRAY[2, 1]) ORDER BY 1
- ----
- (1,2)
- (2,1)
- query II
- SELECT * FROM information_schema._pg_expandarray(ARRAY[2, 1]) ORDER BY x
- ----
- 1 2
- 2 1
- query T
- SELECT information_schema._pg_expandarray(ARRAY[3, 2, 1]) ORDER BY 1
- ----
- (1,3)
- (2,2)
- (3,1)
- query II
- SELECT * FROM information_schema._pg_expandarray(ARRAY[3, 2, 1]) ORDER BY x
- ----
- 1 3
- 2 2
- 3 1
- query T
- SELECT information_schema._pg_expandarray(ARRAY['a'])
- ----
- (a,1)
- query TI
- SELECT * FROM information_schema._pg_expandarray(ARRAY['a'])
- ----
- a 1
- query T
- SELECT information_schema._pg_expandarray(ARRAY['b', 'a']) ORDER BY 1
- ----
- (a,2)
- (b,1)
- query TI
- SELECT * FROM information_schema._pg_expandarray(ARRAY['b', 'a']) ORDER BY x
- ----
- a 2
- b 1
- query T
- SELECT information_schema._pg_expandarray(ARRAY['c', 'b', 'a']) ORDER BY 1
- ----
- (a,3)
- (b,2)
- (c,1)
- query TI
- SELECT * FROM information_schema._pg_expandarray(ARRAY['c', 'b', 'a']) ORDER BY x
- ----
- a 3
- b 2
- c 1
- # Test table and column naming for table functions that return 1 column.
- query T colnames
- SELECT generate_series.* FROM generate_series(1, 1)
- ----
- generate_series
- 1
- query T
- SELECT generate_series.generate_series FROM generate_series(1, 1)
- ----
- 1
- query T colnames
- SELECT g FROM generate_series(1, 1) AS g
- ----
- g
- 1
- query T
- SELECT g.g FROM generate_series(1, 1) AS g
- ----
- 1
- query T colnames
- SELECT g.* FROM generate_series(1, 1) AS g
- ----
- g
- 1
- query T colnames
- SELECT g FROM generate_series(1, 1) AS g(a)
- ----
- g
- 1
- query T colnames
- SELECT g FROM ROWS FROM (generate_series(1, 1)) AS g(a)
- ----
- g
- 1
- query T colnames
- SELECT jsonb_array_elements FROM ROWS FROM (jsonb_array_elements('[1]'), generate_series(1, 1));
- ----
- jsonb_array_elements
- (1,1)
- query T colnames
- SELECT jsonb_array_elements.generate_series FROM ROWS FROM (jsonb_array_elements('[1]'), generate_series(1, 1));
- ----
- generate_series
- 1
- query T colnames,rowsort
- SELECT repeat_row FROM ROWS FROM (repeat_row(2), generate_series(1, 1));
- ----
- repeat_row
- ()
- (1)
- query T colnames
- SELECT g.a FROM generate_series(1, 1) AS g(a)
- ----
- a
- 1
- query T colnames
- SELECT g.* FROM generate_series(1, 1) AS g(a)
- ----
- a
- 1
- statement error column "g.g" does not exist
- SELECT g.g FROM generate_series(1, 1) AS g(a)
- statement error column "generate_series" does not exist
- SELECT generate_series FROM generate_series(1, 1) AS g
- statement error column "g.generate_series" does not exist
- SELECT g.generate_series FROM generate_series(1, 1) AS g
- statement error column "generate_series.g" does not exist
- SELECT generate_series.g FROM generate_series(1, 1) AS g
- # Test table and column naming for set functions that return more than 1 column.
- query T colnames
- SELECT g FROM information_schema._pg_expandarray(ARRAY[100]) AS g
- ----
- g
- (100,1)
- query TT colnames
- SELECT _pg_expandarray.* FROM information_schema._pg_expandarray(ARRAY[100])
- ----
- x n
- 100 1
- query T
- SELECT _pg_expandarray.x FROM information_schema._pg_expandarray(ARRAY[100])
- ----
- 100
- query T
- SELECT g FROM information_schema._pg_expandarray(ARRAY[100]) AS g
- ----
- (100,1)
- query T
- SELECT g.x FROM information_schema._pg_expandarray(ARRAY[100]) AS g
- ----
- 100
- query TT
- SELECT g.* FROM information_schema._pg_expandarray(ARRAY[100]) AS g
- ----
- 100 1
- query T colnames
- SELECT information_schema._pg_expandarray(ARRAY['a']) AS x
- ----
- x
- (a,1)
- # Test aliasing table functions and using named columns of the results.
- query T rowsort
- SELECT jsonb_array_elements.value->>'a' FROM jsonb_array_elements('[{"a":1},{"a":2},{"a":3}]')
- ----
- 1
- 2
- 3
- query T rowsort
- SELECT js.value->>'a' FROM jsonb_array_elements('[{"a":1},{"a":2},{"a":3}]') js
- ----
- 1
- 2
- 3
- # Test more table/set functions in select projections.
- statement ok
- CREATE TABLE t (i int)
- statement ok
- INSERT INTO t VALUES (1), (2)
- query II colnames
- SELECT t.i, g.g FROM t, LATERAL generate_series(3,4) g(g) ORDER BY i, g
- ----
- i g
- 1 3
- 1 4
- 2 3
- 2 4
- # This should be identical to the above.
- query II colnames
- SELECT t.i, generate_series(3,4) g FROM t ORDER BY i, g
- ----
- i g
- 1 3
- 1 4
- 2 3
- 2 4
- query T colnames
- SELECT jsonb_each('{"3":4,"1":2}'::JSONB) ORDER BY 1
- ----
- jsonb_each
- (1,2)
- (3,4)
- query ITT colnames
- SELECT 1, jsonb_object_keys('{"1":2,"3":4}'::JSONB), jsonb_object_keys('{"1":2,"3":4,"5":6}'::JSONB) ORDER BY 3
- ----
- ?column? jsonb_object_keys jsonb_object_keys
- 1 1 1
- 1 3 3
- 1 NULL 5
- query T colnames
- SELECT jsonb_build_object(jsonb_object_keys('{"a":2, "b":3}'), 1, 'c', 3) ORDER BY 1
- ----
- jsonb_build_object
- {"a":1,"c":3}
- {"b":1,"c":3}
- query TT
- SELECT jsonb_build_object(jsonb_object_keys('{"a":2, "b":3}'), 1, 'c', 3), jsonb_build_object(jsonb_object_keys('{"a":2, "b":3}'), 1, 'c', 3) ORDER BY 1
- ----
- {"a":1,"c":3} {"a":1,"c":3}
- {"b":1,"c":3} {"b":1,"c":3}
- query error key cannot be null
- SELECT jsonb_build_object(jsonb_object_keys('{"a":2, "b":3}'), 1, 'c', 3), jsonb_build_object(jsonb_object_keys('{"a":2}'), 1, 'c', 3)
- query TT rowsort
- SELECT jsonb_build_array(jsonb_object_keys('{"a":2, "b":3}')), jsonb_build_array(jsonb_object_keys('{"a":2}'));
- ----
- ["b"] [null]
- ["a"] ["a"]
- query error table functions are not allowed in other table functions
- SELECT jsonb_array_elements(jsonb_array_elements('[[1,2],[3,4]]')), jsonb_array_elements(jsonb_array_elements('[[1],[3,4,5]]')) ORDER BY 1
- query error table functions are not allowed in other table functions
- SELECT jsonb_array_elements(jsonb_array_elements('[[1,2],[3,4]]')), jsonb_array_elements('[7,8,9]') ORDER BY 1
- # Postgres explicitly disallows table funcs (although it uses "set-returning
- # functions") in CASE and COALESCE.
- query error table functions are not allowed in CASE
- SELECT i, CASE WHEN i > 0 THEN generate_series(1, 5) ELSE 0 END FROM t
- query error table functions are not allowed in COALESCE
- SELECT COALESCE(1, generate_series(1, 1))
- query error table functions are not allowed in aggregate function calls
- SELECT array_agg(generate_series(1, 2))
- # Subqueries avoid the CASE errors.
- query I
- SELECT COALESCE(1, (SELECT generate_series(1, 1)))
- ----
- 1
- query error table functions are not allowed in WHERE clause
- SELECT 1 WHERE generate_series(1, 1)
- # timestamp-based generate series
- query T
- SELECT * FROM generate_series('2021-01-01 00:00:00'::TIMESTAMP, '2021-01-01 02:00:00'::TIMESTAMP, '1 hour') ORDER BY 1
- ----
- 2021-01-01 00:00:00
- 2021-01-01 01:00:00
- 2021-01-01 02:00:00
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-01 00:00:00'::TIMESTAMP, '-1 hour') ORDER BY 1
- ----
- 2021-01-01 00:00:00
- 2021-01-01 01:00:00
- 2021-01-01 02:00:00
- 2021-01-01 03:00:00
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '1 day') ORDER BY 1
- ----
- 2021-01-01 03:00:00
- 2021-01-02 03:00:00
- query T
- SELECT * FROM generate_series('2021-01-03 00:00:00'::TIMESTAMP, '2021-01-01 03:00:00'::TIMESTAMP, '1 day') ORDER BY 1
- ----
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '-1 day') ORDER BY 1
- ----
- query T
- SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMP, '2022-01-31 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
- ----
- 2021-01-31 03:00:00
- 2021-02-28 03:00:00
- 2021-03-28 03:00:00
- 2021-04-28 03:00:00
- 2021-05-28 03:00:00
- 2021-06-28 03:00:00
- 2021-07-28 03:00:00
- 2021-08-28 03:00:00
- 2021-09-28 03:00:00
- 2021-10-28 03:00:00
- 2021-11-28 03:00:00
- 2021-12-28 03:00:00
- 2022-01-28 03:00:00
- query T
- SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMP, '2021-04-30 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
- ----
- 2021-01-31 03:00:00
- 2021-02-28 03:00:00
- 2021-03-28 03:00:00
- 2021-04-28 03:00:00
- # Leap years
- query T
- SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMP, '2020-04-30 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
- ----
- 2020-01-31 03:00:00
- 2020-02-29 03:00:00
- 2020-03-29 03:00:00
- 2020-04-29 03:00:00
- query T
- SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMP, '2020-11-30 00:00:00'::TIMESTAMP, '2 month') ORDER BY 1
- ----
- 2020-01-31 03:00:00
- 2020-03-31 03:00:00
- 2020-05-31 03:00:00
- 2020-07-31 03:00:00
- 2020-09-30 03:00:00
- query T
- SELECT * FROM generate_series('2020-01-01 22:00:00'::TIMESTAMP, '2021-01-01 00:00:00'::TIMESTAMP, '1 month 1 day 1 hour') ORDER BY 1
- ----
- 2020-01-01 22:00:00
- 2020-02-02 23:00:00
- 2020-03-04 00:00:00
- 2020-04-05 01:00:00
- 2020-05-06 02:00:00
- 2020-06-07 03:00:00
- 2020-07-08 04:00:00
- 2020-08-09 05:00:00
- 2020-09-10 06:00:00
- 2020-10-11 07:00:00
- 2020-11-12 08:00:00
- 2020-12-13 09:00:00
- query error step size cannot equal zero
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '0 day');
- # timestamptz-based generate series
- query T
- SELECT * FROM generate_series('2021-01-01 00:00:00'::TIMESTAMPTZ, '2021-01-01 02:00:00'::TIMESTAMPTZ, '1 hour') ORDER BY 1
- ----
- 2021-01-01 00:00:00+00
- 2021-01-01 01:00:00+00
- 2021-01-01 02:00:00+00
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-01 00:00:00'::TIMESTAMPTZ, '-1 hour') ORDER BY 1
- ----
- 2021-01-01 00:00:00+00
- 2021-01-01 01:00:00+00
- 2021-01-01 02:00:00+00
- 2021-01-01 03:00:00+00
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '1 day') ORDER BY 1
- ----
- 2021-01-01 03:00:00+00
- 2021-01-02 03:00:00+00
- query T
- SELECT * FROM generate_series('2021-01-03 00:00:00'::TIMESTAMPTZ, '2021-01-01 03:00:00'::TIMESTAMPTZ, '1 day') ORDER BY 1
- ----
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '-1 day') ORDER BY 1
- ----
- query T
- SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMPTZ, '2022-01-31 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
- ----
- 2021-01-31 03:00:00+00
- 2021-02-28 03:00:00+00
- 2021-03-28 03:00:00+00
- 2021-04-28 03:00:00+00
- 2021-05-28 03:00:00+00
- 2021-06-28 03:00:00+00
- 2021-07-28 03:00:00+00
- 2021-08-28 03:00:00+00
- 2021-09-28 03:00:00+00
- 2021-10-28 03:00:00+00
- 2021-11-28 03:00:00+00
- 2021-12-28 03:00:00+00
- 2022-01-28 03:00:00+00
- query T
- SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMPTZ, '2021-04-30 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
- ----
- 2021-01-31 03:00:00+00
- 2021-02-28 03:00:00+00
- 2021-03-28 03:00:00+00
- 2021-04-28 03:00:00+00
- # Leap years
- query T
- SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMPTZ, '2020-04-30 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
- ----
- 2020-01-31 03:00:00+00
- 2020-02-29 03:00:00+00
- 2020-03-29 03:00:00+00
- 2020-04-29 03:00:00+00
- query T
- SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMPTZ, '2020-11-30 00:00:00'::TIMESTAMPTZ, '2 month') ORDER BY 1
- ----
- 2020-01-31 03:00:00+00
- 2020-03-31 03:00:00+00
- 2020-05-31 03:00:00+00
- 2020-07-31 03:00:00+00
- 2020-09-30 03:00:00+00
- query T
- SELECT * FROM generate_series('2020-01-01 22:00:00'::TIMESTAMPTZ, '2021-01-01 00:00:00'::TIMESTAMPTZ, '1 month 1 day 1 hour') ORDER BY 1
- ----
- 2020-01-01 22:00:00+00
- 2020-02-02 23:00:00+00
- 2020-03-04 00:00:00+00
- 2020-04-05 01:00:00+00
- 2020-05-06 02:00:00+00
- 2020-06-07 03:00:00+00
- 2020-07-08 04:00:00+00
- 2020-08-09 05:00:00+00
- 2020-09-10 06:00:00+00
- 2020-10-11 07:00:00+00
- 2020-11-12 08:00:00+00
- 2020-12-13 09:00:00+00
- query error step size cannot equal zero
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '0 day');
- query error step size cannot equal zero
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2022-01-03 00:00:00'::TIMESTAMP, '1 month -30 day') ORDER BY 1;
- query error step size cannot equal zero
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2022-01-03 00:00:00'::TIMESTAMP, '1 day -24 hr') ORDER BY 1;
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-05 00:00:00'::TIMESTAMP, '1 day -12 hrs') ORDER BY 1;
- ----
- 2021-01-01 03:00:00
- 2021-01-01 15:00:00
- 2021-01-02 03:00:00
- 2021-01-02 15:00:00
- 2021-01-03 03:00:00
- 2021-01-03 15:00:00
- 2021-01-04 03:00:00
- 2021-01-04 15:00:00
- query T
- SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-02-01 00:00:00'::TIMESTAMP, '1 month -15 days') ORDER BY 1;
- ----
- 2021-01-01 03:00:00
- 2021-01-17 03:00:00
- # Test ROWS FROM
- query I colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1,1));
- ----
- generate_series
- 1
- query II colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1, 2), generate_series(3, 6)) ORDER BY 2;
- ----
- generate_series generate_series
- 1 3
- 2 4
- NULL 5
- NULL 6
- query III colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1, 2), generate_series(3, 6)) WITH ORDINALITY ORDER BY 3;
- ----
- generate_series generate_series ordinality
- 1 3 1
- 2 4 2
- NULL 5 3
- NULL 6 4
- query IIII colnames
- SELECT * FROM ROWS FROM (generate_series(1, 3), generate_series(1, 6), generate_series(1, 9), generate_series(1, 12)) ORDER BY 4;
- ----
- generate_series generate_series generate_series generate_series
- 1 1 1 1
- 2 2 2 2
- 3 3 3 3
- NULL 4 4 4
- NULL 5 5 5
- NULL 6 6 6
- NULL NULL 7 7
- NULL NULL 8 8
- NULL NULL 9 9
- NULL NULL NULL 10
- NULL NULL NULL 11
- NULL NULL NULL 12
- query IIII colnames
- SELECT * FROM ROWS FROM (generate_series(1, 2), information_schema._pg_expandarray(array[9]), generate_series(3, 6)) ORDER BY 4;
- ----
- generate_series x n generate_series
- 1 9 1 3
- 2 NULL NULL 4
- NULL NULL NULL 5
- NULL NULL NULL 6
- query I colnames
- SELECT generate_series FROM ROWS FROM (generate_series(1, 1))
- ----
- generate_series
- 1
- query error column reference "generate_series" is ambiguous
- SELECT generate_series FROM ROWS FROM (generate_series(1, 1), generate_series(2, 2))
- query I colnames
- SELECT generate_series FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
- ----
- generate_series
- 1
- query error column "_pg_expandarray" does not exist
- SELECT _pg_expandarray FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
- query I
- SELECT generate_series.x FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
- ----
- 9
- query I colnames
- SELECT x FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
- ----
- x
- 9
- # Convert to text because sqllogictest doesn't know how to format records.
- query T colnames
- SELECT _pg_expandarray::text FROM ROWS FROM (information_schema._pg_expandarray(array[9]))
- ----
- _pg_expandarray
- (9,1)
- query II colnames
- SELECT _pg_expandarray.* FROM ROWS FROM (information_schema._pg_expandarray(array[9]))
- ----
- x n
- 9 1
- # ROWS FROM with aliases
- query error Expected right parenthesis
- SELECT * FROM LATERAL ROWS FROM (generate_series(1,1) AS g)
- query I colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1,1)) AS g
- ----
- g
- 1
- query I colnames
- SELECT g.g FROM LATERAL ROWS FROM (generate_series(1,1)) AS g
- ----
- g
- 1
- query I colnames
- SELECT g.g FROM LATERAL ROWS FROM (generate_series(1,1)) AS g(g)
- ----
- g
- 1
- query II colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1,1), generate_series(1,1)) AS g
- ----
- generate_series generate_series
- 1 1
- query II colnames
- SELECT g.* FROM LATERAL ROWS FROM (generate_series(1,1), generate_series(1,1)) AS g
- ----
- generate_series generate_series
- 1 1
- query III colnames
- SELECT g.* FROM LATERAL ROWS FROM (generate_series(1,1), information_schema._pg_expandarray(array[1])) AS g
- ----
- generate_series x n
- 1 1 1
- query III colnames
- SELECT * FROM LATERAL ROWS FROM (generate_series(1,1), information_schema._pg_expandarray(array[1])) AS g(a,b,c)
- ----
- a b c
- 1 1 1
- # Multiple table funcs in SELECT projection.
- query II colnames rowsort
- SELECT generate_series(1,2) x, generate_series(1,2) ORDER BY 1
- ----
- x generate_series
- 1 1
- 2 2
- query II colnames rowsort
- SELECT generate_series(1,2), generate_series(1,2) y ORDER BY 1
- ----
- generate_series y
- 1 1
- 2 2
- query II colnames rowsort
- SELECT generate_series(1,2) x, generate_series(1,2) y ORDER BY 1
- ----
- x y
- 1 1
- 2 2
- query II
- SELECT generate_series(1, 1), generate_series(2, 2)
- ----
- 1 2
- query IT colnames
- SELECT (information_schema._pg_expandarray(array[10])).x, information_schema._pg_expandarray(array[10])
- ----
- x _pg_expandarray
- 10 (10,1)
- query IIITITT colnames
- SELECT
- (information_schema._pg_expandarray(ARRAY[100])).*,
- (information_schema._pg_expandarray(ARRAY[100])).x,
- information_schema._pg_expandarray(ARRAY[100])::text,
- generate_series(1, 2),
- jsonb_array_elements('[3]'),
- jsonb_array_elements('[4,5]')
- ORDER BY generate_series
- ----
- x n x _pg_expandarray generate_series jsonb_array_elements jsonb_array_elements
- 100 1 100 (100,1) 1 3 4
- NULL NULL NULL NULL 2 NULL 5
- query error column reference "generate_series" is ambiguous
- SELECT
- generate_series(1, 2),
- generate_series(1, 3)
- ORDER BY generate_series
- # Duplicate, identical table functions are not ambiguous.
- query II
- SELECT
- generate_series(1, 2),
- generate_series(1, 2)
- ORDER BY generate_series
- ----
- 1 1
- 2 2
- query IIIT colnames,rowsort
- SELECT generate_series(1, 2), (information_schema._pg_expandarray(ARRAY[100])).*, jsonb_array_elements('[3]')::text ORDER BY 1
- ----
- generate_series x n jsonb_array_elements
- 1 100 1 3
- 2 NULL NULL NULL
- query ITI colnames,rowsort
- SELECT generate_series(1, 2), information_schema._pg_expandarray(ARRAY[100])::text, generate_series(1, 3) ORDER BY 3
- ----
- generate_series _pg_expandarray generate_series
- 1 (100,1) 1
- 2 NULL 2
- NULL NULL 3
- # Some error cases
- query error table functions are not allowed in WHERE clause
- SELECT 1 FROM t WHERE generate_series(1, 1) = 1
- # TODO: This error should complain about the DISTINCT.
- query error table functions are not allowed in SELECT clause
- SELECT generate_series(DISTINCT 1, 1)
- # Subqueries avoid the uniqueness check.
- query II
- SELECT generate_series(1, 1), (SELECT generate_series(2, 2))
- ----
- 1 2
- query error type integer is not composite
- SELECT (generate_series(1, 1)).*
- query error not a composite type
- SELECT (generate_series(1, 1)).generate_series
- # GENERATE_SUBSCRIPTS
- query I
- SELECT generate_subscripts('{1,2,3,4}'::int[], 1) AS s;
- ----
- 1
- 2
- 3
- 4
- query I
- SELECT generate_subscripts('{1,NULL,3,NULL}'::int[], 1) AS s;
- ----
- 1
- 2
- 3
- 4
- query I
- SELECT generate_subscripts('{1,2,3,4}'::TEXT[], 1) AS s;
- ----
- 1
- 2
- 3
- 4
- query I
- SELECT generate_subscripts('{1,2,3,4}'::int[], 0) AS s;
- ----
- query I
- SELECT generate_subscripts('{1,2,3,4}'::int[], -1) AS s;
- ----
- query I
- SELECT generate_subscripts('{1,2,3,4}'::int[], 2) AS s;
- ----
- query I
- SELECT generate_subscripts('{1,2,3,4}'::int[], 12345) AS s;
- ----
- query T
- SELECT generate_subscripts('{{1,2,3,4}, {5,6,7,8}}'::int[], 1) AS s;
- ----
- 1
- 2
- query T
- SELECT generate_subscripts('{{1,2,3,4}, {5,6,7,8}}'::int[], 2) AS s;
- ----
- 1
- 2
- 3
- 4
- query error table functions are not allowed in other table functions
- SELECT generate_subscripts('{1,2,3,4}'::int[], 1), repeat_row(generate_series(1, 1)) AS s
- # test lower bound, this should return indices 2,3,4
- # but currently we dont support this syntax
- query error invalid input syntax for type array
- SELECT generate_subscripts('[2:4]={1,2,3,4}'::int[], 1) AS s;
- query I
- select generate_subscripts(ARRAY[ARRAY[1,2,3], ARRAY[4,5,6]], 1);
- ----
- 1
- 2
- query I
- select generate_subscripts(ARRAY[ARRAY[1,2,3], ARRAY[4,5,6]], 2);
- ----
- 1
- 2
- 3
- query error could not determine polymorphic type because input has type unknown
- SELECT generate_subscripts(NULL, 1)
- # Regression test for database-issues#2939: LATERAL column references in ROWS FROM
- query III
- SELECT * FROM generate_series(1, 3) as foo(a), ROWS FROM (generate_series(foo.a, foo.a + 2), generate_series(foo.a, foo.a + 1)) order by 1, 2, 3;
- ----
- 1 1 1
- 1 2 2
- 1 3 NULL
- 2 2 2
- 2 3 3
- 2 4 NULL
- 3 3 3
- 3 4 4
- 3 5 NULL
- query IIII
- SELECT * FROM generate_series(1, 3) as foo(a), ROWS FROM (generate_series(foo.a, foo.a + 2), generate_series(foo.a, foo.a + 1), generate_series(foo.a, foo.a)) order by 1, 2, 3, 4;
- ----
- 1 1 1 1
- 1 2 2 NULL
- 1 3 NULL NULL
- 2 2 2 2
- 2 3 3 NULL
- 2 4 NULL NULL
- 3 3 3 3
- 3 4 4 NULL
- 3 5 NULL NULL
- # Regression test for database-issues#2941
- statement ok
- create view bar as select * from y, rows from (generate_series(1, 2), jsonb_array_elements(y.a));
- # Regression for database-issues#3078
- query IT
- WITH a(x) AS (SELECT 'a') SELECT generate_series(1, 2), * FROM a ORDER BY generate_series
- ----
- 1 a
- 2 a
- # Test optimization for single table function in scalar position
- # Plan should be just a simple FlatMap + Project
- # Regression test for database-issues#3173
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT jsonb_object_keys(a) FROM y;
- ----
- Explained Query:
- Project (#1) // { arity: 1 }
- FlatMap jsonb_object_keys(#0{a}) // { arity: 2 }
- ReadStorage materialize.public.y // { arity: 1 }
- Source materialize.public.y
- Target cluster: quickstart
- EOF
- # Test that table functions should produce deterministic plans
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT jsonb_object_keys('{"1":2}'::JSONB), jsonb_object_keys('{"1":2}'::JSONB);
- ----
- Project (#0, #0)
- CallTable jsonb_object_keys(text_to_jsonb("{\"1\":2}"))
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN RAW PLAN FOR SELECT jsonb_object_keys('{"1":2}'::JSONB), jsonb_object_keys('{"3":4}'::JSONB);
- ----
- Project (#5, #6)
- Map (case when (#1) IS NULL then null else #0{jsonb_object_keys} end, case when (#3) IS NULL then null else #2{jsonb_object_keys} end)
- Project (#0, #1, #3..=#5)
- Map (coalesce(#2, #4))
- FullOuterJoin (#2 = #4)
- Map (row_number() over (order by []), #1)
- CallTable jsonb_object_keys(text_to_jsonb("{\"1\":2}"))
- Map (row_number() over (order by []))
- CallTable jsonb_object_keys(text_to_jsonb("{\"3\":4}"))
- Target cluster: quickstart
- EOF
- # Disallowed table function behaviour
- query I
- SELECT generate_series FROM generate_series(1, 3) WHERE (generate_series < 3);
- ----
- 1
- 2
- query error Expected right parenthesis, found BY
- SELECT generate_series FROM generate_series(1, 3) OVER (ORDER BY generate_series);
- query error Expected right parenthesis, found number "1"
- SELECT generate_series FROM generate_series(DISTINCT 1, 3);
- # Regression for https://github.com/MaterializeInc/database-issues/issues/6180
- query error db error: ERROR: regexp_extract must specify at least one capture group
- select regexp_extract('aaa', 'a')
|