Skip to content

Commit f9fa840

Browse files
committed
add aggregate dependency column back to analyzeHaving, skip having child projection, add select aliases to select dependencies so they can be resolved by order by exprs
1 parent bbd0659 commit f9fa840

File tree

4 files changed

+25
-19
lines changed

4 files changed

+25
-19
lines changed

enginetest/queries/tpcc_plans.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

enginetest/queries/tpch_plans.go

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sql/analyzer/validation_rules.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,13 @@ func validateGroupBy(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.Scop
251251
}
252252

253253
var err error
254+
var parent sql.Node
254255
var project *plan.Project
255256
var orderBy *plan.Sort
256257
transform.Inspect(n, func(n sql.Node) bool {
258+
defer func() {
259+
parent = n
260+
}()
257261
switch n := n.(type) {
258262
case *plan.GroupBy:
259263
var noGroupBy bool
@@ -334,8 +338,10 @@ func validateGroupBy(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.Scop
334338
}
335339
}
336340
case *plan.Project:
337-
project = n
338-
orderBy = nil
341+
if _, isHaving := parent.(*plan.Having); !isHaving {
342+
project = n
343+
orderBy = nil
344+
}
339345
case *plan.Sort:
340346
orderBy = n
341347
}
@@ -406,6 +412,7 @@ func resolveExpr(expr sql.Expression, selectDeps map[string]sql.Expression, grou
406412
switch expr := expr.(type) {
407413
case *expression.Alias:
408414
if dep, ok := selectDeps[strings.ToLower(expr.Child.String())]; ok {
415+
selectDeps[strings.ToLower(expr.Name())] = dep
409416
return dep, transform.NewTree, nil
410417
}
411418
case *expression.GetField:

sql/planbuilder/aggregates.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,6 @@ func (b *Builder) analyzeHaving(fromScope, projScope *scope, having *ast.Where)
885885
// record aggregate
886886
// TODO: this should get projScope as well
887887
_ = b.buildAggregateFunc(fromScope, name, n)
888-
return false, nil
889888
} else if isWindowFunc(name) {
890889
_ = b.buildWindowFunc(fromScope, name, n, (*ast.WindowDef)(n.Over))
891890
}

0 commit comments

Comments
 (0)