@@ -2924,3 +2924,79 @@ fn parse_mssql_go_keyword() {
29242924 "sql parser error: Expected: end of statement, found: x"
29252925 ) ;
29262926}
2927+
2928+ #[ test]
2929+ fn test_mssql_if_and_go ( ) {
2930+ let sql = r#"
2931+ IF 1 = 2
2932+ SELECT 3;
2933+ GO
2934+ "# ;
2935+ let statements = ms ( ) . parse_sql_statements ( sql) . unwrap ( ) ;
2936+ assert_eq ! ( 2 , statements. len( ) ) ;
2937+ assert_eq ! (
2938+ statements[ 0 ] ,
2939+ Statement :: If ( IfStatement {
2940+ if_block: ConditionalStatementBlock {
2941+ start_token: AttachedToken ( TokenWithSpan :: wrap( sqlparser:: tokenizer:: Token :: Word (
2942+ sqlparser:: tokenizer:: Word {
2943+ value: "IF" . to_string( ) ,
2944+ quote_style: None ,
2945+ keyword: Keyword :: IF
2946+ }
2947+ ) ) ) ,
2948+ condition: Some ( Expr :: BinaryOp {
2949+ left: Box :: new( Expr :: Value ( ( number( "1" ) ) . with_empty_span( ) ) ) ,
2950+ op: sqlparser:: ast:: BinaryOperator :: Eq ,
2951+ right: Box :: new( Expr :: Value ( ( number( "2" ) ) . with_empty_span( ) ) ) ,
2952+ } ) ,
2953+ then_token: None ,
2954+ conditional_statements: ConditionalStatements :: Sequence {
2955+ statements: vec![ Statement :: Query ( Box :: new( Query {
2956+ with: None ,
2957+ limit_clause: None ,
2958+ fetch: None ,
2959+ locks: vec![ ] ,
2960+ for_clause: None ,
2961+ order_by: None ,
2962+ settings: None ,
2963+ format_clause: None ,
2964+ pipe_operators: vec![ ] ,
2965+ body: Box :: new( SetExpr :: Select ( Box :: new( Select {
2966+ select_token: AttachedToken :: empty( ) ,
2967+ optimizer_hints: vec![ ] ,
2968+ distinct: None ,
2969+ select_modifiers: None ,
2970+ top: None ,
2971+ top_before_distinct: false ,
2972+ projection: vec![ SelectItem :: UnnamedExpr ( Expr :: Value (
2973+ ( number( "3" ) ) . with_empty_span( )
2974+ ) ) ] ,
2975+ exclude: None ,
2976+ into: None ,
2977+ from: vec![ ] ,
2978+ lateral_views: vec![ ] ,
2979+ prewhere: None ,
2980+ selection: None ,
2981+ group_by: GroupByExpr :: Expressions ( vec![ ] , vec![ ] ) ,
2982+ cluster_by: vec![ ] ,
2983+ distribute_by: vec![ ] ,
2984+ sort_by: vec![ ] ,
2985+ having: None ,
2986+ named_window: vec![ ] ,
2987+ window_before_qualify: false ,
2988+ qualify: None ,
2989+ value_table_mode: None ,
2990+ connect_by: vec![ ] ,
2991+ flavor: SelectFlavor :: Standard ,
2992+ } ) ) ) ,
2993+ } ) ) ] ,
2994+ } ,
2995+ } ,
2996+ elseif_blocks: vec![ ] ,
2997+ else_block: None ,
2998+ end_token: None ,
2999+ } )
3000+ ) ;
3001+ assert_eq ! ( statements[ 1 ] , Statement :: Go ( GoStatement { count: None } ) ) ;
3002+ }
0 commit comments