PromQL 查询解析器本地候选
///|
test "typed PromQL core rejects mismatched arguments" {
assert_eq(
@promql.infer_type(@promql.parse("sum by(job)(rate(up[5m])) / 2")),
@promql.InstantVector,
)
assert_eq(@promql.infer_type(@promql.parse("time()+2")), @promql.Scalar)
for
s in [
"rate(up)", "rate(up[5m],up)", "sum(2)", "up[5m]+up", "unknown(up)", "1 or up",
"up unless 2",
] {
assert_true(
try {
ignore(@promql.infer_type(@promql.parse(s)))
false
} catch {
_ => true
},
)
}
}pub(all) enum DurationExpr {
DurationValue(String)
DurationUnary(String, DurationExpr)
DurationBinary(String, DurationExpr, DurationExpr)
DurationCall(String, Array[DurationExpr])
} derive(Eq, Debug)pub(all) enum Expr {
Number(String)
StringLiteral(String)
StringBytes(Bytes)
Selector(String, Array[(String, String, String)])
SelectorBytes(String, Array[(Bytes, String, Bytes)])
Parenthesized(Expr)
Range(Expr, String)
Call(String, Array[Expr])
Aggregate(String, Array[String], Bool, Expr)
Binary(String, Expr, Expr)
Unary(String, Expr)
BinaryMatch(String, VectorMatching, Expr, Expr)
BinaryFill(String, VectorMatching, String?, String?, Expr, Expr)
AggregateParam(String, Array[String], Bool, Expr, Expr)
Subquery(Expr, String, String?)
Offset(Expr, String)
At(Expr, String)
RangeExpression(Expr, DurationExpr)
SubqueryExpression(Expr, DurationExpr, DurationExpr?)
OffsetExpression(Expr, DurationExpr)
ExtendedRange(Expr, String)
} derive(Eq, Debug)fn ParserOptions::new(experimental_functions? : Bool, duration_expressions? : Bool, extended_ranges? : Bool, fill_modifiers? : Bool) -> ParserOptionsInstall
Download zipPromQL 查询解析器本地候选