From b5feba13bb941579e8e9c6d349eb11dee10defcb Mon Sep 17 00:00:00 2001 From: Dennis Zhuang Date: Tue, 22 Apr 2025 13:32:58 -0700 Subject: [PATCH] fix: the align in range query must exist --- src/parser/mod.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 564e7d6ac..34cc6f4fb 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -10508,6 +10508,43 @@ impl<'a> Parser<'a> { } rewrite_projection } else { + // `align` not found, report an error if the projection contains `range_fn` but without rewriting them. + + let align_fill_validate = |expr: &Expr| { + rewrite_calculation_expr(expr, true, &mut |e: &Expr| match e { + Expr::Function(func) => { + if let Some(name) = func.name.0.first() { + if name.value.as_str() == "range_fn" { + let FunctionArguments::List(args) = &func.args else { + unreachable!() + }; + + if args.args.len() < 5 { + return Err(ParserError::ParserError( + "ALIGN argument cannot be omitted in the range select query".into(), + )); + } + } + } + Ok(None) + } + _ => Ok(None), + }) + }; + + projection + .iter() + .map(|select_item| { + match select_item { + SelectItem::UnnamedExpr(expr) => { + align_fill_validate(expr)?; + } + _ => {} + } + Ok(()) + }) + .collect::, ParserError>>()?; + projection };