Skip to content

Commit f2ad35e

Browse files
author
Takahiro Ebato
committed
added tests and a helper function
1 parent 374985d commit f2ad35e

File tree

2 files changed

+70
-7
lines changed

2 files changed

+70
-7
lines changed

src/test_utils.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,50 @@ pub fn all_dialects() -> TestedDialects {
212212
}
213213
}
214214

215+
static ALL_DIALECT_NAMES: &[&str] = &[
216+
"generic",
217+
"mysql",
218+
"postgresql",
219+
"hive",
220+
"sqlite",
221+
"snowflake",
222+
"redshift",
223+
"mssql",
224+
"clickhouse",
225+
"bigquery",
226+
"ansi",
227+
"duckdb",
228+
];
229+
230+
pub fn partition_all_dialects_by_inclusion(
231+
dialect_names: Vec<&str>,
232+
) -> (TestedDialects, TestedDialects) {
233+
for dialect_name in &dialect_names {
234+
assert!(
235+
ALL_DIALECT_NAMES.contains(dialect_name),
236+
"Unknown dialect: {}",
237+
dialect_name
238+
);
239+
}
240+
241+
let (included_dialect_names, excluded_dialect_names) = ALL_DIALECT_NAMES
242+
.iter()
243+
.partition(|&dialect_name| dialect_names.contains(dialect_name));
244+
245+
let build_tested_dialects = |names: Vec<&str>| TestedDialects {
246+
dialects: names
247+
.iter()
248+
.map(|&name| dialect_from_str(name).unwrap())
249+
.collect(),
250+
options: None,
251+
};
252+
253+
(
254+
build_tested_dialects(included_dialect_names),
255+
build_tested_dialects(excluded_dialect_names),
256+
)
257+
}
258+
215259
pub fn assert_eq_vec<T: ToString>(expected: &[&str], actual: &[T]) {
216260
assert_eq!(
217261
expected,

tests/sqlparser_sqlite.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use test_utils::*;
2222
use sqlparser::ast::SelectItem::UnnamedExpr;
2323
use sqlparser::ast::*;
2424
use sqlparser::dialect::{GenericDialect, SQLiteDialect};
25-
use sqlparser::parser::ParserOptions;
25+
use sqlparser::parser::{ParserError, ParserOptions};
2626
use sqlparser::tokenizer::Token;
2727

2828
#[test]
@@ -433,12 +433,31 @@ fn invalid_empty_list() {
433433

434434
#[test]
435435
fn parse_start_transaction_with_modifier() {
436-
sqlite_and_generic().verified_stmt("BEGIN DEFERRED TRANSACTION");
437-
sqlite_and_generic().verified_stmt("BEGIN IMMEDIATE TRANSACTION");
438-
sqlite_and_generic().verified_stmt("BEGIN EXCLUSIVE TRANSACTION");
439-
sqlite_and_generic().one_statement_parses_to("BEGIN DEFERRED", "BEGIN DEFERRED TRANSACTION");
440-
sqlite_and_generic().one_statement_parses_to("BEGIN IMMEDIATE", "BEGIN IMMEDIATE TRANSACTION");
441-
sqlite_and_generic().one_statement_parses_to("BEGIN EXCLUSIVE", "BEGIN EXCLUSIVE TRANSACTION");
436+
let (supported_dialects, unsupported_dialects) =
437+
partition_all_dialects_by_inclusion(vec!["generic", "sqlite"]);
438+
439+
supported_dialects.verified_stmt("BEGIN DEFERRED TRANSACTION");
440+
supported_dialects.verified_stmt("BEGIN IMMEDIATE TRANSACTION");
441+
supported_dialects.verified_stmt("BEGIN EXCLUSIVE TRANSACTION");
442+
supported_dialects.one_statement_parses_to("BEGIN DEFERRED", "BEGIN DEFERRED TRANSACTION");
443+
supported_dialects.one_statement_parses_to("BEGIN IMMEDIATE", "BEGIN IMMEDIATE TRANSACTION");
444+
supported_dialects.one_statement_parses_to("BEGIN EXCLUSIVE", "BEGIN EXCLUSIVE TRANSACTION");
445+
446+
let res = unsupported_dialects.parse_sql_statements("BEGIN DEFERRED");
447+
assert_eq!(
448+
ParserError::ParserError("Expected end of statement, found: DEFERRED".to_string()),
449+
res.unwrap_err(),
450+
);
451+
let res = unsupported_dialects.parse_sql_statements("BEGIN IMMEDIATE");
452+
assert_eq!(
453+
ParserError::ParserError("Expected end of statement, found: IMMEDIATE".to_string()),
454+
res.unwrap_err(),
455+
);
456+
let res = unsupported_dialects.parse_sql_statements("BEGIN EXCLUSIVE");
457+
assert_eq!(
458+
ParserError::ParserError("Expected end of statement, found: EXCLUSIVE".to_string()),
459+
res.unwrap_err(),
460+
);
442461
}
443462

444463
fn sqlite() -> TestedDialects {

0 commit comments

Comments
 (0)