File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree 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> {
420420 Token :: EOF => break ,
421421
422422 // 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+ }
424428 _ => { }
425429 }
426430
@@ -501,6 +505,10 @@ impl<'a> Parser<'a> {
501505 // standard `START TRANSACTION` statement. It is supported
502506 // by at least PostgreSQL and MySQL.
503507 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 ( ) ?) ,
504512 Keyword :: SAVEPOINT => Ok ( self . parse_savepoint ( ) ?) ,
505513 Keyword :: RELEASE => Ok ( self . parse_release ( ) ?) ,
506514 Keyword :: COMMIT => Ok ( self . parse_commit ( ) ?) ,
@@ -7821,6 +7829,12 @@ impl<'a> Parser<'a> {
78217829 } )
78227830 }
78237831
7832+ pub fn parse_end ( & mut self ) -> Result < Statement , ParserError > {
7833+ Ok ( Statement :: Commit {
7834+ chain : self . parse_commit_rollback_chain ( ) ?,
7835+ } )
7836+ }
7837+
78247838 pub fn parse_transaction_modes ( & mut self ) -> Result < Vec < TransactionMode > , ParserError > {
78257839 let mut modes = vec ! [ ] ;
78267840 let mut required = false ;
Original file line number Diff line number Diff line change @@ -6336,6 +6336,17 @@ fn parse_commit() {
63366336 one_statement_parses_to ( "COMMIT TRANSACTION" , "COMMIT" ) ;
63376337}
63386338
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+
63396350#[ test]
63406351fn parse_rollback ( ) {
63416352 match verified_stmt ( "ROLLBACK" ) {
You can’t perform that action at this time.
0 commit comments