@@ -2554,3 +2554,74 @@ fn test_sql_keywords_as_column_aliases() {
25542554 }
25552555 }
25562556}
2557+
2558+ #[ test]
2559+ fn parse_mssql_begin_end_block ( ) {
2560+ // Single statement
2561+ let sql = "BEGIN SELECT 1; END" ;
2562+ let stmt = ms ( ) . verified_stmt ( sql) ;
2563+ match & stmt {
2564+ Statement :: StartTransaction {
2565+ begin,
2566+ has_end_keyword,
2567+ statements,
2568+ transaction,
2569+ modifier,
2570+ ..
2571+ } => {
2572+ assert ! ( begin) ;
2573+ assert ! ( has_end_keyword) ;
2574+ assert ! ( transaction. is_none( ) ) ;
2575+ assert ! ( modifier. is_none( ) ) ;
2576+ assert_eq ! ( statements. len( ) , 1 ) ;
2577+ }
2578+ _ => panic ! ( "Expected StartTransaction, got: {stmt:?}" ) ,
2579+ }
2580+
2581+ // Multiple statements
2582+ let sql = "BEGIN SELECT 1; SELECT 2; END" ;
2583+ let stmt = ms ( ) . verified_stmt ( sql) ;
2584+ match & stmt {
2585+ Statement :: StartTransaction {
2586+ statements,
2587+ has_end_keyword,
2588+ ..
2589+ } => {
2590+ assert ! ( has_end_keyword) ;
2591+ assert_eq ! ( statements. len( ) , 2 ) ;
2592+ }
2593+ _ => panic ! ( "Expected StartTransaction, got: {stmt:?}" ) ,
2594+ }
2595+
2596+ // DML inside BEGIN/END
2597+ let sql = "BEGIN INSERT INTO t VALUES (1); UPDATE t SET x = 2; END" ;
2598+ let stmt = ms ( ) . verified_stmt ( sql) ;
2599+ match & stmt {
2600+ Statement :: StartTransaction {
2601+ statements,
2602+ has_end_keyword,
2603+ ..
2604+ } => {
2605+ assert ! ( has_end_keyword) ;
2606+ assert_eq ! ( statements. len( ) , 2 ) ;
2607+ }
2608+ _ => panic ! ( "Expected StartTransaction, got: {stmt:?}" ) ,
2609+ }
2610+
2611+ // BEGIN TRANSACTION still works
2612+ let sql = "BEGIN TRANSACTION" ;
2613+ let stmt = ms ( ) . verified_stmt ( sql) ;
2614+ match & stmt {
2615+ Statement :: StartTransaction {
2616+ begin,
2617+ has_end_keyword,
2618+ transaction,
2619+ ..
2620+ } => {
2621+ assert ! ( begin) ;
2622+ assert ! ( !has_end_keyword) ;
2623+ assert ! ( transaction. is_some( ) ) ;
2624+ }
2625+ _ => panic ! ( "Expected StartTransaction, got: {stmt:?}" ) ,
2626+ }
2627+ }
0 commit comments