File tree 2 files changed +31
-1
lines changed
2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -1088,6 +1088,8 @@ impl Parser {
1088
1088
None
1089
1089
} ;
1090
1090
1091
+ let _ = self . consume_token ( & Token :: SemiColon ) ;
1092
+
1091
1093
// parse next token
1092
1094
if let Some ( next_token) = self . peek_token ( ) {
1093
1095
parser_err ! ( format!(
@@ -1144,6 +1146,8 @@ impl Parser {
1144
1146
None
1145
1147
} ;
1146
1148
1149
+ let _ = self . consume_token ( & Token :: SemiColon ) ;
1150
+
1147
1151
if let Some ( next_token) = self . peek_token ( ) {
1148
1152
parser_err ! ( format!(
1149
1153
"Unexpected token at end of SELECT: {:?}" ,
Original file line number Diff line number Diff line change @@ -420,7 +420,33 @@ fn parse_case_expression() {
420
420
SQLValue ( Value :: SingleQuotedString ( ">=0" . to_string( ) ) ) ] ,
421
421
else_result: Some ( Box :: new( SQLValue ( Value :: SingleQuotedString ( "<0" . to_string( ) ) ) ) )
422
422
} ,
423
- projection[ 0 ]
423
+ projection[ 0 ] ) ;
424
+ }
425
+ _ => assert ! ( false ) ,
426
+ }
427
+ }
428
+
429
+ #[ test]
430
+ fn parse_select_with_semi_colon ( ) {
431
+ let sql = String :: from ( "SELECT id, fname, lname FROM customer WHERE id = 1;" ) ;
432
+ let ast = parse_sql ( & sql) ;
433
+ match ast {
434
+ ASTNode :: SQLSelect { projection, .. } => {
435
+ assert_eq ! ( 3 , projection. len( ) ) ;
436
+ }
437
+ _ => assert ! ( false ) ,
438
+ }
439
+ }
440
+
441
+ #[ test]
442
+ fn parse_delete_with_semi_colon ( ) {
443
+ let sql: & str = "DELETE FROM 'table';" ;
444
+
445
+ match parse_sql ( & sql) {
446
+ ASTNode :: SQLDelete { relation, .. } => {
447
+ assert_eq ! (
448
+ Some ( Box :: new( ASTNode :: SQLValue ( Value :: SingleQuotedString ( "table" . to_string( ) ) ) ) ) ,
449
+ relation
424
450
) ;
425
451
}
426
452
_ => assert ! ( false ) ,
You can’t perform that action at this time.
0 commit comments