Skip to content

Commit dcb6e5e

Browse files
committed
Add helper to simplify tests & add canonical string
1 parent df9bab3 commit dcb6e5e

File tree

2 files changed

+44
-34
lines changed

2 files changed

+44
-34
lines changed

src/test_utils.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ impl TestedDialects {
152152
/// 2. re-serializing the result of parsing `sql` produces the same
153153
/// `canonical` sql string
154154
///
155-
/// For multiple statements, use [`statements_parse_to`].
155+
/// For multiple statements, use [`multiple_statements_parse_to`].
156156
pub fn one_statement_parses_to(&self, sql: &str, canonical: &str) -> Statement {
157157
let mut statements = self.parse_sql_statements(sql).expect(sql);
158158
assert_eq!(statements.len(), 1);
@@ -169,8 +169,15 @@ impl TestedDialects {
169169
}
170170

171171
/// The same as [`one_statement_parses_to`] but it works for a multiple statements
172-
pub fn statements_parse_to(&self, sql: &str, canonical: &str) -> Vec<Statement> {
172+
pub fn multiple_statements_parse_to(
173+
&self,
174+
sql: &str,
175+
statement_count: usize,
176+
canonical: &str,
177+
) -> Vec<Statement> {
173178
let statements = self.parse_sql_statements(sql).expect(sql);
179+
assert_eq!(statements.len(), statement_count);
180+
174181
if !canonical.is_empty() && sql != canonical {
175182
assert_eq!(self.parse_sql_statements(canonical).unwrap(), statements);
176183
} else {

tests/sqlparser_mssql.rs

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,7 +1566,7 @@ fn test_mssql_cursor() {
15661566
CLOSE Employee_Cursor; \
15671567
DEALLOCATE Employee_Cursor\
15681568
";
1569-
let _ = ms().statements_parse_to(full_cursor_usage, "");
1569+
let _ = ms().multiple_statements_parse_to(full_cursor_usage, 6, "");
15701570
}
15711571

15721572
#[test]
@@ -2527,28 +2527,27 @@ DECLARE @Y AS NVARCHAR(MAX)='y'
25272527
#[test]
25282528
fn parse_mssql_go_keyword() {
25292529
let single_go_keyword = "USE some_database;\nGO";
2530-
let stmts = ms().parse_sql_statements(single_go_keyword).unwrap();
2531-
assert_eq!(stmts.len(), 2);
2532-
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }),);
2530+
let stmts = ms().multiple_statements_parse_to(single_go_keyword, 2, "USE some_database\nGO");
2531+
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25332532

25342533
let go_with_count = "SELECT 1;\nGO 5";
2535-
let stmts = ms().parse_sql_statements(go_with_count).unwrap();
2536-
assert_eq!(stmts.len(), 2);
2534+
let stmts = ms().multiple_statements_parse_to(go_with_count, 2, "SELECT 1\nGO 5");
25372535
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
25382536

25392537
let go_statement_delimiter = "SELECT 1\nGO";
2540-
let stmts = ms().parse_sql_statements(go_statement_delimiter).unwrap();
2541-
assert_eq!(stmts.len(), 2);
2538+
let stmts = ms().multiple_statements_parse_to(go_statement_delimiter, 2, "SELECT 1; \nGO");
25422539
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25432540

25442541
let bare_go = "GO";
2545-
let stmts = ms().parse_sql_statements(bare_go).unwrap();
2546-
assert_eq!(stmts.len(), 1);
2547-
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
2542+
let stmt = ms().one_statement_parses_to(bare_go, "GO");
2543+
assert_eq!(stmt, Statement::Go(GoStatement { count: None }));
25482544

25492545
let go_then_statements = "/* whitespace */ GO\nRAISERROR('This is a test', 16, 1);";
2550-
let stmts = ms().parse_sql_statements(go_then_statements).unwrap();
2551-
assert_eq!(stmts.len(), 2);
2546+
let stmts = ms().multiple_statements_parse_to(
2547+
go_then_statements,
2548+
2,
2549+
"GO\nRAISERROR('This is a test', 16, 1)",
2550+
);
25522551
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
25532552
assert_eq!(
25542553
stmts[1],
@@ -2564,41 +2563,45 @@ fn parse_mssql_go_keyword() {
25642563
);
25652564

25662565
let multiple_gos = "SELECT 1;\nGO 5\nSELECT 2;\n GO";
2567-
let stmts = ms().parse_sql_statements(multiple_gos).unwrap();
2568-
assert_eq!(stmts.len(), 4);
2566+
let stmts = ms().multiple_statements_parse_to(multiple_gos, 4, "SELECT 1\nGO 5\nSELECT 2\nGO");
25692567
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
25702568
assert_eq!(stmts[3], Statement::Go(GoStatement { count: None }));
25712569

25722570
let single_line_comment_preceding_go = "USE some_database; -- okay\nGO";
2573-
let stmts = ms()
2574-
.parse_sql_statements(single_line_comment_preceding_go)
2575-
.unwrap();
2576-
assert_eq!(stmts.len(), 2);
2571+
let stmts = ms().multiple_statements_parse_to(
2572+
single_line_comment_preceding_go,
2573+
2,
2574+
"USE some_database\nGO",
2575+
);
25772576
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25782577

25792578
let multi_line_comment_preceding_go = "USE some_database; /* okay */\nGO";
2580-
let stmts = ms()
2581-
.parse_sql_statements(multi_line_comment_preceding_go)
2582-
.unwrap();
2583-
assert_eq!(stmts.len(), 2);
2579+
let stmts = ms().multiple_statements_parse_to(
2580+
multi_line_comment_preceding_go,
2581+
2,
2582+
"USE some_database\nGO",
2583+
);
25842584
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25852585

25862586
let single_line_comment_following_go = "USE some_database;\nGO -- okay";
2587-
let stmts = ms().parse_sql_statements(single_line_comment_following_go).unwrap();
2588-
assert_eq!(stmts.len(), 2);
2587+
let stmts = ms().multiple_statements_parse_to(
2588+
single_line_comment_following_go,
2589+
2,
2590+
"USE some_database\nGO",
2591+
);
25892592
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25902593

25912594
let multi_line_comment_following = "USE some_database;\nGO/* okay */42";
2592-
let stmts = ms()
2593-
.parse_sql_statements(multi_line_comment_following)
2594-
.unwrap();
2595-
assert_eq!(stmts.len(), 2);
2595+
let stmts = ms().multiple_statements_parse_to(
2596+
multi_line_comment_following,
2597+
2,
2598+
"USE some_database\nGO 42",
2599+
);
25962600
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(42) }));
25972601

25982602
let actually_column_alias = "SELECT NULL GO";
2599-
let stmts = ms().parse_sql_statements(actually_column_alias).unwrap();
2600-
assert_eq!(stmts.len(), 1);
2601-
match &stmts[0] {
2603+
let stmt = ms().one_statement_parses_to(actually_column_alias, "SELECT NULL AS GO");
2604+
match &stmt {
26022605
Statement::Query(query) => {
26032606
let select = query.body.as_select().unwrap();
26042607
assert_eq!(

0 commit comments

Comments
 (0)