Skip to content

Commit 4de6197

Browse files
committed
sql/parse: generate sort before project.
* Sort was being generated after Project, so it was not possible to ORDER BY by a field not included in SELECT.
1 parent bfe3ef5 commit 4de6197

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

sql/parse/parse.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,11 +282,12 @@ func (p *parser) buildPlan() (sql.Node, error) {
282282
node = plan.NewFilter(p.filterClauses[0], node)
283283
}
284284

285-
node = plan.NewProject(p.projection, node)
286285
if len(p.sortFields) > 0 {
287286
node = plan.NewSort(p.sortFields, node)
288287
}
289288

289+
node = plan.NewProject(p.projection, node)
290+
290291
if p.limit != nil {
291292
node = plan.NewLimit(int64(*p.limit), node)
292293
}

sql/parse/parse_test.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ var fixtures = map[string]sql.Node{
5454
plan.NewUnresolvedRelation("foo"),
5555
),
5656
),
57-
`SELECT foo, bar FROM foo ORDER BY baz DESC;`: plan.NewSort(
58-
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
59-
plan.NewProject(
60-
[]sql.Expression{
61-
expression.NewUnresolvedColumn("foo"),
62-
expression.NewUnresolvedColumn("bar"),
63-
},
57+
`SELECT foo, bar FROM foo ORDER BY baz DESC;`: plan.NewProject(
58+
[]sql.Expression{
59+
expression.NewUnresolvedColumn("foo"),
60+
expression.NewUnresolvedColumn("bar"),
61+
},
62+
plan.NewSort(
63+
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
6464
plan.NewUnresolvedRelation("foo"),
6565
),
6666
),
@@ -80,25 +80,25 @@ var fixtures = map[string]sql.Node{
8080
),
8181
),
8282
`SELECT foo, bar FROM foo ORDER BY baz DESC LIMIT 1;`: plan.NewLimit(int64(1),
83-
plan.NewSort(
84-
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
85-
plan.NewProject(
86-
[]sql.Expression{
87-
expression.NewUnresolvedColumn("foo"),
88-
expression.NewUnresolvedColumn("bar"),
89-
},
83+
plan.NewProject(
84+
[]sql.Expression{
85+
expression.NewUnresolvedColumn("foo"),
86+
expression.NewUnresolvedColumn("bar"),
87+
},
88+
plan.NewSort(
89+
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
9090
plan.NewUnresolvedRelation("foo"),
9191
),
9292
),
9393
),
9494
`SELECT foo, bar FROM foo WHERE qux = 1 ORDER BY baz DESC LIMIT 1;`: plan.NewLimit(int64(1),
95-
plan.NewSort(
96-
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
97-
plan.NewProject(
98-
[]sql.Expression{
99-
expression.NewUnresolvedColumn("foo"),
100-
expression.NewUnresolvedColumn("bar"),
101-
},
95+
plan.NewProject(
96+
[]sql.Expression{
97+
expression.NewUnresolvedColumn("foo"),
98+
expression.NewUnresolvedColumn("bar"),
99+
},
100+
plan.NewSort(
101+
[]plan.SortField{{expression.NewUnresolvedColumn("baz"), plan.Descending}},
102102
plan.NewFilter(
103103
expression.NewEquals(
104104
expression.NewUnresolvedColumn("qux"),

0 commit comments

Comments
 (0)