mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-04 04:12:55 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user