@@ -2577,3 +2577,77 @@ fn parse_mssql_go_keyword() {
2577
2577
"sql parser error: Expected: end of statement, found: x"
2578
2578
) ;
2579
2579
}
2580
+
2581
+ #[ test]
2582
+ fn test_mssql_if_and_go ( ) {
2583
+ let sql = r#"
2584
+ IF 1 = 2
2585
+ SELECT 3;
2586
+ GO
2587
+ "# ;
2588
+ let statements = ms ( ) . parse_sql_statements ( sql) . unwrap ( ) ;
2589
+ assert_eq ! ( 2 , statements. len( ) ) ;
2590
+ assert_eq ! (
2591
+ statements[ 0 ] ,
2592
+ Statement :: If ( IfStatement {
2593
+ if_block: ConditionalStatementBlock {
2594
+ start_token: AttachedToken ( TokenWithSpan :: wrap( sqlparser:: tokenizer:: Token :: Word (
2595
+ sqlparser:: tokenizer:: Word {
2596
+ value: "IF" . to_string( ) ,
2597
+ quote_style: None ,
2598
+ keyword: Keyword :: IF
2599
+ }
2600
+ ) ) ) ,
2601
+ condition: Some ( Expr :: BinaryOp {
2602
+ left: Box :: new( Expr :: Value ( ( number( "1" ) ) . with_empty_span( ) ) ) ,
2603
+ op: sqlparser:: ast:: BinaryOperator :: Eq ,
2604
+ right: Box :: new( Expr :: Value ( ( number( "2" ) ) . with_empty_span( ) ) ) ,
2605
+ } ) ,
2606
+ then_token: None ,
2607
+ conditional_statements: ConditionalStatements :: Sequence {
2608
+ statements: vec![ Statement :: Query ( Box :: new( Query {
2609
+ with: None ,
2610
+ limit_clause: None ,
2611
+ fetch: None ,
2612
+ locks: vec![ ] ,
2613
+ for_clause: None ,
2614
+ order_by: None ,
2615
+ settings: None ,
2616
+ format_clause: None ,
2617
+ pipe_operators: vec![ ] ,
2618
+ body: Box :: new( SetExpr :: Select ( Box :: new( Select {
2619
+ select_token: AttachedToken :: empty( ) ,
2620
+ distinct: None ,
2621
+ top: None ,
2622
+ top_before_distinct: false ,
2623
+ projection: vec![ SelectItem :: UnnamedExpr ( Expr :: Value (
2624
+ ( number( "3" ) ) . with_empty_span( )
2625
+ ) ) ] ,
2626
+ exclude: None ,
2627
+ into: None ,
2628
+ from: vec![ ] ,
2629
+ lateral_views: vec![ ] ,
2630
+ prewhere: None ,
2631
+ selection: None ,
2632
+ group_by: GroupByExpr :: Expressions ( vec![ ] , vec![ ] ) ,
2633
+ cluster_by: vec![ ] ,
2634
+ distribute_by: vec![ ] ,
2635
+ sort_by: vec![ ] ,
2636
+ having: None ,
2637
+ named_window: vec![ ] ,
2638
+ window_before_qualify: false ,
2639
+ qualify: None ,
2640
+ value_table_mode: None ,
2641
+ connect_by: None ,
2642
+ flavor: SelectFlavor :: Standard ,
2643
+ } ) ) ) ,
2644
+ } ) ) ] ,
2645
+ } ,
2646
+ } ,
2647
+ elseif_blocks: vec![ ] ,
2648
+ else_block: None ,
2649
+ end_token: None ,
2650
+ } )
2651
+ ) ;
2652
+ assert_eq ! ( statements[ 1 ] , Statement :: Go ( GoStatement { count: None } ) ) ;
2653
+ }
0 commit comments