Skip to content

Commit 4aa0294

Browse files
committed
Add helper to simplify tests & add canonical string
1 parent 4dc1a2a commit 4aa0294

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]
@@ -2511,28 +2511,27 @@ DECLARE @Y AS NVARCHAR(MAX)='y'
25112511
#[test]
25122512
fn parse_mssql_go_keyword() {
25132513
let single_go_keyword = "USE some_database;\nGO";
2514-
let stmts = ms().parse_sql_statements(single_go_keyword).unwrap();
2515-
assert_eq!(stmts.len(), 2);
2516-
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }),);
2514+
let stmts = ms().multiple_statements_parse_to(single_go_keyword, 2, "USE some_database\nGO");
2515+
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25172516

25182517
let go_with_count = "SELECT 1;\nGO 5";
2519-
let stmts = ms().parse_sql_statements(go_with_count).unwrap();
2520-
assert_eq!(stmts.len(), 2);
2518+
let stmts = ms().multiple_statements_parse_to(go_with_count, 2, "SELECT 1\nGO 5");
25212519
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
25222520

25232521
let go_statement_delimiter = "SELECT 1\nGO";
2524-
let stmts = ms().parse_sql_statements(go_statement_delimiter).unwrap();
2525-
assert_eq!(stmts.len(), 2);
2522+
let stmts = ms().multiple_statements_parse_to(go_statement_delimiter, 2, "SELECT 1; \nGO");
25262523
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25272524

25282525
let bare_go = "GO";
2529-
let stmts = ms().parse_sql_statements(bare_go).unwrap();
2530-
assert_eq!(stmts.len(), 1);
2531-
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
2526+
let stmt = ms().one_statement_parses_to(bare_go, "GO");
2527+
assert_eq!(stmt, Statement::Go(GoStatement { count: None }));
25322528

25332529
let go_then_statements = "/* whitespace */ GO\nRAISERROR('This is a test', 16, 1);";
2534-
let stmts = ms().parse_sql_statements(go_then_statements).unwrap();
2535-
assert_eq!(stmts.len(), 2);
2530+
let stmts = ms().multiple_statements_parse_to(
2531+
go_then_statements,
2532+
2,
2533+
"GO\nRAISERROR('This is a test', 16, 1)",
2534+
);
25362535
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
25372536
assert_eq!(
25382537
stmts[1],
@@ -2548,41 +2547,45 @@ fn parse_mssql_go_keyword() {
25482547
);
25492548

25502549
let multiple_gos = "SELECT 1;\nGO 5\nSELECT 2;\n GO";
2551-
let stmts = ms().parse_sql_statements(multiple_gos).unwrap();
2552-
assert_eq!(stmts.len(), 4);
2550+
let stmts = ms().multiple_statements_parse_to(multiple_gos, 4, "SELECT 1\nGO 5\nSELECT 2\nGO");
25532551
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
25542552
assert_eq!(stmts[3], Statement::Go(GoStatement { count: None }));
25552553

25562554
let single_line_comment_preceding_go = "USE some_database; -- okay\nGO";
2557-
let stmts = ms()
2558-
.parse_sql_statements(single_line_comment_preceding_go)
2559-
.unwrap();
2560-
assert_eq!(stmts.len(), 2);
2555+
let stmts = ms().multiple_statements_parse_to(
2556+
single_line_comment_preceding_go,
2557+
2,
2558+
"USE some_database\nGO",
2559+
);
25612560
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25622561

25632562
let multi_line_comment_preceding_go = "USE some_database; /* okay */\nGO";
2564-
let stmts = ms()
2565-
.parse_sql_statements(multi_line_comment_preceding_go)
2566-
.unwrap();
2567-
assert_eq!(stmts.len(), 2);
2563+
let stmts = ms().multiple_statements_parse_to(
2564+
multi_line_comment_preceding_go,
2565+
2,
2566+
"USE some_database\nGO",
2567+
);
25682568
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
25692569

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

25752578
let multi_line_comment_following = "USE some_database;\nGO/* okay */42";
2576-
let stmts = ms()
2577-
.parse_sql_statements(multi_line_comment_following)
2578-
.unwrap();
2579-
assert_eq!(stmts.len(), 2);
2579+
let stmts = ms().multiple_statements_parse_to(
2580+
multi_line_comment_following,
2581+
2,
2582+
"USE some_database\nGO 42",
2583+
);
25802584
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(42) }));
25812585

25822586
let actually_column_alias = "SELECT NULL GO";
2583-
let stmts = ms().parse_sql_statements(actually_column_alias).unwrap();
2584-
assert_eq!(stmts.len(), 1);
2585-
match &stmts[0] {
2587+
let stmt = ms().one_statement_parses_to(actually_column_alias, "SELECT NULL AS GO");
2588+
match &stmt {
25862589
Statement::Query(query) => {
25872590
let select = query.body.as_select().unwrap();
25882591
assert_eq!(

0 commit comments

Comments
 (0)