@@ -54,6 +54,70 @@ func TestPlanBuilder(t *testing.T) {
5454 var tests = []planTest {
5555 {
5656 Query : "WITH cte AS (SELECT * FROM xy) SELECT *, (SELECT SUM(x) FROM cte) AS xy FROM cte" ,
57+ ExpectedPlan : `
58+ Project
59+ ├─ columns: [cte.x:7!null, cte.y:8!null, cte.z:9!null, Subquery
60+ │ ├─ cacheable: true
61+ │ ├─ alias-string: select SUM(x) from cte
62+ │ └─ Project
63+ │ ├─ columns: [sum(cte.x):13!null as SUM(x)]
64+ │ └─ GroupBy
65+ │ ├─ select: SUM(cte.x:10!null)
66+ │ ├─ group:
67+ │ └─ SubqueryAlias
68+ │ ├─ name: cte
69+ │ ├─ outerVisibility: false
70+ │ ├─ isLateral: false
71+ │ ├─ cacheable: true
72+ │ ├─ colSet: (10-12)
73+ │ ├─ tableId: 4
74+ │ └─ Project
75+ │ ├─ columns: [xy.x:1!null, xy.y:2!null, xy.z:3!null]
76+ │ └─ Table
77+ │ ├─ name: xy
78+ │ ├─ columns: [x y z]
79+ │ ├─ colSet: (1-3)
80+ │ └─ tableId: 1
81+ │ as xy]
82+ └─ Project
83+ ├─ columns: [cte.x:7!null, cte.y:8!null, cte.z:9!null, Subquery
84+ │ ├─ cacheable: true
85+ │ ├─ alias-string: select SUM(x) from cte
86+ │ └─ Project
87+ │ ├─ columns: [sum(cte.x):13!null as SUM(x)]
88+ │ └─ GroupBy
89+ │ ├─ select: SUM(cte.x:10!null)
90+ │ ├─ group:
91+ │ └─ SubqueryAlias
92+ │ ├─ name: cte
93+ │ ├─ outerVisibility: false
94+ │ ├─ isLateral: false
95+ │ ├─ cacheable: true
96+ │ ├─ colSet: (10-12)
97+ │ ├─ tableId: 4
98+ │ └─ Project
99+ │ ├─ columns: [xy.x:1!null, xy.y:2!null, xy.z:3!null]
100+ │ └─ Table
101+ │ ├─ name: xy
102+ │ ├─ columns: [x y z]
103+ │ ├─ colSet: (1-3)
104+ │ └─ tableId: 1
105+ │ as xy]
106+ └─ SubqueryAlias
107+ ├─ name: cte
108+ ├─ outerVisibility: false
109+ ├─ isLateral: false
110+ ├─ cacheable: true
111+ ├─ colSet: (7-9)
112+ ├─ tableId: 3
113+ └─ Project
114+ ├─ columns: [xy.x:1!null, xy.y:2!null, xy.z:3!null]
115+ └─ Table
116+ ├─ name: xy
117+ ├─ columns: [x y z]
118+ ├─ colSet: (1-3)
119+ └─ tableId: 1
120+ ` ,
57121 },
58122 {
59123 Query : "select 0 as col1, 1 as col2, 2 as col2 group by col2 having col2 = 1" ,
@@ -83,20 +147,20 @@ Project
83147 ├─ columns: [1 (tinyint) as x]
84148 └─ Having
85149 ├─ GreaterThan
86- │ ├─ avg(cte.x):4
150+ │ ├─ avg(cte.x):5
87151 │ └─ 0 (tinyint)
88152 └─ Project
89- ├─ columns: [avg(cte.x):4 , cte.x:2 !null, 1 (tinyint) as x]
153+ ├─ columns: [avg(cte.x):5 , cte.x:3 !null, 1 (tinyint) as x]
90154 └─ GroupBy
91- ├─ select: AVG(cte.x:2 !null), cte.x:2 !null
155+ ├─ select: AVG(cte.x:3 !null), cte.x:3 !null
92156 ├─ group:
93157 └─ SubqueryAlias
94158 ├─ name: cte
95159 ├─ outerVisibility: false
96160 ├─ isLateral: false
97161 ├─ cacheable: true
98- ├─ colSet: (2 )
99- ├─ tableId: 1
162+ ├─ colSet: (3 )
163+ ├─ tableId: 2
100164 └─ Project
101165 ├─ columns: [1 (tinyint) as x]
102166 └─ Table
@@ -252,8 +316,8 @@ SubqueryAlias
252316 ├─ outerVisibility: false
253317 ├─ isLateral: false
254318 ├─ cacheable: true
255- ├─ colSet: (4,5 )
256- ├─ tableId: 2
319+ ├─ colSet: (6,7 )
320+ ├─ tableId: 3
257321 └─ Project
258322 ├─ columns: [xy.x:1!null, xy.y:2!null]
259323 └─ Table
@@ -465,8 +529,8 @@ SubqueryAlias
465529 ├─ outerVisibility: false
466530 ├─ isLateral: false
467531 ├─ cacheable: true
468- ├─ colSet: (2 )
469- ├─ tableId: 1
532+ ├─ colSet: (3 )
533+ ├─ tableId: 2
470534 └─ Project
471535 ├─ columns: [1 (tinyint)]
472536 └─ Table
@@ -484,8 +548,8 @@ SubqueryAlias
484548 ├─ outerVisibility: false
485549 ├─ isLateral: false
486550 ├─ cacheable: true
487- ├─ colSet: (4 )
488- ├─ tableId: 2
551+ ├─ colSet: (9 )
552+ ├─ tableId: 4
489553 └─ RecursiveCTE
490554 └─ Union distinct
491555 ├─ Project
@@ -496,16 +560,16 @@ SubqueryAlias
496560 │ ├─ colSet: (1-3)
497561 │ └─ tableId: 1
498562 └─ Project
499- ├─ columns: [cte.s:4 !null]
563+ ├─ columns: [cte.s:5 !null]
500564 └─ InnerJoin
501565 ├─ Eq
502- │ ├─ xy.y:6 !null
503- │ └─ cte.s:4 !null
566+ │ ├─ xy.y:7 !null
567+ │ └─ cte.s:5 !null
504568 ├─ RecursiveTable(cte)
505569 └─ Table
506570 ├─ name: xy
507571 ├─ columns: [x y z]
508- ├─ colSet: (5-7 )
572+ ├─ colSet: (6-8 )
509573 └─ tableId: 4
510574` ,
511575 },
@@ -1590,8 +1654,8 @@ SubqueryAlias
15901654 ├─ outerVisibility: false
15911655 ├─ isLateral: false
15921656 ├─ cacheable: true
1593- ├─ colSet: (6,7 )
1594- ├─ tableId: 4
1657+ ├─ colSet: (14,15 )
1658+ ├─ tableId: 6
15951659 └─ RecursiveCTE
15961660 └─ Union all
15971661 ├─ Project
@@ -1601,8 +1665,8 @@ SubqueryAlias
16011665 │ ├─ outerVisibility: false
16021666 │ ├─ isLateral: false
16031667 │ ├─ cacheable: true
1604- │ ├─ colSet: (2 )
1605- │ ├─ tableId: 1
1668+ │ ├─ colSet: (5 )
1669+ │ ├─ tableId: 3
16061670 │ └─ RecursiveCTE
16071671 │ └─ Union all
16081672 │ ├─ Project
@@ -1613,27 +1677,27 @@ SubqueryAlias
16131677 │ │ ├─ colSet: ()
16141678 │ │ └─ tableId: 0
16151679 │ └─ Project
1616- │ ├─ columns: [(rt.foo:2 !null + 1 (tinyint)) as foo]
1680+ │ ├─ columns: [(rt.foo:3 !null + 1 (tinyint)) as foo]
16171681 │ └─ Filter
16181682 │ ├─ LessThan
1619- │ │ ├─ rt.foo:2 !null
1683+ │ │ ├─ rt.foo:3 !null
16201684 │ │ └─ 5 (bigint)
16211685 │ └─ RecursiveTable(rt)
16221686 └─ Project
1623- ├─ columns: [(ladder.depth:6 !null + 1 (tinyint)) as depth, rt.foo:2 !null]
1687+ ├─ columns: [(ladder.depth:10 !null + 1 (tinyint)) as depth, rt.foo:12 !null]
16241688 └─ Filter
16251689 ├─ Eq
1626- │ ├─ ladder.foo:7
1627- │ └─ rt.foo:2 !null
1690+ │ ├─ ladder.foo:11
1691+ │ └─ rt.foo:12 !null
16281692 └─ CrossJoin
16291693 ├─ RecursiveTable(ladder)
16301694 └─ SubqueryAlias
16311695 ├─ name: rt
16321696 ├─ outerVisibility: false
16331697 ├─ isLateral: false
16341698 ├─ cacheable: true
1635- ├─ colSet: (2 )
1636- ├─ tableId: 1
1699+ ├─ colSet: (12 )
1700+ ├─ tableId: 4
16371701 └─ RecursiveCTE
16381702 └─ Union all
16391703 ├─ Project
@@ -1644,10 +1708,10 @@ SubqueryAlias
16441708 │ ├─ colSet: ()
16451709 │ └─ tableId: 0
16461710 └─ Project
1647- ├─ columns: [(rt.foo:2 !null + 1 (tinyint)) as foo]
1711+ ├─ columns: [(rt.foo:3 !null + 1 (tinyint)) as foo]
16481712 └─ Filter
16491713 ├─ LessThan
1650- │ ├─ rt.foo:2 !null
1714+ │ ├─ rt.foo:3 !null
16511715 │ └─ 5 (bigint)
16521716 └─ RecursiveTable(rt)
16531717` ,
0 commit comments