table_func.slt 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. #
  10. # This file is derived from the logic test suite in CockroachDB. The
  11. # original file was retrieved on June 10, 2019 from:
  12. #
  13. # The original source code is subject to the terms of the Apache
  14. # 2.0 license, a copy of which can be found in the LICENSE file at the
  15. # root of this repository.
  16. mode cockroach
  17. simple conn=mz_system,user=mz_system
  18. ALTER SYSTEM SET unsafe_enable_table_keys = true
  19. ----
  20. COMPLETE 0
  21. simple conn=mz_system,user=mz_system
  22. ALTER SYSTEM SET enable_repeat_row = true
  23. ----
  24. COMPLETE 0
  25. statement ok
  26. CREATE TABLE y (a JSONB)
  27. # Ensure this does not panic.
  28. query TTTT
  29. SELECT * FROM y a, y b, jsonb_each(a.a);
  30. ----
  31. query I rowsort
  32. SELECT generate_series FROM generate_series(1, 3)
  33. ----
  34. 1
  35. 2
  36. 3
  37. query I rowsort
  38. SELECT generate_series FROM generate_series(2, 4)
  39. ----
  40. 2
  41. 3
  42. 4
  43. query II colnames,rowsort
  44. SELECT * FROM generate_series(2, 4) WITH ORDINALITY
  45. ----
  46. generate_series ordinality
  47. 2 1
  48. 3 2
  49. 4 3
  50. query I rowsort
  51. SELECT generate_series FROM generate_series(-2, 2)
  52. ----
  53. 0
  54. 1
  55. 2
  56. -2
  57. -1
  58. query I rowsort
  59. SELECT generate_series FROM generate_series(-2::bigint, 2)
  60. ----
  61. 0
  62. 1
  63. 2
  64. -2
  65. -1
  66. query I
  67. SELECT generate_series FROM generate_series(null, 1)
  68. ----
  69. query I
  70. SELECT generate_series FROM generate_series(1, null)
  71. ----
  72. query error db error: ERROR: function generate_series\(unknown, unknown\) is not unique
  73. SELECT generate_series FROM generate_series(null, null)
  74. ----
  75. statement error invalid input syntax for type integer: invalid digit found in string: "foo"
  76. SELECT generate_series FROM generate_series('foo', 2)
  77. statement error invalid input syntax for type integer: invalid digit found in string: "foo"
  78. SELECT generate_series FROM generate_series(1, 'foo')
  79. statement error db error: ERROR: function generate_series\(integer\) does not exist
  80. SELECT generate_series FROM generate_series(2)
  81. query T multiline
  82. EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2, 2)
  83. ----
  84. CallTable generate_series(-2, 2, 1)
  85. Target cluster: quickstart
  86. EOF
  87. query T multiline
  88. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT generate_series FROM generate_series(-2, 2)
  89. ----
  90. Explained Query (fast path):
  91. Constant
  92. - (0)
  93. - (-1)
  94. - (1)
  95. - (2)
  96. - (-2)
  97. Target cluster: quickstart
  98. EOF
  99. query I colnames
  100. SELECT x FROM generate_series(1, 3) x
  101. ----
  102. x
  103. 1
  104. 2
  105. 3
  106. # generate_series with lateral joins.
  107. statement ok
  108. CREATE TABLE x (a INT PRIMARY KEY, b INT)
  109. statement ok
  110. INSERT INTO x VALUES (1, 2), (2, 3), (3, 4)
  111. query III
  112. SELECT * FROM x, generate_series(1, a)
  113. ----
  114. 1 2 1
  115. 2 3 1
  116. 2 3 2
  117. 3 4 1
  118. 3 4 2
  119. 3 4 3
  120. # Both from the first one.
  121. query IIIII
  122. SELECT * FROM x x1, x x2, generate_series(x1.a, x1.b) WHERE x1.b = x2.b
  123. ----
  124. 1 2 1 2 1
  125. 1 2 1 2 2
  126. 2 3 2 3 2
  127. 2 3 2 3 3
  128. 3 4 3 4 3
  129. 3 4 3 4 4
  130. # Both from the second one.
  131. query IIIII
  132. SELECT * FROM x x1, x x2, generate_series(x2.a, x2.b) WHERE x1.b = x2.b
  133. ----
  134. 1 2 1 2 1
  135. 1 2 1 2 2
  136. 2 3 2 3 2
  137. 2 3 2 3 3
  138. 3 4 3 4 3
  139. 3 4 3 4 4
  140. # One from each.
  141. query IIIII rowsort
  142. SELECT * FROM x x1, x x2, generate_series(x1.a, x2.a) WHERE x1.b = x2.b
  143. ----
  144. 1 2 1 2 1
  145. 2 3 2 3 2
  146. 3 4 3 4 3
  147. # Regression test for database-issues#1206: a table function as the first FROM item inside of
  148. # a LATERAL subquery should not miscount outer scope depth.
  149. query II
  150. SELECT x.a, generate_series FROM x, LATERAL (SELECT * FROM generate_series(1, x.a))
  151. ----
  152. 1 1
  153. 2 1
  154. 2 2
  155. 3 1
  156. 3 2
  157. 3 3
  158. # Regression test for database-issues#1700: crash when a filter references an output column of
  159. # a table function
  160. query IIIII rowsort
  161. 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
  162. ----
  163. 1 2 1 2 1
  164. 2 3 2 3 2
  165. 3 4 3 4 3
  166. query T multiline
  167. EXPLAIN RAW PLAN FOR SELECT * FROM x, generate_series(1, a)
  168. ----
  169. CrossJoin
  170. Get materialize.public.x
  171. CallTable generate_series(1, #^0{a}, 1)
  172. Target cluster: quickstart
  173. EOF
  174. query T multiline
  175. EXPLAIN RAW PLAN FOR SELECT * FROM x, generate_series(100::bigint, a)
  176. ----
  177. CrossJoin
  178. Get materialize.public.x
  179. CallTable generate_series(integer_to_bigint(100), integer_to_bigint(#^0{a}), 1)
  180. Target cluster: quickstart
  181. EOF
  182. query T multiline
  183. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x, generate_series(1, 10)
  184. ----
  185. Explained Query:
  186. CrossJoin type=differential // { arity: 3 }
  187. implementation
  188. %0:x[×] » %1[×]
  189. ArrangeBy keys=[[]] // { arity: 2 }
  190. ReadStorage materialize.public.x // { arity: 2 }
  191. ArrangeBy keys=[[]] // { arity: 1 }
  192. Constant // { arity: 1 }
  193. - (1)
  194. - (2)
  195. - (3)
  196. - (4)
  197. - (5)
  198. - (6)
  199. - (7)
  200. - (8)
  201. - (9)
  202. - (10)
  203. Source materialize.public.x
  204. Target cluster: quickstart
  205. EOF
  206. query T multiline
  207. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT * FROM x, generate_series(1, a)
  208. ----
  209. Explained Query:
  210. FlatMap generate_series(1, #0{a}, 1) // { arity: 3 }
  211. ReadStorage materialize.public.x // { arity: 2 }
  212. Source materialize.public.x
  213. Target cluster: quickstart
  214. EOF
  215. query T multiline
  216. 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
  217. ----
  218. Explained Query:
  219. With
  220. cte l0 =
  221. ArrangeBy keys=[[#1{b}]] // { arity: 2 }
  222. Filter (#1{b}) IS NOT NULL // { arity: 2 }
  223. ReadStorage materialize.public.x // { arity: 2 }
  224. Return // { arity: 5 }
  225. Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
  226. FlatMap generate_series(#0{a}, #2{a}, 1) // { arity: 4 }
  227. Project (#0{a}..=#2{a}) // { arity: 3 }
  228. Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
  229. implementation
  230. %0:l0[#1{b}]K » %1:l0[#1{b}]K
  231. Get l0 // { arity: 2 }
  232. Get l0 // { arity: 2 }
  233. Source materialize.public.x
  234. filter=((#1{b}) IS NOT NULL)
  235. Target cluster: quickstart
  236. EOF
  237. query T multiline
  238. 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
  239. ----
  240. Explained Query:
  241. With
  242. cte l0 =
  243. ArrangeBy keys=[[#1{b}]] // { arity: 2 }
  244. Filter (#1{b}) IS NOT NULL // { arity: 2 }
  245. ReadStorage materialize.public.x // { arity: 2 }
  246. Return // { arity: 5 }
  247. Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
  248. FlatMap generate_series(#0{a}, #2{a}, 1) // { arity: 4 }
  249. Project (#0{a}..=#2{a}) // { arity: 3 }
  250. Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
  251. implementation
  252. %0:l0[#1{b}]K » %1:l0[#1{b}]K
  253. Get l0 // { arity: 2 }
  254. Get l0 // { arity: 2 }
  255. Source materialize.public.x
  256. filter=((#1{b}) IS NOT NULL)
  257. Target cluster: quickstart
  258. EOF
  259. # Regression test for database-issues#1700: crash when a filter references an output column of
  260. # a table function around a join
  261. query T multiline
  262. 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
  263. ----
  264. Explained Query:
  265. With
  266. cte l0 =
  267. ArrangeBy keys=[[#1{b}]] // { arity: 2 }
  268. Filter (#1{b}) IS NOT NULL // { arity: 2 }
  269. ReadStorage materialize.public.x // { arity: 2 }
  270. Return // { arity: 5 }
  271. Project (#0{a}..=#2{a}, #1{b}, #3) // { arity: 5 }
  272. Filter (#0{a} = #3{b}) // { arity: 4 }
  273. FlatMap generate_series(#0{a}, #1{b}, 1) // { arity: 4 }
  274. Project (#0{a}..=#2{a}) // { arity: 3 }
  275. Join on=(#1{b} = #3{b}) type=differential // { arity: 4 }
  276. implementation
  277. %0:l0[#1{b}]K » %1:l0[#1{b}]K
  278. Get l0 // { arity: 2 }
  279. Get l0 // { arity: 2 }
  280. Source materialize.public.x
  281. filter=((#1{b}) IS NOT NULL)
  282. Target cluster: quickstart
  283. EOF
  284. query I
  285. SELECT * FROM generate_series(0,3), repeat_row(generate_series);
  286. ----
  287. 1
  288. 2
  289. 2
  290. 3
  291. 3
  292. 3
  293. query I
  294. SELECT abs(generate_series) FROM generate_series(-1, 2), repeat_row(generate_series);
  295. ----
  296. 2
  297. 2
  298. statement error Negative multiplicity in constant result: -1
  299. SELECT * FROM (values ('a')), repeat_row(-1)
  300. statement error constant folding encountered reduce on collection with non-positive multiplicities
  301. SELECT (SELECT 1 FROM repeat_row(-1))
  302. query T
  303. SELECT generate_series FROM generate_series(null, null, null)
  304. ----
  305. query I
  306. SELECT generate_series FROM generate_series(1, 3, 1)
  307. ----
  308. 1
  309. 2
  310. 3
  311. query error step size cannot equal zero
  312. SELECT generate_series FROM generate_series(1, 100, 0)
  313. ----
  314. query error step size cannot equal zero
  315. SELECT generate_series FROM generate_series(1::bigint, 100::bigint, 0::bigint)
  316. ----
  317. query I
  318. SELECT generate_series FROM generate_series(1, 10, 11)
  319. ----
  320. 1
  321. query I
  322. SELECT generate_series FROM generate_series(1::bigint, 10::bigint, 11::bigint)
  323. ----
  324. 1
  325. query I
  326. SELECT generate_series FROM generate_series(3, 1, -1)
  327. ----
  328. 1
  329. 2
  330. 3
  331. query I
  332. SELECT generate_series FROM generate_series(3::bigint, 1::bigint, -1::bigint)
  333. ----
  334. 1
  335. 2
  336. 3
  337. query I
  338. SELECT generate_series FROM generate_series(1, 10, -1)
  339. ----
  340. query I
  341. SELECT generate_series FROM generate_series(1::bigint, 10::bigint, -1::bigint)
  342. ----
  343. query I
  344. SELECT generate_series FROM generate_series(2, 4, 2)
  345. ----
  346. 2
  347. 4
  348. query I
  349. SELECT generate_series FROM generate_series(2::bigint, 4::bigint, 2::bigint)
  350. ----
  351. 2
  352. 4
  353. query I rowsort
  354. SELECT generate_series FROM generate_series(-2, 2, 3)
  355. ----
  356. 1
  357. -2
  358. query I rowsort
  359. SELECT generate_series FROM generate_series(-2::bigint, 2::bigint, 3::bigint)
  360. ----
  361. 1
  362. -2
  363. query I
  364. SELECT generate_series FROM generate_series(-2::bigint, 2, 1)
  365. ORDER BY 1
  366. ----
  367. -2
  368. -1
  369. 0
  370. 1
  371. 2
  372. query I
  373. SELECT generate_series FROM generate_series(null, 1, 1)
  374. ----
  375. query I
  376. SELECT generate_series FROM generate_series(null, 1::bigint, 1::bigint)
  377. ----
  378. query I
  379. SELECT generate_series FROM generate_series(1, null, 1)
  380. ----
  381. query I
  382. SELECT generate_series FROM generate_series(1::bigint, null, 1::bigint)
  383. ----
  384. query T multiline
  385. EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2, 2, 1)
  386. ----
  387. CallTable generate_series(-2, 2, 1)
  388. Target cluster: quickstart
  389. EOF
  390. query T multiline
  391. EXPLAIN RAW PLAN FOR SELECT generate_series FROM generate_series(-2::bigint, 2::bigint, 1::bigint)
  392. ----
  393. CallTable generate_series(integer_to_bigint(-2), integer_to_bigint(2), integer_to_bigint(1))
  394. Target cluster: quickstart
  395. EOF
  396. query T multiline
  397. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT generate_series FROM generate_series(-2, 2, 2)
  398. ----
  399. Explained Query (fast path):
  400. Constant
  401. - (0)
  402. - (2)
  403. - (-2)
  404. Target cluster: quickstart
  405. EOF
  406. query T multiline
  407. 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)
  408. ----
  409. Explained Query (fast path):
  410. Constant
  411. - (0)
  412. - (2)
  413. - (-2)
  414. Target cluster: quickstart
  415. EOF
  416. # information_schema._pg_expandarray
  417. query error db error: ERROR: function information_schema\._pg_expandarray\(\) does not exist
  418. SELECT information_schema._pg_expandarray()
  419. query error db error: ERROR: function information_schema\._pg_expandarray\(\) does not exist
  420. SELECT * FROM information_schema._pg_expandarray()
  421. query error cannot determine type of empty array
  422. SELECT information_schema._pg_expandarray(ARRAY[])
  423. query error cannot determine type of empty array
  424. SELECT * FROM information_schema._pg_expandarray(ARRAY[])
  425. query error could not determine polymorphic type because input has type unknown
  426. SELECT * FROM information_schema._pg_expandarray(NULL)
  427. query error could not determine polymorphic type because input has type unknown
  428. SELECT information_schema._pg_expandarray(NULL)
  429. query T colnames
  430. SELECT information_schema._pg_expandarray(ARRAY[]::int[])
  431. ----
  432. _pg_expandarray
  433. query TI colnames
  434. SELECT * FROM information_schema._pg_expandarray(ARRAY[]::int[])
  435. ----
  436. x n
  437. query T colnames
  438. SELECT information_schema._pg_expandarray(ARRAY[100])
  439. ----
  440. _pg_expandarray
  441. (100,1)
  442. query TI
  443. SELECT * FROM information_schema._pg_expandarray(ARRAY[100])
  444. ----
  445. 100 1
  446. query T
  447. SELECT information_schema._pg_expandarray(ARRAY[2, 1]) ORDER BY 1
  448. ----
  449. (1,2)
  450. (2,1)
  451. query II
  452. SELECT * FROM information_schema._pg_expandarray(ARRAY[2, 1]) ORDER BY x
  453. ----
  454. 1 2
  455. 2 1
  456. query T
  457. SELECT information_schema._pg_expandarray(ARRAY[3, 2, 1]) ORDER BY 1
  458. ----
  459. (1,3)
  460. (2,2)
  461. (3,1)
  462. query II
  463. SELECT * FROM information_schema._pg_expandarray(ARRAY[3, 2, 1]) ORDER BY x
  464. ----
  465. 1 3
  466. 2 2
  467. 3 1
  468. query T
  469. SELECT information_schema._pg_expandarray(ARRAY['a'])
  470. ----
  471. (a,1)
  472. query TI
  473. SELECT * FROM information_schema._pg_expandarray(ARRAY['a'])
  474. ----
  475. a 1
  476. query T
  477. SELECT information_schema._pg_expandarray(ARRAY['b', 'a']) ORDER BY 1
  478. ----
  479. (a,2)
  480. (b,1)
  481. query TI
  482. SELECT * FROM information_schema._pg_expandarray(ARRAY['b', 'a']) ORDER BY x
  483. ----
  484. a 2
  485. b 1
  486. query T
  487. SELECT information_schema._pg_expandarray(ARRAY['c', 'b', 'a']) ORDER BY 1
  488. ----
  489. (a,3)
  490. (b,2)
  491. (c,1)
  492. query TI
  493. SELECT * FROM information_schema._pg_expandarray(ARRAY['c', 'b', 'a']) ORDER BY x
  494. ----
  495. a 3
  496. b 2
  497. c 1
  498. # Test table and column naming for table functions that return 1 column.
  499. query T colnames
  500. SELECT generate_series.* FROM generate_series(1, 1)
  501. ----
  502. generate_series
  503. 1
  504. query T
  505. SELECT generate_series.generate_series FROM generate_series(1, 1)
  506. ----
  507. 1
  508. query T colnames
  509. SELECT g FROM generate_series(1, 1) AS g
  510. ----
  511. g
  512. 1
  513. query T
  514. SELECT g.g FROM generate_series(1, 1) AS g
  515. ----
  516. 1
  517. query T colnames
  518. SELECT g.* FROM generate_series(1, 1) AS g
  519. ----
  520. g
  521. 1
  522. query T colnames
  523. SELECT g FROM generate_series(1, 1) AS g(a)
  524. ----
  525. g
  526. 1
  527. query T colnames
  528. SELECT g FROM ROWS FROM (generate_series(1, 1)) AS g(a)
  529. ----
  530. g
  531. 1
  532. query T colnames
  533. SELECT jsonb_array_elements FROM ROWS FROM (jsonb_array_elements('[1]'), generate_series(1, 1));
  534. ----
  535. jsonb_array_elements
  536. (1,1)
  537. query T colnames
  538. SELECT jsonb_array_elements.generate_series FROM ROWS FROM (jsonb_array_elements('[1]'), generate_series(1, 1));
  539. ----
  540. generate_series
  541. 1
  542. query T colnames,rowsort
  543. SELECT repeat_row FROM ROWS FROM (repeat_row(2), generate_series(1, 1));
  544. ----
  545. repeat_row
  546. ()
  547. (1)
  548. query T colnames
  549. SELECT g.a FROM generate_series(1, 1) AS g(a)
  550. ----
  551. a
  552. 1
  553. query T colnames
  554. SELECT g.* FROM generate_series(1, 1) AS g(a)
  555. ----
  556. a
  557. 1
  558. statement error column "g.g" does not exist
  559. SELECT g.g FROM generate_series(1, 1) AS g(a)
  560. statement error column "generate_series" does not exist
  561. SELECT generate_series FROM generate_series(1, 1) AS g
  562. statement error column "g.generate_series" does not exist
  563. SELECT g.generate_series FROM generate_series(1, 1) AS g
  564. statement error column "generate_series.g" does not exist
  565. SELECT generate_series.g FROM generate_series(1, 1) AS g
  566. # Test table and column naming for set functions that return more than 1 column.
  567. query T colnames
  568. SELECT g FROM information_schema._pg_expandarray(ARRAY[100]) AS g
  569. ----
  570. g
  571. (100,1)
  572. query TT colnames
  573. SELECT _pg_expandarray.* FROM information_schema._pg_expandarray(ARRAY[100])
  574. ----
  575. x n
  576. 100 1
  577. query T
  578. SELECT _pg_expandarray.x FROM information_schema._pg_expandarray(ARRAY[100])
  579. ----
  580. 100
  581. query T
  582. SELECT g FROM information_schema._pg_expandarray(ARRAY[100]) AS g
  583. ----
  584. (100,1)
  585. query T
  586. SELECT g.x FROM information_schema._pg_expandarray(ARRAY[100]) AS g
  587. ----
  588. 100
  589. query TT
  590. SELECT g.* FROM information_schema._pg_expandarray(ARRAY[100]) AS g
  591. ----
  592. 100 1
  593. query T colnames
  594. SELECT information_schema._pg_expandarray(ARRAY['a']) AS x
  595. ----
  596. x
  597. (a,1)
  598. # Test aliasing table functions and using named columns of the results.
  599. query T rowsort
  600. SELECT jsonb_array_elements.value->>'a' FROM jsonb_array_elements('[{"a":1},{"a":2},{"a":3}]')
  601. ----
  602. 1
  603. 2
  604. 3
  605. query T rowsort
  606. SELECT js.value->>'a' FROM jsonb_array_elements('[{"a":1},{"a":2},{"a":3}]') js
  607. ----
  608. 1
  609. 2
  610. 3
  611. # Test more table/set functions in select projections.
  612. statement ok
  613. CREATE TABLE t (i int)
  614. statement ok
  615. INSERT INTO t VALUES (1), (2)
  616. query II colnames
  617. SELECT t.i, g.g FROM t, LATERAL generate_series(3,4) g(g) ORDER BY i, g
  618. ----
  619. i g
  620. 1 3
  621. 1 4
  622. 2 3
  623. 2 4
  624. # This should be identical to the above.
  625. query II colnames
  626. SELECT t.i, generate_series(3,4) g FROM t ORDER BY i, g
  627. ----
  628. i g
  629. 1 3
  630. 1 4
  631. 2 3
  632. 2 4
  633. query T colnames
  634. SELECT jsonb_each('{"3":4,"1":2}'::JSONB) ORDER BY 1
  635. ----
  636. jsonb_each
  637. (1,2)
  638. (3,4)
  639. query ITT colnames
  640. SELECT 1, jsonb_object_keys('{"1":2,"3":4}'::JSONB), jsonb_object_keys('{"1":2,"3":4,"5":6}'::JSONB) ORDER BY 3
  641. ----
  642. ?column? jsonb_object_keys jsonb_object_keys
  643. 1 1 1
  644. 1 3 3
  645. 1 NULL 5
  646. query T colnames
  647. SELECT jsonb_build_object(jsonb_object_keys('{"a":2, "b":3}'), 1, 'c', 3) ORDER BY 1
  648. ----
  649. jsonb_build_object
  650. {"a":1,"c":3}
  651. {"b":1,"c":3}
  652. query TT
  653. 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
  654. ----
  655. {"a":1,"c":3} {"a":1,"c":3}
  656. {"b":1,"c":3} {"b":1,"c":3}
  657. query error key cannot be null
  658. 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)
  659. query TT rowsort
  660. SELECT jsonb_build_array(jsonb_object_keys('{"a":2, "b":3}')), jsonb_build_array(jsonb_object_keys('{"a":2}'));
  661. ----
  662. ["b"] [null]
  663. ["a"] ["a"]
  664. query error table functions are not allowed in other table functions
  665. SELECT jsonb_array_elements(jsonb_array_elements('[[1,2],[3,4]]')), jsonb_array_elements(jsonb_array_elements('[[1],[3,4,5]]')) ORDER BY 1
  666. query error table functions are not allowed in other table functions
  667. SELECT jsonb_array_elements(jsonb_array_elements('[[1,2],[3,4]]')), jsonb_array_elements('[7,8,9]') ORDER BY 1
  668. # Postgres explicitly disallows table funcs (although it uses "set-returning
  669. # functions") in CASE and COALESCE.
  670. query error table functions are not allowed in CASE
  671. SELECT i, CASE WHEN i > 0 THEN generate_series(1, 5) ELSE 0 END FROM t
  672. query error table functions are not allowed in COALESCE
  673. SELECT COALESCE(1, generate_series(1, 1))
  674. query error table functions are not allowed in aggregate function calls
  675. SELECT array_agg(generate_series(1, 2))
  676. # Subqueries avoid the CASE errors.
  677. query I
  678. SELECT COALESCE(1, (SELECT generate_series(1, 1)))
  679. ----
  680. 1
  681. query error table functions are not allowed in WHERE clause
  682. SELECT 1 WHERE generate_series(1, 1)
  683. # timestamp-based generate series
  684. query T
  685. SELECT * FROM generate_series('2021-01-01 00:00:00'::TIMESTAMP, '2021-01-01 02:00:00'::TIMESTAMP, '1 hour') ORDER BY 1
  686. ----
  687. 2021-01-01 00:00:00
  688. 2021-01-01 01:00:00
  689. 2021-01-01 02:00:00
  690. query T
  691. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-01 00:00:00'::TIMESTAMP, '-1 hour') ORDER BY 1
  692. ----
  693. 2021-01-01 00:00:00
  694. 2021-01-01 01:00:00
  695. 2021-01-01 02:00:00
  696. 2021-01-01 03:00:00
  697. query T
  698. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '1 day') ORDER BY 1
  699. ----
  700. 2021-01-01 03:00:00
  701. 2021-01-02 03:00:00
  702. query T
  703. SELECT * FROM generate_series('2021-01-03 00:00:00'::TIMESTAMP, '2021-01-01 03:00:00'::TIMESTAMP, '1 day') ORDER BY 1
  704. ----
  705. query T
  706. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '-1 day') ORDER BY 1
  707. ----
  708. query T
  709. SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMP, '2022-01-31 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
  710. ----
  711. 2021-01-31 03:00:00
  712. 2021-02-28 03:00:00
  713. 2021-03-28 03:00:00
  714. 2021-04-28 03:00:00
  715. 2021-05-28 03:00:00
  716. 2021-06-28 03:00:00
  717. 2021-07-28 03:00:00
  718. 2021-08-28 03:00:00
  719. 2021-09-28 03:00:00
  720. 2021-10-28 03:00:00
  721. 2021-11-28 03:00:00
  722. 2021-12-28 03:00:00
  723. 2022-01-28 03:00:00
  724. query T
  725. SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMP, '2021-04-30 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
  726. ----
  727. 2021-01-31 03:00:00
  728. 2021-02-28 03:00:00
  729. 2021-03-28 03:00:00
  730. 2021-04-28 03:00:00
  731. # Leap years
  732. query T
  733. SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMP, '2020-04-30 00:00:00'::TIMESTAMP, '1 month') ORDER BY 1
  734. ----
  735. 2020-01-31 03:00:00
  736. 2020-02-29 03:00:00
  737. 2020-03-29 03:00:00
  738. 2020-04-29 03:00:00
  739. query T
  740. SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMP, '2020-11-30 00:00:00'::TIMESTAMP, '2 month') ORDER BY 1
  741. ----
  742. 2020-01-31 03:00:00
  743. 2020-03-31 03:00:00
  744. 2020-05-31 03:00:00
  745. 2020-07-31 03:00:00
  746. 2020-09-30 03:00:00
  747. query T
  748. 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
  749. ----
  750. 2020-01-01 22:00:00
  751. 2020-02-02 23:00:00
  752. 2020-03-04 00:00:00
  753. 2020-04-05 01:00:00
  754. 2020-05-06 02:00:00
  755. 2020-06-07 03:00:00
  756. 2020-07-08 04:00:00
  757. 2020-08-09 05:00:00
  758. 2020-09-10 06:00:00
  759. 2020-10-11 07:00:00
  760. 2020-11-12 08:00:00
  761. 2020-12-13 09:00:00
  762. query error step size cannot equal zero
  763. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMP, '2021-01-03 00:00:00'::TIMESTAMP, '0 day');
  764. # timestamptz-based generate series
  765. query T
  766. SELECT * FROM generate_series('2021-01-01 00:00:00'::TIMESTAMPTZ, '2021-01-01 02:00:00'::TIMESTAMPTZ, '1 hour') ORDER BY 1
  767. ----
  768. 2021-01-01 00:00:00+00
  769. 2021-01-01 01:00:00+00
  770. 2021-01-01 02:00:00+00
  771. query T
  772. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-01 00:00:00'::TIMESTAMPTZ, '-1 hour') ORDER BY 1
  773. ----
  774. 2021-01-01 00:00:00+00
  775. 2021-01-01 01:00:00+00
  776. 2021-01-01 02:00:00+00
  777. 2021-01-01 03:00:00+00
  778. query T
  779. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '1 day') ORDER BY 1
  780. ----
  781. 2021-01-01 03:00:00+00
  782. 2021-01-02 03:00:00+00
  783. query T
  784. SELECT * FROM generate_series('2021-01-03 00:00:00'::TIMESTAMPTZ, '2021-01-01 03:00:00'::TIMESTAMPTZ, '1 day') ORDER BY 1
  785. ----
  786. query T
  787. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '-1 day') ORDER BY 1
  788. ----
  789. query T
  790. SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMPTZ, '2022-01-31 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
  791. ----
  792. 2021-01-31 03:00:00+00
  793. 2021-02-28 03:00:00+00
  794. 2021-03-28 03:00:00+00
  795. 2021-04-28 03:00:00+00
  796. 2021-05-28 03:00:00+00
  797. 2021-06-28 03:00:00+00
  798. 2021-07-28 03:00:00+00
  799. 2021-08-28 03:00:00+00
  800. 2021-09-28 03:00:00+00
  801. 2021-10-28 03:00:00+00
  802. 2021-11-28 03:00:00+00
  803. 2021-12-28 03:00:00+00
  804. 2022-01-28 03:00:00+00
  805. query T
  806. SELECT * FROM generate_series('2021-01-31 03:00:00'::TIMESTAMPTZ, '2021-04-30 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
  807. ----
  808. 2021-01-31 03:00:00+00
  809. 2021-02-28 03:00:00+00
  810. 2021-03-28 03:00:00+00
  811. 2021-04-28 03:00:00+00
  812. # Leap years
  813. query T
  814. SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMPTZ, '2020-04-30 00:00:00'::TIMESTAMPTZ, '1 month') ORDER BY 1
  815. ----
  816. 2020-01-31 03:00:00+00
  817. 2020-02-29 03:00:00+00
  818. 2020-03-29 03:00:00+00
  819. 2020-04-29 03:00:00+00
  820. query T
  821. SELECT * FROM generate_series('2020-01-31 03:00:00'::TIMESTAMPTZ, '2020-11-30 00:00:00'::TIMESTAMPTZ, '2 month') ORDER BY 1
  822. ----
  823. 2020-01-31 03:00:00+00
  824. 2020-03-31 03:00:00+00
  825. 2020-05-31 03:00:00+00
  826. 2020-07-31 03:00:00+00
  827. 2020-09-30 03:00:00+00
  828. query T
  829. 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
  830. ----
  831. 2020-01-01 22:00:00+00
  832. 2020-02-02 23:00:00+00
  833. 2020-03-04 00:00:00+00
  834. 2020-04-05 01:00:00+00
  835. 2020-05-06 02:00:00+00
  836. 2020-06-07 03:00:00+00
  837. 2020-07-08 04:00:00+00
  838. 2020-08-09 05:00:00+00
  839. 2020-09-10 06:00:00+00
  840. 2020-10-11 07:00:00+00
  841. 2020-11-12 08:00:00+00
  842. 2020-12-13 09:00:00+00
  843. query error step size cannot equal zero
  844. SELECT * FROM generate_series('2021-01-01 03:00:00'::TIMESTAMPTZ, '2021-01-03 00:00:00'::TIMESTAMPTZ, '0 day');
  845. query error step size cannot equal zero
  846. 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;
  847. query error step size cannot equal zero
  848. 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;
  849. query T
  850. 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;
  851. ----
  852. 2021-01-01 03:00:00
  853. 2021-01-01 15:00:00
  854. 2021-01-02 03:00:00
  855. 2021-01-02 15:00:00
  856. 2021-01-03 03:00:00
  857. 2021-01-03 15:00:00
  858. 2021-01-04 03:00:00
  859. 2021-01-04 15:00:00
  860. query T
  861. 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;
  862. ----
  863. 2021-01-01 03:00:00
  864. 2021-01-17 03:00:00
  865. # Test ROWS FROM
  866. query I colnames
  867. SELECT * FROM LATERAL ROWS FROM (generate_series(1,1));
  868. ----
  869. generate_series
  870. 1
  871. query II colnames
  872. SELECT * FROM LATERAL ROWS FROM (generate_series(1, 2), generate_series(3, 6)) ORDER BY 2;
  873. ----
  874. generate_series generate_series
  875. 1 3
  876. 2 4
  877. NULL 5
  878. NULL 6
  879. query III colnames
  880. SELECT * FROM LATERAL ROWS FROM (generate_series(1, 2), generate_series(3, 6)) WITH ORDINALITY ORDER BY 3;
  881. ----
  882. generate_series generate_series ordinality
  883. 1 3 1
  884. 2 4 2
  885. NULL 5 3
  886. NULL 6 4
  887. query IIII colnames
  888. SELECT * FROM ROWS FROM (generate_series(1, 3), generate_series(1, 6), generate_series(1, 9), generate_series(1, 12)) ORDER BY 4;
  889. ----
  890. generate_series generate_series generate_series generate_series
  891. 1 1 1 1
  892. 2 2 2 2
  893. 3 3 3 3
  894. NULL 4 4 4
  895. NULL 5 5 5
  896. NULL 6 6 6
  897. NULL NULL 7 7
  898. NULL NULL 8 8
  899. NULL NULL 9 9
  900. NULL NULL NULL 10
  901. NULL NULL NULL 11
  902. NULL NULL NULL 12
  903. query IIII colnames
  904. SELECT * FROM ROWS FROM (generate_series(1, 2), information_schema._pg_expandarray(array[9]), generate_series(3, 6)) ORDER BY 4;
  905. ----
  906. generate_series x n generate_series
  907. 1 9 1 3
  908. 2 NULL NULL 4
  909. NULL NULL NULL 5
  910. NULL NULL NULL 6
  911. query I colnames
  912. SELECT generate_series FROM ROWS FROM (generate_series(1, 1))
  913. ----
  914. generate_series
  915. 1
  916. query error column reference "generate_series" is ambiguous
  917. SELECT generate_series FROM ROWS FROM (generate_series(1, 1), generate_series(2, 2))
  918. query I colnames
  919. SELECT generate_series FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
  920. ----
  921. generate_series
  922. 1
  923. query error column "_pg_expandarray" does not exist
  924. SELECT _pg_expandarray FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
  925. query I
  926. SELECT generate_series.x FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
  927. ----
  928. 9
  929. query I colnames
  930. SELECT x FROM ROWS FROM (generate_series(1, 1), information_schema._pg_expandarray(array[9]))
  931. ----
  932. x
  933. 9
  934. # Convert to text because sqllogictest doesn't know how to format records.
  935. query T colnames
  936. SELECT _pg_expandarray::text FROM ROWS FROM (information_schema._pg_expandarray(array[9]))
  937. ----
  938. _pg_expandarray
  939. (9,1)
  940. query II colnames
  941. SELECT _pg_expandarray.* FROM ROWS FROM (information_schema._pg_expandarray(array[9]))
  942. ----
  943. x n
  944. 9 1
  945. # ROWS FROM with aliases
  946. query error Expected right parenthesis
  947. SELECT * FROM LATERAL ROWS FROM (generate_series(1,1) AS g)
  948. query I colnames
  949. SELECT * FROM LATERAL ROWS FROM (generate_series(1,1)) AS g
  950. ----
  951. g
  952. 1
  953. query I colnames
  954. SELECT g.g FROM LATERAL ROWS FROM (generate_series(1,1)) AS g
  955. ----
  956. g
  957. 1
  958. query I colnames
  959. SELECT g.g FROM LATERAL ROWS FROM (generate_series(1,1)) AS g(g)
  960. ----
  961. g
  962. 1
  963. query II colnames
  964. SELECT * FROM LATERAL ROWS FROM (generate_series(1,1), generate_series(1,1)) AS g
  965. ----
  966. generate_series generate_series
  967. 1 1
  968. query II colnames
  969. SELECT g.* FROM LATERAL ROWS FROM (generate_series(1,1), generate_series(1,1)) AS g
  970. ----
  971. generate_series generate_series
  972. 1 1
  973. query III colnames
  974. SELECT g.* FROM LATERAL ROWS FROM (generate_series(1,1), information_schema._pg_expandarray(array[1])) AS g
  975. ----
  976. generate_series x n
  977. 1 1 1
  978. query III colnames
  979. SELECT * FROM LATERAL ROWS FROM (generate_series(1,1), information_schema._pg_expandarray(array[1])) AS g(a,b,c)
  980. ----
  981. a b c
  982. 1 1 1
  983. # Multiple table funcs in SELECT projection.
  984. query II colnames rowsort
  985. SELECT generate_series(1,2) x, generate_series(1,2) ORDER BY 1
  986. ----
  987. x generate_series
  988. 1 1
  989. 2 2
  990. query II colnames rowsort
  991. SELECT generate_series(1,2), generate_series(1,2) y ORDER BY 1
  992. ----
  993. generate_series y
  994. 1 1
  995. 2 2
  996. query II colnames rowsort
  997. SELECT generate_series(1,2) x, generate_series(1,2) y ORDER BY 1
  998. ----
  999. x y
  1000. 1 1
  1001. 2 2
  1002. query II
  1003. SELECT generate_series(1, 1), generate_series(2, 2)
  1004. ----
  1005. 1 2
  1006. query IT colnames
  1007. SELECT (information_schema._pg_expandarray(array[10])).x, information_schema._pg_expandarray(array[10])
  1008. ----
  1009. x _pg_expandarray
  1010. 10 (10,1)
  1011. query IIITITT colnames
  1012. SELECT
  1013. (information_schema._pg_expandarray(ARRAY[100])).*,
  1014. (information_schema._pg_expandarray(ARRAY[100])).x,
  1015. information_schema._pg_expandarray(ARRAY[100])::text,
  1016. generate_series(1, 2),
  1017. jsonb_array_elements('[3]'),
  1018. jsonb_array_elements('[4,5]')
  1019. ORDER BY generate_series
  1020. ----
  1021. x n x _pg_expandarray generate_series jsonb_array_elements jsonb_array_elements
  1022. 100 1 100 (100,1) 1 3 4
  1023. NULL NULL NULL NULL 2 NULL 5
  1024. query error column reference "generate_series" is ambiguous
  1025. SELECT
  1026. generate_series(1, 2),
  1027. generate_series(1, 3)
  1028. ORDER BY generate_series
  1029. # Duplicate, identical table functions are not ambiguous.
  1030. query II
  1031. SELECT
  1032. generate_series(1, 2),
  1033. generate_series(1, 2)
  1034. ORDER BY generate_series
  1035. ----
  1036. 1 1
  1037. 2 2
  1038. query IIIT colnames,rowsort
  1039. SELECT generate_series(1, 2), (information_schema._pg_expandarray(ARRAY[100])).*, jsonb_array_elements('[3]')::text ORDER BY 1
  1040. ----
  1041. generate_series x n jsonb_array_elements
  1042. 1 100 1 3
  1043. 2 NULL NULL NULL
  1044. query ITI colnames,rowsort
  1045. SELECT generate_series(1, 2), information_schema._pg_expandarray(ARRAY[100])::text, generate_series(1, 3) ORDER BY 3
  1046. ----
  1047. generate_series _pg_expandarray generate_series
  1048. 1 (100,1) 1
  1049. 2 NULL 2
  1050. NULL NULL 3
  1051. # Some error cases
  1052. query error table functions are not allowed in WHERE clause
  1053. SELECT 1 FROM t WHERE generate_series(1, 1) = 1
  1054. # TODO: This error should complain about the DISTINCT.
  1055. query error table functions are not allowed in SELECT clause
  1056. SELECT generate_series(DISTINCT 1, 1)
  1057. # Subqueries avoid the uniqueness check.
  1058. query II
  1059. SELECT generate_series(1, 1), (SELECT generate_series(2, 2))
  1060. ----
  1061. 1 2
  1062. query error type integer is not composite
  1063. SELECT (generate_series(1, 1)).*
  1064. query error not a composite type
  1065. SELECT (generate_series(1, 1)).generate_series
  1066. # GENERATE_SUBSCRIPTS
  1067. query I
  1068. SELECT generate_subscripts('{1,2,3,4}'::int[], 1) AS s;
  1069. ----
  1070. 1
  1071. 2
  1072. 3
  1073. 4
  1074. query I
  1075. SELECT generate_subscripts('{1,NULL,3,NULL}'::int[], 1) AS s;
  1076. ----
  1077. 1
  1078. 2
  1079. 3
  1080. 4
  1081. query I
  1082. SELECT generate_subscripts('{1,2,3,4}'::TEXT[], 1) AS s;
  1083. ----
  1084. 1
  1085. 2
  1086. 3
  1087. 4
  1088. query I
  1089. SELECT generate_subscripts('{1,2,3,4}'::int[], 0) AS s;
  1090. ----
  1091. query I
  1092. SELECT generate_subscripts('{1,2,3,4}'::int[], -1) AS s;
  1093. ----
  1094. query I
  1095. SELECT generate_subscripts('{1,2,3,4}'::int[], 2) AS s;
  1096. ----
  1097. query I
  1098. SELECT generate_subscripts('{1,2,3,4}'::int[], 12345) AS s;
  1099. ----
  1100. query T
  1101. SELECT generate_subscripts('{{1,2,3,4}, {5,6,7,8}}'::int[], 1) AS s;
  1102. ----
  1103. 1
  1104. 2
  1105. query T
  1106. SELECT generate_subscripts('{{1,2,3,4}, {5,6,7,8}}'::int[], 2) AS s;
  1107. ----
  1108. 1
  1109. 2
  1110. 3
  1111. 4
  1112. query error table functions are not allowed in other table functions
  1113. SELECT generate_subscripts('{1,2,3,4}'::int[], 1), repeat_row(generate_series(1, 1)) AS s
  1114. # test lower bound, this should return indices 2,3,4
  1115. # but currently we dont support this syntax
  1116. query error invalid input syntax for type array
  1117. SELECT generate_subscripts('[2:4]={1,2,3,4}'::int[], 1) AS s;
  1118. query I
  1119. select generate_subscripts(ARRAY[ARRAY[1,2,3], ARRAY[4,5,6]], 1);
  1120. ----
  1121. 1
  1122. 2
  1123. query I
  1124. select generate_subscripts(ARRAY[ARRAY[1,2,3], ARRAY[4,5,6]], 2);
  1125. ----
  1126. 1
  1127. 2
  1128. 3
  1129. query error could not determine polymorphic type because input has type unknown
  1130. SELECT generate_subscripts(NULL, 1)
  1131. # Regression test for database-issues#2939: LATERAL column references in ROWS FROM
  1132. query III
  1133. 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;
  1134. ----
  1135. 1 1 1
  1136. 1 2 2
  1137. 1 3 NULL
  1138. 2 2 2
  1139. 2 3 3
  1140. 2 4 NULL
  1141. 3 3 3
  1142. 3 4 4
  1143. 3 5 NULL
  1144. query IIII
  1145. 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;
  1146. ----
  1147. 1 1 1 1
  1148. 1 2 2 NULL
  1149. 1 3 NULL NULL
  1150. 2 2 2 2
  1151. 2 3 3 NULL
  1152. 2 4 NULL NULL
  1153. 3 3 3 3
  1154. 3 4 4 NULL
  1155. 3 5 NULL NULL
  1156. # Regression test for database-issues#2941
  1157. statement ok
  1158. create view bar as select * from y, rows from (generate_series(1, 2), jsonb_array_elements(y.a));
  1159. # Regression for database-issues#3078
  1160. query IT
  1161. WITH a(x) AS (SELECT 'a') SELECT generate_series(1, 2), * FROM a ORDER BY generate_series
  1162. ----
  1163. 1 a
  1164. 2 a
  1165. # Test optimization for single table function in scalar position
  1166. # Plan should be just a simple FlatMap + Project
  1167. # Regression test for database-issues#3173
  1168. query T multiline
  1169. EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR SELECT jsonb_object_keys(a) FROM y;
  1170. ----
  1171. Explained Query:
  1172. Project (#1) // { arity: 1 }
  1173. FlatMap jsonb_object_keys(#0{a}) // { arity: 2 }
  1174. ReadStorage materialize.public.y // { arity: 1 }
  1175. Source materialize.public.y
  1176. Target cluster: quickstart
  1177. EOF
  1178. # Test that table functions should produce deterministic plans
  1179. query T multiline
  1180. EXPLAIN RAW PLAN FOR SELECT jsonb_object_keys('{"1":2}'::JSONB), jsonb_object_keys('{"1":2}'::JSONB);
  1181. ----
  1182. Project (#0, #0)
  1183. CallTable jsonb_object_keys(text_to_jsonb("{\"1\":2}"))
  1184. Target cluster: quickstart
  1185. EOF
  1186. query T multiline
  1187. EXPLAIN RAW PLAN FOR SELECT jsonb_object_keys('{"1":2}'::JSONB), jsonb_object_keys('{"3":4}'::JSONB);
  1188. ----
  1189. Project (#5, #6)
  1190. 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)
  1191. Project (#0, #1, #3..=#5)
  1192. Map (coalesce(#2, #4))
  1193. FullOuterJoin (#2 = #4)
  1194. Map (row_number() over (order by []), #1)
  1195. CallTable jsonb_object_keys(text_to_jsonb("{\"1\":2}"))
  1196. Map (row_number() over (order by []))
  1197. CallTable jsonb_object_keys(text_to_jsonb("{\"3\":4}"))
  1198. Target cluster: quickstart
  1199. EOF
  1200. # Disallowed table function behaviour
  1201. query I
  1202. SELECT generate_series FROM generate_series(1, 3) WHERE (generate_series < 3);
  1203. ----
  1204. 1
  1205. 2
  1206. query error Expected right parenthesis, found BY
  1207. SELECT generate_series FROM generate_series(1, 3) OVER (ORDER BY generate_series);
  1208. query error Expected right parenthesis, found number "1"
  1209. SELECT generate_series FROM generate_series(DISTINCT 1, 3);
  1210. # Regression for https://github.com/MaterializeInc/database-issues/issues/6180
  1211. query error db error: ERROR: regexp_extract must specify at least one capture group
  1212. select regexp_extract('aaa', 'a')