fix(promql-planner): update ctx field columns of OR operator (#5556)

* fix(promql-planner): update ctx field columns of OR operator

* test: add sqlness test
This commit is contained in:
Weny Xu
2025-02-19 20:18:58 +09:00
committed by GitHub
parent 81da18e5df
commit c8bdeaaa6a
3 changed files with 62 additions and 0 deletions

View File

@@ -2418,6 +2418,7 @@ impl PromPlanner {
// step 4: update context
self.ctx.time_index_column = Some(left_time_index_column);
self.ctx.tag_columns = all_tags.into_iter().collect();
self.ctx.field_columns = vec![left_field_col.to_string()];
Ok(result)
}
@@ -3343,6 +3344,41 @@ mod test {
}
}
#[tokio::test]
async fn test_nested_binary_op() {
let mut eval_stmt = EvalStmt {
expr: PromExpr::NumberLiteral(NumberLiteral { val: 1.0 }),
start: UNIX_EPOCH,
end: UNIX_EPOCH
.checked_add(Duration::from_secs(100_000))
.unwrap(),
interval: Duration::from_secs(5),
lookback_delta: Duration::from_secs(1),
};
let case = r#"sum(rate(nginx_ingress_controller_requests{job=~".*"}[2m])) -
(
sum(rate(nginx_ingress_controller_requests{namespace=~".*"}[2m]))
or
vector(0)
)"#;
let prom_expr = parser::parse(case).unwrap();
eval_stmt.expr = prom_expr;
let table_provider = build_test_table_provider_with_fields(
&[(
DEFAULT_SCHEMA_NAME.to_string(),
"nginx_ingress_controller_requests".to_string(),
)],
&["namespace", "job"],
)
.await;
// Should be ok
let _ = PromPlanner::stmt_to_plan(table_provider, &eval_stmt, &build_session_state())
.await
.unwrap();
}
#[tokio::test]
async fn value_matcher() {
// template