Skip to content

Commit 15238fc

Browse files
committed
wip
1 parent 7461d8b commit 15238fc

2 files changed

Lines changed: 36 additions & 4 deletions

File tree

src/ast/spans.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::ast::{
2121
};
2222
use core::iter;
2323

24-
use crate::tokenizer::Span;
24+
use crate::tokenizer::{Span};
2525

2626
use super::{
2727
dcl::SecondaryRoles, value::ValueWithSpan, AccessExpr, AlterColumnOperation,
@@ -2636,4 +2636,36 @@ ALTER TABLE users
26362636
assert_eq!(stmt_span.start, (2, 13).into());
26372637
assert_eq!(stmt_span.end, (4, 11).into());
26382638
}
2639+
2640+
#[test]
2641+
fn test_function_span() {
2642+
let sql = "SELECT database(), left(user(),instr(concat(user(),'@'),'@')-1);";
2643+
let r = Parser::parse_sql(&crate::dialect::MySqlDialect {}, sql).unwrap();
2644+
2645+
let query = match &r[0] {
2646+
crate::ast::Statement::Query(q) => q,
2647+
_ => panic!("Expected query"),
2648+
};
2649+
2650+
let select = match query.body.as_ref() {
2651+
crate::ast::SetExpr::Select(s) => s,
2652+
_ => panic!("Expected select"),
2653+
};
2654+
2655+
let database_func = match &select.projection[0] {
2656+
crate::ast::SelectItem::UnnamedExpr(crate::ast::Expr::Function(func)) => func,
2657+
_ => panic!("Expected function expression"),
2658+
};
2659+
let span = database_func.span();
2660+
assert_eq!(span.start, (1, 8).into());
2661+
assert_eq!(span.end, (1, 17).into());
2662+
2663+
let left_func = match &select.projection[1] {
2664+
crate::ast::SelectItem::UnnamedExpr(crate::ast::Expr::Function(func)) => func,
2665+
_ => panic!("Expected function expression"),
2666+
};
2667+
let span = left_func.span();
2668+
assert_eq!(span.start, (1, 20).into());
2669+
assert_eq!(span.end, (1, 63).into());
2670+
}
26392671
}

src/parser/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,8 @@ impl<'a> Parser<'a> {
21832183
None
21842184
};
21852185

2186+
self.expect_token(&Token::RParen)?;
2187+
21862188
Ok(Function {
21872189
name,
21882190
uses_odbc_syntax: false,
@@ -15781,7 +15783,7 @@ impl<'a> Parser<'a> {
1578115783
));
1578215784
}
1578315785

15784-
if self.consume_token(&Token::RParen) {
15786+
if self.peek_token() == Token::RParen {
1578515787
return Ok(FunctionArgumentList {
1578615788
duplicate_treatment: None,
1578715789
args: vec![],
@@ -15841,8 +15843,6 @@ impl<'a> Parser<'a> {
1584115843
json_returning_clause,
1584215844
));
1584315845
}
15844-
15845-
self.expect_token(&Token::RParen)?;
1584615846
Ok(FunctionArgumentList {
1584715847
duplicate_treatment,
1584815848
args,

0 commit comments

Comments
 (0)