decorrelated_plan_as_text.slt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  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. statement ok
  10. CREATE TABLE t (
  11. a int,
  12. b int
  13. )
  14. statement ok
  15. CREATE VIEW ov AS SELECT * FROM t ORDER BY b asc, a desc LIMIT 5
  16. statement ok
  17. CREATE VIEW v AS
  18. SELECT * FROM t WHERE a IS NOT NULL
  19. statement ok
  20. CREATE INDEX v_a_idx ON v(a)
  21. statement ok
  22. CREATE MATERIALIZED VIEW mv AS
  23. SELECT * FROM t WHERE a IS NOT NULL
  24. mode cockroach
  25. # EXPLAIN INDEX is not supported for decorrelated plans
  26. statement error cannot EXPLAIN DECORRELATED PLAN FOR INDEX
  27. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  28. INDEX v_a_idx
  29. # EXPLAIN CREATE INDEX is not supported for decorrelated plans
  30. statement error cannot EXPLAIN DECORRELATED PLAN FOR CREATE INDEX
  31. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  32. CREATE INDEX v_a_idx ON v(a)
  33. # Test constant error.
  34. query T multiline
  35. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  36. SELECT 1 / 0
  37. ----
  38. Project (#0)
  39. Map ((1 / 0))
  40. Constant
  41. - ()
  42. Target cluster: quickstart
  43. EOF
  44. # Test constant with two elements.
  45. query T multiline
  46. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  47. (SELECT 1, 2) UNION ALL (SELECT 1, 2) UNION ALL (SELECT 3, 4)
  48. ----
  49. Union
  50. Project (#0, #1)
  51. Map (1, 2)
  52. Constant
  53. - ()
  54. Project (#0, #1)
  55. Map (1, 2)
  56. Constant
  57. - ()
  58. Project (#0, #1)
  59. Map (3, 4)
  60. Constant
  61. - ()
  62. Target cluster: mz_catalog_server
  63. EOF
  64. # Test basic linear chains.
  65. query T multiline
  66. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  67. SELECT 1, a + b as c FROM mv WHERE a > 0 and b < 0 and a + b > 0
  68. ----
  69. Project (#2, #3)
  70. Map (1, (#0{a} + #1{b}))
  71. Filter (((#0{a} > 0) AND (#1{b} < 0)) AND ((#0{a} + #1{b}) > 0))
  72. CrossJoin
  73. Constant
  74. - ()
  75. Get materialize.public.mv
  76. Target cluster: quickstart
  77. EOF
  78. # Test table functions in the select clause (FlatMap).
  79. query T multiline
  80. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  81. SELECT generate_series(a, b) from t
  82. ----
  83. Project (#2)
  84. FlatMap generate_series(#0{a}, #1{b}, 1)
  85. CrossJoin
  86. Constant
  87. - ()
  88. Get materialize.public.t
  89. Target cluster: quickstart
  90. EOF
  91. # Test Threshold, Union, Distinct, Negate.
  92. query T multiline
  93. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  94. SELECT a FROM t EXCEPT SELECT b FROM mv
  95. ----
  96. Threshold
  97. Union
  98. Distinct project=[#0]
  99. Project (#0)
  100. CrossJoin
  101. Constant
  102. - ()
  103. Get materialize.public.t
  104. Negate
  105. Distinct project=[#0]
  106. Project (#1)
  107. CrossJoin
  108. Constant
  109. - ()
  110. Get materialize.public.mv
  111. Target cluster: quickstart
  112. EOF
  113. # Test Threshold, Union, Distinct, Negate.
  114. query T multiline
  115. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  116. SELECT a FROM t EXCEPT ALL SELECT b FROM mv
  117. ----
  118. Threshold
  119. Union
  120. Project (#0)
  121. CrossJoin
  122. Constant
  123. - ()
  124. Get materialize.public.t
  125. Negate
  126. Project (#1)
  127. CrossJoin
  128. Constant
  129. - ()
  130. Get materialize.public.mv
  131. Target cluster: quickstart
  132. EOF
  133. # Test Finish.
  134. query T multiline
  135. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  136. SELECT * FROM t ORDER BY b asc, a desc LIMIT 5
  137. ----
  138. Finish order_by=[#1 asc nulls_last, #0 desc nulls_first] limit=5 output=[#0, #1]
  139. CrossJoin
  140. Constant
  141. - ()
  142. Get materialize.public.t
  143. Target cluster: quickstart
  144. EOF
  145. # Test Reduce (global).
  146. query T multiline
  147. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  148. SELECT abs(min(a) - max(a)) FROM t
  149. ----
  150. With
  151. cte l0 =
  152. Reduce aggregates=[min(#0{a}), max(#0{a})]
  153. CrossJoin
  154. Constant
  155. - ()
  156. Get materialize.public.t
  157. Return
  158. Project (#2)
  159. Map (abs((#0{"?column?"} - #1{"?column?"})))
  160. Union
  161. Get l0
  162. CrossJoin
  163. Project ()
  164. CrossJoin
  165. Union
  166. Negate
  167. Distinct project=[]
  168. Get l0
  169. Distinct project=[]
  170. Constant
  171. - ()
  172. Constant
  173. - ()
  174. Constant
  175. - (null, null)
  176. Target cluster: quickstart
  177. EOF
  178. # Test Reduce (local).
  179. query T multiline
  180. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  181. SELECT abs(min(a) - max(a)) FROM t GROUP BY b
  182. ----
  183. Project (#3)
  184. Map (abs((#1{"?column?"} - #2{"?column?"})))
  185. Reduce group_by=[#2] aggregates=[min(#0{a}), max(#0{a})]
  186. Project (#0..=#2)
  187. Map (#1{b})
  188. CrossJoin
  189. Constant
  190. - ()
  191. Get materialize.public.t
  192. Target cluster: quickstart
  193. EOF
  194. # Test EXISTS subqueries.
  195. query T multiline
  196. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  197. SELECT * FROM t WHERE EXISTS(SELECT * FROM mv WHERE t.a < mv.a) AND EXISTS(SELECT * FROM mv WHERE t.b > mv.b)
  198. ----
  199. With
  200. cte l0 =
  201. Filter (true AND true)
  202. CrossJoin
  203. Constant
  204. - ()
  205. Get materialize.public.t
  206. cte l1 =
  207. Distinct project=[#0]
  208. Get l0
  209. cte l2 =
  210. Map (true)
  211. Distinct project=[#0]
  212. Filter (#0{a} < #1{a})
  213. CrossJoin
  214. Get l1
  215. Get materialize.public.mv
  216. cte l3 =
  217. Project (#0, #1)
  218. Filter #2
  219. Project (#0, #1, #3)
  220. Join on=(#0 = #2)
  221. Get l0
  222. Union
  223. Get l2
  224. CrossJoin
  225. Project (#0)
  226. Join on=(#0 = #1)
  227. Union
  228. Negate
  229. Distinct project=[#0]
  230. Get l2
  231. Distinct project=[#0]
  232. Get l1
  233. Get l1
  234. Constant
  235. - (false)
  236. cte l4 =
  237. Distinct project=[#1]
  238. Get l3
  239. cte l5 =
  240. Map (true)
  241. Distinct project=[#0]
  242. Filter (#0{b} > #2{b})
  243. CrossJoin
  244. Get l4
  245. Get materialize.public.mv
  246. Return
  247. Project (#0, #1)
  248. Filter #2
  249. Project (#0, #1, #3)
  250. Join on=(#1 = #2)
  251. Get l3
  252. Union
  253. Get l5
  254. CrossJoin
  255. Project (#0)
  256. Join on=(#0 = #1)
  257. Union
  258. Negate
  259. Distinct project=[#0]
  260. Get l5
  261. Distinct project=[#0]
  262. Get l4
  263. Get l4
  264. Constant
  265. - (false)
  266. Target cluster: quickstart
  267. EOF
  268. # Test SELECT subqueries.
  269. query T multiline
  270. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  271. SELECT (SELECT v.a FROM v WHERE v.b = t.b LIMIT 1), (SELECT mv.a FROM mv WHERE mv.b = t.b LIMIT 1) FROM t
  272. ----
  273. With
  274. cte l0 =
  275. CrossJoin
  276. Constant
  277. - ()
  278. Get materialize.public.t
  279. cte l1 =
  280. Distinct project=[#0, #1]
  281. Get l0
  282. cte l2 =
  283. Distinct project=[#1]
  284. Get l1
  285. cte l3 =
  286. Project (#0, #1)
  287. TopK group_by=[#0] limit=1
  288. Filter (#2{b} = #0{b})
  289. CrossJoin
  290. Get l2
  291. Get materialize.public.v
  292. cte l4 =
  293. Union
  294. Get l3
  295. Project (#0, #2)
  296. FlatMap guard_subquery_size(#1)
  297. Reduce group_by=[#0] aggregates=[count(*)]
  298. Get l3
  299. cte l5 =
  300. Distinct project=[#0, #1]
  301. Get l0
  302. cte l6 =
  303. Distinct project=[#1]
  304. Get l5
  305. cte l7 =
  306. Project (#0, #1)
  307. TopK group_by=[#0] limit=1
  308. Filter (#2{b} = #0{b})
  309. CrossJoin
  310. Get l6
  311. Get materialize.public.mv
  312. cte l8 =
  313. Union
  314. Get l7
  315. Project (#0, #2)
  316. FlatMap guard_subquery_size(#1)
  317. Reduce group_by=[#0] aggregates=[count(*)]
  318. Get l7
  319. Return
  320. Project (#8, #9)
  321. Map (#4, #7)
  322. Join on=(#0 = #2 = #5 AND #1 = #3 = #6)
  323. Get l0
  324. Project (#0, #1, #3)
  325. Join on=(#1 = #2)
  326. Get l1
  327. Union
  328. Get l4
  329. CrossJoin
  330. Project (#0)
  331. Join on=(#0 = #1)
  332. Union
  333. Negate
  334. Distinct project=[#0]
  335. Get l4
  336. Distinct project=[#0]
  337. Get l2
  338. Get l2
  339. Constant
  340. - (null)
  341. Project (#0, #1, #3)
  342. Join on=(#1 = #2)
  343. Get l5
  344. Union
  345. Get l8
  346. CrossJoin
  347. Project (#0)
  348. Join on=(#0 = #1)
  349. Union
  350. Negate
  351. Distinct project=[#0]
  352. Get l8
  353. Distinct project=[#0]
  354. Get l6
  355. Get l6
  356. Constant
  357. - (null)
  358. Target cluster: quickstart
  359. EOF
  360. # Test CrossJoin derived from a comma join without a predicate.
  361. query T multiline
  362. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  363. SELECT t1.a, t2.a FROM t as t1, t as t2
  364. ----
  365. Project (#0, #2)
  366. Project (#0..=#3)
  367. CrossJoin
  368. CrossJoin
  369. Constant
  370. - ()
  371. Get materialize.public.t
  372. CrossJoin
  373. Constant
  374. - ()
  375. Get materialize.public.t
  376. Target cluster: quickstart
  377. EOF
  378. # Test CrossJoin derived from an INNER JOIN with a trivial ON clause.
  379. query T multiline
  380. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  381. SELECT t1.a, t2.a FROM t as t1 INNER JOIN t as t2 ON true
  382. ----
  383. Project (#0, #2)
  384. Project (#0..=#3)
  385. CrossJoin
  386. CrossJoin
  387. Constant
  388. - ()
  389. Get materialize.public.t
  390. CrossJoin
  391. Constant
  392. - ()
  393. Get materialize.public.t
  394. Target cluster: quickstart
  395. EOF
  396. # Test InnerJoin (comma syntax).
  397. query T multiline
  398. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  399. SELECT t1.a, t2.a
  400. FROM
  401. t as t1,
  402. t as t2,
  403. t as t3
  404. WHERE t1.b = t2.b AND t2.b = t3.b
  405. ----
  406. Project (#0, #2)
  407. Filter ((#1{b} = #3{b}) AND (#3{b} = #5{b}))
  408. Project (#0..=#5)
  409. CrossJoin
  410. Project (#0..=#3)
  411. CrossJoin
  412. CrossJoin
  413. Constant
  414. - ()
  415. Get materialize.public.t
  416. CrossJoin
  417. Constant
  418. - ()
  419. Get materialize.public.t
  420. CrossJoin
  421. Constant
  422. - ()
  423. Get materialize.public.t
  424. Target cluster: quickstart
  425. EOF
  426. # Test InnerJoin (ON syntax).
  427. query T multiline
  428. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  429. SELECT t1.a, t2.a
  430. FROM t as t1
  431. INNER JOIN t as t2 ON t1.b = t2.b
  432. INNER JOIN t as t3 ON t2.b = t3.b
  433. ----
  434. Project (#0, #2)
  435. Filter (#3{b} = #5{b})
  436. Project (#0..=#5)
  437. CrossJoin
  438. Filter (#1{b} = #3{b})
  439. Project (#0..=#3)
  440. CrossJoin
  441. CrossJoin
  442. Constant
  443. - ()
  444. Get materialize.public.t
  445. CrossJoin
  446. Constant
  447. - ()
  448. Get materialize.public.t
  449. CrossJoin
  450. Constant
  451. - ()
  452. Get materialize.public.t
  453. Target cluster: quickstart
  454. EOF
  455. # Test LEFT JOIN and RIGHT JOIN.
  456. query T multiline
  457. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  458. SELECT t1.a, t2.a
  459. FROM t as t1
  460. LEFT JOIN t as t2 ON t1.b = t2.b
  461. RIGHT JOIN t as t3 ON t2.b = t3.b
  462. ----
  463. With
  464. cte l0 =
  465. CrossJoin
  466. Constant
  467. - ()
  468. Get materialize.public.t
  469. cte l1 =
  470. Filter (#1{b} = #3{b})
  471. Project (#0..=#3)
  472. CrossJoin
  473. Get l0
  474. CrossJoin
  475. Constant
  476. - ()
  477. Get materialize.public.t
  478. cte l2 =
  479. CrossJoin
  480. Constant
  481. - ()
  482. Get materialize.public.t
  483. cte l3 =
  484. Filter (#3{b} = #5{b})
  485. Project (#0..=#5)
  486. CrossJoin
  487. Union
  488. Map (null, null)
  489. Union
  490. Negate
  491. Project (#0, #1)
  492. Join on=(#1{b} = #2)
  493. Filter (#1{b}) IS NOT NULL
  494. Get l0
  495. Distinct project=[#0]
  496. Project (#1)
  497. Get l1
  498. Get l0
  499. Get l1
  500. Get l2
  501. Return
  502. Project (#0, #2)
  503. Union
  504. Project (#2..=#5, #0, #1)
  505. Map (null, null, null, null)
  506. Union
  507. Negate
  508. Project (#0, #1)
  509. Join on=(#1{b} = #2)
  510. Filter (#1{b}) IS NOT NULL
  511. Get l2
  512. Distinct project=[#0]
  513. Project (#3)
  514. Get l3
  515. Get l2
  516. Get l3
  517. Target cluster: quickstart
  518. EOF
  519. # Test a single CTE.
  520. query T multiline
  521. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  522. WITH x AS (SELECT t.a * t.b as v from t) SELECT a.v + b.v FROM x as a, x as b
  523. ----
  524. With
  525. cte l0 =
  526. Project (#2)
  527. Map ((#0{a} * #1{b}))
  528. CrossJoin
  529. Constant
  530. - ()
  531. Get materialize.public.t
  532. Return
  533. Project (#2)
  534. Project (#0..=#2)
  535. Map ((#0{v} + #1{v}))
  536. Project (#0, #1)
  537. CrossJoin
  538. Get l0
  539. Get l0
  540. Target cluster: quickstart
  541. EOF
  542. # Test multiple CTEs: a case where we cannot pull the let statement up through
  543. # the join because the local l0 is correlated against the lhs of the enclosing join.
  544. query T multiline
  545. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  546. SELECT
  547. *
  548. FROM
  549. (
  550. SELECT * FROM t
  551. ) as r1
  552. CROSS JOIN LATERAL (
  553. WITH r2 as (
  554. SELECT MAX(r1.a * t.a) AS m FROM t
  555. )
  556. SELECT * FROM r2 WHERE r2.m != r1.a
  557. ) as r3
  558. CROSS JOIN LATERAL (
  559. WITH r4 as (
  560. SELECT MAX(r1.a * t.a) AS m FROM t
  561. )
  562. SELECT * FROM r4 WHERE r4.m != r1.a OR (r4.m IS NOT NULL AND r1.a IS NULL)
  563. ) as r5;
  564. ----
  565. With
  566. cte l0 =
  567. CrossJoin
  568. Constant
  569. - ()
  570. Get materialize.public.t
  571. cte l1 =
  572. Distinct project=[#0]
  573. Get l0
  574. cte l2 =
  575. Reduce group_by=[#0] aggregates=[max((#0{a} * #1{a}))]
  576. CrossJoin
  577. Get l1
  578. Get materialize.public.t
  579. cte l3 =
  580. Project (#0, #1, #3)
  581. Join on=(#0 = #2)
  582. Get l0
  583. Filter (#1{m} != #0{a})
  584. Union
  585. Get l2
  586. CrossJoin
  587. Project (#0)
  588. Join on=(#0 = #1)
  589. Union
  590. Negate
  591. Distinct project=[#0]
  592. Get l2
  593. Distinct project=[#0]
  594. Get l1
  595. Get l1
  596. Constant
  597. - (null)
  598. cte l4 =
  599. Distinct project=[#0]
  600. Get l3
  601. cte l5 =
  602. Reduce group_by=[#0] aggregates=[max((#0{a} * #1{a}))]
  603. CrossJoin
  604. Get l4
  605. Get materialize.public.t
  606. Return
  607. Project (#0..=#2, #4)
  608. Join on=(#0 = #3)
  609. Get l3
  610. Filter ((#1{m} != #0{a}) OR ((#1{m}) IS NOT NULL AND (#0{a}) IS NULL))
  611. Union
  612. Get l5
  613. CrossJoin
  614. Project (#0)
  615. Join on=(#0 = #1)
  616. Union
  617. Negate
  618. Distinct project=[#0]
  619. Get l5
  620. Distinct project=[#0]
  621. Get l4
  622. Get l4
  623. Constant
  624. - (null)
  625. Target cluster: quickstart
  626. EOF
  627. # Test multiple CTEs: a case where we cannot pull the let statement up
  628. # through the join because the local l0 is correlated against the lhs of
  629. # the enclosing join.
  630. query T multiline
  631. EXPLAIN DECORRELATED PLAN AS TEXT FOR
  632. SELECT
  633. *
  634. FROM
  635. (
  636. SELECT * FROM t
  637. ) as r1
  638. CROSS JOIN LATERAL (
  639. WITH r4 as (
  640. SELECT MAX(r1.a * t.a) AS m FROM t
  641. )
  642. SELECT *
  643. FROM
  644. r4
  645. CROSS JOIN LATERAL (
  646. WITH r2 as (
  647. SELECT MAX(r1.a * t.a) AS m FROM t
  648. )
  649. SELECT * FROM r2 WHERE r1.a = r4.m AND r2.m > 5
  650. ) as r3
  651. WHERE a != r1.a
  652. ) as r5;
  653. ----
  654. With
  655. cte l0 =
  656. CrossJoin
  657. Constant
  658. - ()
  659. Get materialize.public.t
  660. cte l1 =
  661. Distinct project=[#0]
  662. Get l0
  663. cte l2 =
  664. Reduce group_by=[#0] aggregates=[max((#0{a} * #1{a}))]
  665. CrossJoin
  666. Get l1
  667. Get materialize.public.t
  668. cte l3 =
  669. Union
  670. Get l2
  671. CrossJoin
  672. Project (#0)
  673. Join on=(#0 = #1)
  674. Union
  675. Negate
  676. Distinct project=[#0]
  677. Get l2
  678. Distinct project=[#0]
  679. Get l1
  680. Get l1
  681. Constant
  682. - (null)
  683. cte l4 =
  684. Distinct project=[#1, #0]
  685. Get l3
  686. cte l5 =
  687. Reduce group_by=[#0, #1] aggregates=[max((#1{a} * #2{a}))]
  688. CrossJoin
  689. Get l4
  690. Get materialize.public.t
  691. Return
  692. Project (#0, #1, #3, #4)
  693. Join on=(#0 = #2)
  694. Get l0
  695. Filter (#0{a} != #0{a})
  696. Project (#0, #1, #4)
  697. Join on=(#1 = #2 AND #0 = #3)
  698. Get l3
  699. Filter ((#1{a} = #0{m}) AND (#2{m} > 5))
  700. Union
  701. Get l5
  702. CrossJoin
  703. Project (#0, #1)
  704. Join on=(#0 = #2 AND #1 = #3)
  705. Union
  706. Negate
  707. Distinct project=[#0, #1]
  708. Get l5
  709. Distinct project=[#0, #1]
  710. Get l4
  711. Get l4
  712. Constant
  713. - (null)
  714. Target cluster: quickstart
  715. EOF
  716. query T multiline
  717. EXPLAIN DECORRELATED PLAN AS TEXT FOR SELECT COUNT(*);
  718. ----
  719. With
  720. cte l0 =
  721. Reduce aggregates=[count(*)]
  722. Constant
  723. - ()
  724. Return
  725. Union
  726. Get l0
  727. CrossJoin
  728. Project ()
  729. CrossJoin
  730. Union
  731. Negate
  732. Distinct project=[]
  733. Get l0
  734. Distinct project=[]
  735. Constant
  736. - ()
  737. Constant
  738. - ()
  739. Constant
  740. - (0)
  741. Target cluster: quickstart
  742. EOF
  743. # Test materialize#17348.
  744. statement ok
  745. CREATE TABLE r(f0 INT, f1 INT, f2 INT, f3 INT, f4 INT, f5 INT, f6 INT, f7 INT, f8 INT, f9 INT, f10 INT, f11 INT, f12 INT, f13 INT, f14 INT, f15 INT, f16 INT);
  746. query T multiline
  747. EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR SELECT *
  748. FROM r AS r0, r AS r1
  749. WHERE
  750. r0.f0=r1.f0 AND
  751. r0.f2=r1.f2 AND
  752. r0.f3=r1.f3 AND
  753. r0.f4=r1.f4 AND
  754. r0.f6=r1.f6 AND
  755. r0.f8=r1.f8 AND
  756. r0.f9=r1.f9 AND
  757. r0.f11=r1.f11 AND
  758. r0.f12=r1.f12 AND
  759. r0.f13=r1.f13 AND
  760. r0.f15=r1.f15 AND
  761. r0.f16=r1.f16;
  762. ----
  763. Explained Query:
  764. With
  765. cte l0 =
  766. ArrangeBy keys=[[#0{f0}, #2{f2}..=#4{f4}, #6{f6}, #8{f8}, #9{f9}, #11{f11}..=#13{f13}, #15{f15}, #16{f16}]]
  767. Filter (#0{f0}) IS NOT NULL AND (#2{f2}) IS NOT NULL AND (#3{f3}) IS NOT NULL AND (#4{f4}) IS NOT NULL AND (#6{f6}) IS NOT NULL AND (#8{f8}) IS NOT NULL AND (#9{f9}) IS NOT NULL AND (#11{f11}) IS NOT NULL AND (#12{f12}) IS NOT NULL AND (#13{f13}) IS NOT NULL AND (#15{f15}) IS NOT NULL AND (#16{f16}) IS NOT NULL
  768. ReadStorage materialize.public.r
  769. Return
  770. Project (#0{f0}..=#16{f16}, #0{f0}, #18{f1}, #2{f2}..=#4{f4}, #22{f5}, #6{f6}, #24{f7}, #8{f8}, #9{f9}, #27{f10}, #11{f11}..=#13{f13}, #31{f14}, #15{f15}, #16{f16})
  771. Join on=(#0{f0} = #17{f0} AND #2{f2} = #19{f2} AND #3{f3} = #20{f3} AND #4{f4} = #21{f4} AND #6{f6} = #23{f6} AND #8{f8} = #25{f8} AND #9{f9} = #26{f9} AND #11{f11} = #28{f11} AND #12{f12} = #29{f12} AND #13{f13} = #30{f13} AND #15{f15} = #32{f15} AND #16{f16} = #33{f16}) type=differential
  772. Get l0
  773. Get l0
  774. Source materialize.public.r
  775. filter=((#0{f0}) IS NOT NULL AND (#2{f2}) IS NOT NULL AND (#3{f3}) IS NOT NULL AND (#4{f4}) IS NOT NULL AND (#6{f6}) IS NOT NULL AND (#8{f8}) IS NOT NULL AND (#9{f9}) IS NOT NULL AND (#11{f11}) IS NOT NULL AND (#12{f12}) IS NOT NULL AND (#13{f13}) IS NOT NULL AND (#15{f15}) IS NOT NULL AND (#16{f16}) IS NOT NULL)
  776. Target cluster: quickstart
  777. EOF