Skip to content

Commit e61b569

Browse files
committed
Add helper to simplify tests & add canonical string
1 parent 2e30a00 commit e61b569

3 files changed

Lines changed: 47 additions & 34 deletions

File tree

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: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,7 +1569,7 @@ fn test_mssql_cursor() {
15691569
CLOSE Employee_Cursor; \
15701570
DEALLOCATE Employee_Cursor\
15711571
";
1572-
let _ = ms().statements_parse_to(full_cursor_usage, "");
1572+
let _ = ms().multiple_statements_parse_to(full_cursor_usage, 6, "");
15731573
}
15741574

15751575
#[test]
@@ -2858,28 +2858,32 @@ fn parse_mssql_update_with_output_into() {
28582858
#[test]
28592859
fn parse_mssql_go_keyword() {
28602860
let single_go_keyword = "USE some_database;\nGO";
2861-
let stmts = ms().parse_sql_statements(single_go_keyword).unwrap();
2862-
assert_eq!(stmts.len(), 2);
2863-
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }),);
2861+
let stmts = ms().multiple_statements_parse_to(single_go_keyword, 2, "USE some_database\nGO");
2862+
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
28642863

28652864
let go_with_count = "SELECT 1;\nGO 5";
2866-
let stmts = ms().parse_sql_statements(go_with_count).unwrap();
2867-
assert_eq!(stmts.len(), 2);
2865+
let stmts = ms().multiple_statements_parse_to(go_with_count, 2, "SELECT 1\nGO 5");
28682866
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
28692867

28702868
// let go_statement_delimiter = "SELECT 1\nGO";
28712869
// let stmts = ms().parse_sql_statements(go_statement_delimiter).unwrap();
28722870
// assert_eq!(stmts.len(), 2);
28732871
// assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
28742872

2873+
let go_statement_delimiter = "SELECT 1\nGO";
2874+
let stmts = ms().multiple_statements_parse_to(go_statement_delimiter, 2, "SELECT 1; \nGO");
2875+
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
2876+
28752877
let bare_go = "GO";
2876-
let stmts = ms().parse_sql_statements(bare_go).unwrap();
2877-
assert_eq!(stmts.len(), 1);
2878-
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
2878+
let stmt = ms().one_statement_parses_to(bare_go, "GO");
2879+
assert_eq!(stmt, Statement::Go(GoStatement { count: None }));
28792880

28802881
let go_then_statements = "/* whitespace */ GO\nRAISERROR('This is a test', 16, 1);";
2881-
let stmts = ms().parse_sql_statements(go_then_statements).unwrap();
2882-
assert_eq!(stmts.len(), 2);
2882+
let stmts = ms().multiple_statements_parse_to(
2883+
go_then_statements,
2884+
2,
2885+
"GO\nRAISERROR('This is a test', 16, 1)",
2886+
);
28832887
assert_eq!(stmts[0], Statement::Go(GoStatement { count: None }));
28842888
assert_eq!(
28852889
stmts[1],
@@ -2895,28 +2899,32 @@ fn parse_mssql_go_keyword() {
28952899
);
28962900

28972901
let multiple_gos = "SELECT 1;\nGO 5\nSELECT 2;\n GO";
2898-
let stmts = ms().parse_sql_statements(multiple_gos).unwrap();
2899-
assert_eq!(stmts.len(), 4);
2902+
let stmts = ms().multiple_statements_parse_to(multiple_gos, 4, "SELECT 1\nGO 5\nSELECT 2\nGO");
29002903
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(5) }));
29012904
assert_eq!(stmts[3], Statement::Go(GoStatement { count: None }));
29022905

29032906
let single_line_comment_preceding_go = "USE some_database; -- okay\nGO";
2904-
let stmts = ms()
2905-
.parse_sql_statements(single_line_comment_preceding_go)
2906-
.unwrap();
2907-
assert_eq!(stmts.len(), 2);
2907+
let stmts = ms().multiple_statements_parse_to(
2908+
single_line_comment_preceding_go,
2909+
2,
2910+
"USE some_database\nGO",
2911+
);
29082912
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
29092913

29102914
let multi_line_comment_preceding_go = "USE some_database; /* okay */\nGO";
2911-
let stmts = ms()
2912-
.parse_sql_statements(multi_line_comment_preceding_go)
2913-
.unwrap();
2914-
assert_eq!(stmts.len(), 2);
2915+
let stmts = ms().multiple_statements_parse_to(
2916+
multi_line_comment_preceding_go,
2917+
2,
2918+
"USE some_database\nGO",
2919+
);
29152920
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
29162921

29172922
let single_line_comment_following_go = "USE some_database;\nGO -- okay";
2918-
let stmts = ms().parse_sql_statements(single_line_comment_following_go).unwrap();
2919-
assert_eq!(stmts.len(), 2);
2923+
let stmts = ms().multiple_statements_parse_to(
2924+
single_line_comment_following_go,
2925+
2,
2926+
"USE some_database\nGO",
2927+
);
29202928
assert_eq!(stmts[1], Statement::Go(GoStatement { count: None }));
29212929

29222930
// let actually_column_alias = "SELECT NULL AS GO";
@@ -2947,15 +2955,13 @@ fn parse_mssql_go_keyword() {
29472955
// }
29482956

29492957
let multi_line_comment_following = "USE some_database;\nGO/* okay */42";
2950-
let stmts = ms()
2951-
.parse_sql_statements(multi_line_comment_following)
2952-
.unwrap();
2953-
assert_eq!(stmts.len(), 2);
2958+
let stmts = ms().multiple_statements_parse_to(
2959+
multi_line_comment_following,
2960+
2,
2961+
"USE some_database\nGO 42",
2962+
);
29542963
assert_eq!(stmts[1], Statement::Go(GoStatement { count: Some(42) }));
29552964

2956-
let actually_column_alias = "SELECT NULL GO";
2957-
let stmts = ms().parse_sql_statements(actually_column_alias).unwrap();
2958-
29592965
let invalid_go_position = "SELECT 1; GO";
29602966
let err = ms().parse_sql_statements(invalid_go_position);
29612967
assert_eq!(

tests/sqlparser_postgres.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8420,9 +8420,9 @@ fn parse_create_operator_class() {
84208420
#[test]
84218421
fn parse_identifiers_semicolon_handling() {
84228422
let statement = "SHOW search_path; SELECT 1";
8423-
pg_and_generic().statements_parse_to(statement, statement);
8423+
pg_and_generic().multiple_statements_parse_to(statement, 2, statement);
84248424
let statement = "SHOW search_path; SHOW ALL; SHOW ALL";
8425-
pg_and_generic().statements_parse_to(statement, statement);
8425+
pg_and_generic().multiple_statements_parse_to(statement, 3, statement);
84268426
}
84278427

84288428
#[test]

0 commit comments

Comments
 (0)