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

View File

@@ -457,6 +457,26 @@ tql eval (0, 2000, '400') t2 or on(job) t1;
| 1970-01-01T00:33:20 | 0.0 | |
+---------------------+----------------+-----+
-- SQLNESS SORT_RESULT 3 1
tql eval (0, 2000, '400') sum(t1{job="a"});
+---------------------+------------------------+
| ts | sum(t1.greptime_value) |
+---------------------+------------------------+
| 1970-01-01T00:00:00 | 1.0 |
| 1970-01-01T00:20:00 | 3.0 |
+---------------------+------------------------+
-- SQLNESS SORT_RESULT 3 1
tql eval (0, 2000, '400') sum(t1{job="a"}) - sum(t1{job="e"} or vector(1));
+---------------------+-----------------------------------------------------+
| ts | t1.sum(t1.greptime_value) - .sum(t1.greptime_value) |
+---------------------+-----------------------------------------------------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:20:00 | 2.0 |
+---------------------+-----------------------------------------------------+
drop table t1;
Affected Rows: 0

View File

@@ -203,6 +203,12 @@ tql eval (0, 2000, '400') t2 or on () t1;
-- SQLNESS SORT_RESULT 3 1
tql eval (0, 2000, '400') t2 or on(job) t1;
-- SQLNESS SORT_RESULT 3 1
tql eval (0, 2000, '400') sum(t1{job="a"});
-- SQLNESS SORT_RESULT 3 1
tql eval (0, 2000, '400') sum(t1{job="a"}) - sum(t1{job="e"} or vector(1));
drop table t1;
drop table t2;