|
23 | 23 | mod test_utils;
|
24 | 24 |
|
25 | 25 | use helpers::attached_token::AttachedToken;
|
26 |
| -use sqlparser::tokenizer::{Location, Span}; |
| 26 | +use sqlparser::keywords::Keyword; |
| 27 | +use sqlparser::tokenizer::{Location, Span, TokenWithSpan}; |
27 | 28 | use test_utils::*;
|
28 | 29 |
|
29 | 30 | use sqlparser::ast::DataType::{Int, Text, Varbinary};
|
@@ -2226,3 +2227,75 @@ fn parse_mssql_go_keyword() {
|
2226 | 2227 | "sql parser error: Expected: end of statement, found: x"
|
2227 | 2228 | );
|
2228 | 2229 | }
|
| 2230 | + |
| 2231 | +#[test] |
| 2232 | +fn test_mssql_if_and_go() { |
| 2233 | + let sql = r#" |
| 2234 | + IF 1 = 2 |
| 2235 | + SELECT 3; |
| 2236 | + GO |
| 2237 | + "#; |
| 2238 | + let statements = ms().parse_sql_statements(sql).unwrap(); |
| 2239 | + assert_eq!(2, statements.len()); |
| 2240 | + assert_eq!( |
| 2241 | + statements[0], |
| 2242 | + Statement::If(IfStatement { |
| 2243 | + if_block: ConditionalStatementBlock { |
| 2244 | + start_token: AttachedToken(TokenWithSpan::wrap(sqlparser::tokenizer::Token::Word( |
| 2245 | + sqlparser::tokenizer::Word { |
| 2246 | + value: "IF".to_string(), |
| 2247 | + quote_style: None, |
| 2248 | + keyword: Keyword::IF |
| 2249 | + } |
| 2250 | + ))), |
| 2251 | + condition: Some(Expr::BinaryOp { |
| 2252 | + left: Box::new(Expr::Value((number("1")).with_empty_span())), |
| 2253 | + op: sqlparser::ast::BinaryOperator::Eq, |
| 2254 | + right: Box::new(Expr::Value((number("2")).with_empty_span())), |
| 2255 | + }), |
| 2256 | + then_token: None, |
| 2257 | + conditional_statements: ConditionalStatements::Sequence { |
| 2258 | + statements: vec![Statement::Query(Box::new(Query { |
| 2259 | + with: None, |
| 2260 | + limit_clause: None, |
| 2261 | + fetch: None, |
| 2262 | + locks: vec![], |
| 2263 | + for_clause: None, |
| 2264 | + order_by: None, |
| 2265 | + settings: None, |
| 2266 | + format_clause: None, |
| 2267 | + body: Box::new(SetExpr::Select(Box::new(Select { |
| 2268 | + select_token: AttachedToken::empty(), |
| 2269 | + distinct: None, |
| 2270 | + top: None, |
| 2271 | + top_before_distinct: false, |
| 2272 | + projection: vec![SelectItem::UnnamedExpr(Expr::Value( |
| 2273 | + (number("3")).with_empty_span() |
| 2274 | + ))], |
| 2275 | + into: None, |
| 2276 | + from: vec![], |
| 2277 | + lateral_views: vec![], |
| 2278 | + prewhere: None, |
| 2279 | + selection: None, |
| 2280 | + group_by: GroupByExpr::Expressions(vec![], vec![]), |
| 2281 | + cluster_by: vec![], |
| 2282 | + distribute_by: vec![], |
| 2283 | + sort_by: vec![], |
| 2284 | + having: None, |
| 2285 | + named_window: vec![], |
| 2286 | + window_before_qualify: false, |
| 2287 | + qualify: None, |
| 2288 | + value_table_mode: None, |
| 2289 | + connect_by: None, |
| 2290 | + flavor: SelectFlavor::Standard, |
| 2291 | + }))), |
| 2292 | + }))], |
| 2293 | + }, |
| 2294 | + }, |
| 2295 | + elseif_blocks: vec![], |
| 2296 | + else_block: None, |
| 2297 | + end_token: None, |
| 2298 | + }) |
| 2299 | + ); |
| 2300 | + assert_eq!(statements[1], Statement::Go(GoStatement { count: None })); |
| 2301 | +} |
0 commit comments