File tree Expand file tree Collapse file tree 2 files changed +31
-1
lines changed Expand file tree Collapse file tree 2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -153,7 +153,14 @@ impl Parser {
153
153
Token :: DoubleQuotedString ( _) => {
154
154
self . prev_token ( ) ;
155
155
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
+ } ,
157
164
_ => parser_err ! ( format!(
158
165
"Prefix parser expected a keyword but found {:?}" ,
159
166
t
Original file line number Diff line number Diff line change @@ -334,6 +334,29 @@ fn parse_select_version() {
334
334
}
335
335
}
336
336
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
+
337
360
fn parse_sql ( sql : & str ) -> ASTNode {
338
361
let dialect = GenericSqlDialect { } ;
339
362
let mut tokenizer = Tokenizer :: new ( & dialect, & sql, ) ;
You can’t perform that action at this time.
0 commit comments