Fix aggregation count when no arguments are provided
Older versions allowed count(), the new one did not. The new version now allso supports count() which behaves how it did before.
This commit is contained in:
parent
24b5d7c72d
commit
f6266fb3d5
@ -109,9 +109,11 @@ func (a *aggregator) AddAggregate(ident string, expr *ql.ASTNode) (err error) {
|
||||
// Prepare a runner in case we're not simply copying values
|
||||
if inIdent == "" {
|
||||
// - make evaluator
|
||||
def.eval, err = newRunnerGvalParsed(expr)
|
||||
if err != nil {
|
||||
return
|
||||
if expr != nil {
|
||||
def.eval, err = newRunnerGvalParsed(expr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -189,9 +191,13 @@ func (a *aggregator) aggregate(ctx context.Context, attr aggregateDef, i int, v
|
||||
func (a *aggregator) walkValues(ctx context.Context, r ValueGetter, cc map[string]uint, attr aggregateDef, run func(v any, isNil bool)) (err error) {
|
||||
var out any
|
||||
if attr.inIdent == "" {
|
||||
out, err = attr.eval.Eval(ctx, r)
|
||||
if err != nil {
|
||||
return
|
||||
if attr.eval != nil {
|
||||
out, err = attr.eval.Eval(ctx, r)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
out = r
|
||||
}
|
||||
|
||||
run(out, reflect2.IsNil(out))
|
||||
@ -335,12 +341,9 @@ func unpackExpressionNode(n *ql.ASTNode) (aggOp string, expr *ql.ASTNode, err er
|
||||
return
|
||||
}
|
||||
|
||||
if len(n.Args) != 1 {
|
||||
err = fmt.Errorf("impossible state: aggregate function must have exactly one argument")
|
||||
return
|
||||
if len(n.Args) > 0 {
|
||||
expr = n.Args[0]
|
||||
}
|
||||
|
||||
expr = n.Args[0]
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@ -188,9 +188,4 @@ func TestAggregatorInit(t *testing.T) {
|
||||
agg := Aggregator()
|
||||
require.Error(t, agg.AddAggregateE("count", "div(v)"))
|
||||
})
|
||||
|
||||
t.Run("invalid expression", func(t *testing.T) {
|
||||
agg := Aggregator()
|
||||
require.Error(t, agg.AddAggregateE("x", "sum(q we)"))
|
||||
})
|
||||
}
|
||||
|
||||
@ -227,7 +227,12 @@ var (
|
||||
},
|
||||
"count": {
|
||||
Handler: func(args ...exp.Expression) exp.Expression {
|
||||
return exp.NewSQLFunctionExpression("COUNT", args[0])
|
||||
var arg exp.Expression = exp.NewLiteralExpression("*")
|
||||
if len(args) > 0 {
|
||||
arg = args[0]
|
||||
}
|
||||
|
||||
return exp.NewSQLFunctionExpression("COUNT", arg)
|
||||
},
|
||||
},
|
||||
"sum": {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user