@@ -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 ( ) ?) ,
@@ -7808,6 +7816,13 @@ impl<'a> Parser<'a> {
7808
7816
} )
7809
7817
}
7810
7818
7819
+ pub fn parse_end ( & mut self ) -> Result < Statement , ParserError > {
7820
+ // let _ = self.parse_one_of_keywords(&[Keyword::TRANSACTION, Keyword::WORK]);
7821
+ Ok ( Statement :: Commit {
7822
+ chain : self . parse_commit_rollback_chain ( ) ?,
7823
+ } )
7824
+ }
7825
+
7811
7826
pub fn parse_transaction_modes ( & mut self ) -> Result < Vec < TransactionMode > , ParserError > {
7812
7827
let mut modes = vec ! [ ] ;
7813
7828
let mut required = false ;
0 commit comments