fix(sql): preserve lookback when displaying TQL view definitions

Signed-off-by: discord9 <discord9@163.com>
This commit is contained in:
discord9
2026-10-23 19:57:39 +08:00
parent 27cd09ec55
commit cd64176418
2 changed files with 30 additions and 12 deletions
+29 -11
View File
@@ -3329,17 +3329,35 @@ CREATE TABLE spans (
#[test]
fn test_parse_create_view_tql_eval() {
let sql = "CREATE VIEW test AS TQL EVAL (0, 15, '5s') metric";
let result =
ParserContext::create_with_dialect(sql, &GreptimeDbDialect {}, ParseOptions::default())
.unwrap();
assert!(matches!(
&result[0],
Statement::CreateView(CreateView {
query,
..
}) if matches!(query.as_ref(), Statement::Tql(Tql::Eval(_)))
));
for (query, expected_lookback) in [
("TQL EVAL (0, 15, '5s') metric", None),
("TQL EVAL (0, 15, '5s', '5m') metric", Some("5m")),
("TQL EVAL (0, 15, '5s', '300') metric", Some("300")),
] {
let sql = format!("CREATE VIEW test AS {query}");
let result = ParserContext::create_with_dialect(
&sql,
&GreptimeDbDialect {},
ParseOptions::default(),
)
.unwrap();
let Statement::CreateView(view) = &result[0] else {
panic!("expected CREATE VIEW, got {:?}", result[0]);
};
let Statement::Tql(Tql::Eval(eval)) = view.query.as_ref() else {
panic!("expected TQL EVAL, got {}", view.query);
};
assert_eq!(eval.lookback.as_deref(), expected_lookback);
let formatted = result[0].to_string();
let reparsed = ParserContext::create_with_dialect(
&formatted,
&GreptimeDbDialect {},
ParseOptions::default(),
)
.unwrap();
assert_eq!(reparsed[0], result[0], "{formatted}");
}
for sql in [
"CREATE VIEW test AS TQL EXPLAIN (0, 15, '5s') metric",
+1 -1
View File
@@ -46,7 +46,7 @@ fn format_tql(
) -> std::fmt::Result {
write!(f, "({start}, {end}, '{step}'")?;
if let Some(lookback) = lookback {
write!(f, ", {lookback}")?;
write!(f, ", '{lookback}'")?;
}
if let Some(alias) = alias {
write!(f, ") {query} AS {alias}")