Skip to content

Commit 0f87df0

Browse files
tests: generalize comma-separated TRIM coverage by dialect
Move two-argument TRIM assertions from postgres-only tests into the common parser suite and select dialects via supports_comma_separated_trim(). Keep explicit failure coverage for dialects that do not support comma syntax and remove the redundant postgres-specific test.
1 parent 9a67ea1 commit 0f87df0

File tree

2 files changed

+38
-55
lines changed

2 files changed

+38
-55
lines changed

tests/sqlparser_common.rs

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8099,22 +8099,46 @@ fn parse_trim() {
80998099
parse_sql_statements("SELECT TRIM(FOO 'xyz' FROM 'xyzfooxyz')").unwrap_err()
81008100
);
81018101

8102-
// keep dialects without comma-style TRIM syntax failing
8103-
let all_expected_error = TestedDialects::new(vec![
8104-
//Box::new(GenericDialect {}),
8105-
Box::new(MsSqlDialect {}),
8106-
Box::new(AnsiDialect {}),
8107-
//Box::new(SnowflakeDialect {}),
8108-
Box::new(HiveDialect {}),
8109-
Box::new(RedshiftSqlDialect {}),
8110-
Box::new(MySqlDialect {}),
8111-
//Box::new(BigQueryDialect {}),
8112-
Box::new(SQLiteDialect {}),
8113-
]);
8102+
// dialects that support comma-separated TRIM syntax
8103+
let dialects = all_dialects_where(|d| d.supports_comma_separated_trim());
8104+
8105+
let sql = "SELECT TRIM(' xyz ', ' ')";
8106+
let select = dialects.verified_only_select(sql);
8107+
assert_eq!(
8108+
&Expr::Trim {
8109+
expr: Box::new(Expr::Value(
8110+
Value::SingleQuotedString(" xyz ".to_owned()).with_empty_span()
8111+
)),
8112+
trim_where: None,
8113+
trim_what: None,
8114+
trim_characters: Some(vec![Expr::Value(
8115+
Value::SingleQuotedString(" ".to_owned()).with_empty_span()
8116+
)]),
8117+
},
8118+
expr_from_projection(only(&select.projection))
8119+
);
8120+
8121+
let sql = "SELECT TRIM('xyz', 'a')";
8122+
let select = dialects.verified_only_select(sql);
8123+
assert_eq!(
8124+
&Expr::Trim {
8125+
expr: Box::new(Expr::Value(
8126+
Value::SingleQuotedString("xyz".to_owned()).with_empty_span()
8127+
)),
8128+
trim_where: None,
8129+
trim_what: None,
8130+
trim_characters: Some(vec![Expr::Value(
8131+
Value::SingleQuotedString("a".to_owned()).with_empty_span()
8132+
)]),
8133+
},
8134+
expr_from_projection(only(&select.projection))
8135+
);
81148136

8137+
// dialects without comma-style TRIM syntax should fail
8138+
let unsupported_dialects = all_dialects_where(|d| !d.supports_comma_separated_trim());
81158139
assert_eq!(
8116-
ParserError::ParserError("Expected: ), found: 'a'".to_owned()),
8117-
all_expected_error
8140+
ParserError::ParserError("Expected: ), found: ,".to_owned()),
8141+
unsupported_dialects
81188142
.parse_sql_statements("SELECT TRIM('xyz', 'a')")
81198143
.unwrap_err()
81208144
);

tests/sqlparser_postgres.rs

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8641,44 +8641,3 @@ fn parse_pg_analyze() {
86418641
_ => panic!("Expected Analyze, got: {stmt:?}"),
86428642
}
86438643
}
8644-
8645-
#[test]
8646-
fn parse_postgres_two_argument_trim() {
8647-
let sql = "SELECT TRIM(' xyz ', ' ')";
8648-
let select = pg().verified_only_select(sql);
8649-
assert_eq!(
8650-
&Expr::Trim {
8651-
expr: Box::new(Expr::Value(
8652-
Value::SingleQuotedString(" xyz ".to_owned()).with_empty_span()
8653-
)),
8654-
trim_where: None,
8655-
trim_what: None,
8656-
trim_characters: Some(vec![Expr::Value(
8657-
Value::SingleQuotedString(" ".to_owned()).with_empty_span()
8658-
)]),
8659-
},
8660-
expr_from_projection(only(&select.projection))
8661-
);
8662-
8663-
let sql = "SELECT TRIM('xyz', 'a')";
8664-
let select = pg().verified_only_select(sql);
8665-
assert_eq!(
8666-
&Expr::Trim {
8667-
expr: Box::new(Expr::Value(
8668-
Value::SingleQuotedString("xyz".to_owned()).with_empty_span()
8669-
)),
8670-
trim_where: None,
8671-
trim_what: None,
8672-
trim_characters: Some(vec![Expr::Value(
8673-
Value::SingleQuotedString("a".to_owned()).with_empty_span()
8674-
)]),
8675-
},
8676-
expr_from_projection(only(&select.projection))
8677-
);
8678-
8679-
let error_sql = "SELECT TRIM('xyz' 'a')";
8680-
assert_eq!(
8681-
ParserError::ParserError("Expected: ), found: 'a'".to_owned()),
8682-
pg().parse_sql_statements(error_sql).unwrap_err()
8683-
);
8684-
}

0 commit comments

Comments
 (0)