diff --git a/promql/parse.go b/promql/parse.go index 585702b69e..68d2e18510 100644 --- a/promql/parse.go +++ b/promql/parse.go @@ -1049,6 +1049,9 @@ func (p *parser) checkType(node Node) (typ model.ValueType) { p.errorf("aggregation operator expected in aggregation expression but got %q", n.Op) } p.expectType(n.Expr, model.ValVector, "aggregation expression") + if n.Op == itemTopK || n.Op == itemBottomK { + p.expectType(n.Param, model.ValScalar, "aggregation parameter") + } case *BinaryExpr: lt := p.checkType(n.LHS) diff --git a/promql/parse_test.go b/promql/parse_test.go index cf14c4d756..7aafed52aa 100644 --- a/promql/parse_test.go +++ b/promql/parse_test.go @@ -1253,6 +1253,10 @@ var testExpr = []struct { input: `topk(some_metric)`, fail: true, errMsg: "parse error at char 17: unexpected \")\" in aggregation, expected \",\"", + }, { + input: `topk(some_metric, other_metric)`, + fail: true, + errMsg: "parse error at char 32: expected type scalar in aggregation parameter, got vector", }, // Test function calls. {