File tree 3 files changed +27
-1
lines changed
3 files changed +27
-1
lines changed Original file line number Diff line number Diff line change
1
+ rust 1.73.0
Original file line number Diff line number Diff line change @@ -420,7 +420,11 @@ impl<'a> Parser<'a> {
420
420
Token :: EOF => break ,
421
421
422
422
// end of statement
423
- Token :: Word ( word) if word. keyword == Keyword :: END => break ,
423
+ Token :: Word ( word) => {
424
+ if expecting_statement_delimiter && word. keyword == Keyword :: END {
425
+ break ;
426
+ }
427
+ }
424
428
_ => { }
425
429
}
426
430
@@ -501,6 +505,10 @@ impl<'a> Parser<'a> {
501
505
// standard `START TRANSACTION` statement. It is supported
502
506
// by at least PostgreSQL and MySQL.
503
507
Keyword :: BEGIN => Ok ( self . parse_begin ( ) ?) ,
508
+ // `END` is a nonstandard but common alias for the
509
+ // standard `COMMIT TRANSACTION` statement. It is supported
510
+ // by PostgreSQL.
511
+ Keyword :: END => Ok ( self . parse_end ( ) ?) ,
504
512
Keyword :: SAVEPOINT => Ok ( self . parse_savepoint ( ) ?) ,
505
513
Keyword :: RELEASE => Ok ( self . parse_release ( ) ?) ,
506
514
Keyword :: COMMIT => Ok ( self . parse_commit ( ) ?) ,
@@ -7821,6 +7829,12 @@ impl<'a> Parser<'a> {
7821
7829
} )
7822
7830
}
7823
7831
7832
+ pub fn parse_end ( & mut self ) -> Result < Statement , ParserError > {
7833
+ Ok ( Statement :: Commit {
7834
+ chain : self . parse_commit_rollback_chain ( ) ?,
7835
+ } )
7836
+ }
7837
+
7824
7838
pub fn parse_transaction_modes ( & mut self ) -> Result < Vec < TransactionMode > , ParserError > {
7825
7839
let mut modes = vec ! [ ] ;
7826
7840
let mut required = false ;
Original file line number Diff line number Diff line change @@ -6336,6 +6336,17 @@ fn parse_commit() {
6336
6336
one_statement_parses_to ( "COMMIT TRANSACTION" , "COMMIT" ) ;
6337
6337
}
6338
6338
6339
+ #[ test]
6340
+ fn parse_end ( ) {
6341
+ one_statement_parses_to ( "END AND NO CHAIN" , "COMMIT" ) ;
6342
+ one_statement_parses_to ( "END WORK AND NO CHAIN" , "COMMIT" ) ;
6343
+ one_statement_parses_to ( "END TRANSACTION AND NO CHAIN" , "COMMIT" ) ;
6344
+ one_statement_parses_to ( "END WORK AND CHAIN" , "COMMIT AND CHAIN" ) ;
6345
+ one_statement_parses_to ( "END TRANSACTION AND CHAIN" , "COMMIT AND CHAIN" ) ;
6346
+ one_statement_parses_to ( "END WORK" , "COMMIT" ) ;
6347
+ one_statement_parses_to ( "END TRANSACTION" , "COMMIT" ) ;
6348
+ }
6349
+
6339
6350
#[ test]
6340
6351
fn parse_rollback ( ) {
6341
6352
match verified_stmt ( "ROLLBACK" ) {
You can’t perform that action at this time.
0 commit comments