Skip to content

Commit 94df7c2

Browse files
committed
added support for expressions with parentheses
1 parent 335607f commit 94df7c2

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/sqlparser.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,14 @@ impl Parser {
153153
Token::DoubleQuotedString(_) => {
154154
self.prev_token();
155155
self.parse_sql_value()
156-
}
156+
},
157+
Token::LParen => {
158+
let expr = self.parse();
159+
if !self.consume_token(&Token::RParen)? {
160+
return parser_err!(format!("expected token RParen"));
161+
}
162+
expr
163+
},
157164
_ => parser_err!(format!(
158165
"Prefix parser expected a keyword but found {:?}",
159166
t

tests/sqlparser_generic.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,29 @@ fn parse_select_version() {
334334
}
335335
}
336336

337+
#[test]
338+
fn parse_parens() {
339+
use self::ASTNode::*;
340+
use self::SQLOperator::*;
341+
let sql = "(a + b) - (c + d)";
342+
let ast = parse_sql(&sql);
343+
assert_eq!(
344+
SQLBinaryExpr {
345+
left: Box::new(SQLBinaryExpr {
346+
left: Box::new(SQLIdentifier("a".to_string())),
347+
op: Plus,
348+
right: Box::new(SQLIdentifier("b".to_string()))
349+
}),
350+
op: Minus,
351+
right: Box::new(SQLBinaryExpr {
352+
left: Box::new(SQLIdentifier("c".to_string())),
353+
op: Plus,
354+
right: Box::new(SQLIdentifier("d".to_string()))
355+
})
356+
}
357+
, ast);
358+
}
359+
337360
fn parse_sql(sql: &str) -> ASTNode {
338361
let dialect = GenericSqlDialect {};
339362
let mut tokenizer = Tokenizer::new(&dialect,&sql, );

0 commit comments

Comments
 (0)