Skip to content

Commit 1332907

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 00375a1 commit 1332907

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
@@ -8079,22 +8079,46 @@ fn parse_trim() {
80798079
parse_sql_statements("SELECT TRIM(FOO 'xyz' FROM 'xyzfooxyz')").unwrap_err()
80808080
);
80818081

8082-
// keep dialects without comma-style TRIM syntax failing
8083-
let all_expected_error = TestedDialects::new(vec![
8084-
//Box::new(GenericDialect {}),
8085-
Box::new(MsSqlDialect {}),
8086-
Box::new(AnsiDialect {}),
8087-
//Box::new(SnowflakeDialect {}),
8088-
Box::new(HiveDialect {}),
8089-
Box::new(RedshiftSqlDialect {}),
8090-
Box::new(MySqlDialect {}),
8091-
//Box::new(BigQueryDialect {}),
8092-
Box::new(SQLiteDialect {}),
8093-
]);
8082+
// dialects that support comma-separated TRIM syntax
8083+
let dialects = all_dialects_where(|d| d.supports_comma_separated_trim());
8084+
8085+
let sql = "SELECT TRIM(' xyz ', ' ')";
8086+
let select = dialects.verified_only_select(sql);
8087+
assert_eq!(
8088+
&Expr::Trim {
8089+
expr: Box::new(Expr::Value(
8090+
Value::SingleQuotedString(" xyz ".to_owned()).with_empty_span()
8091+
)),
8092+
trim_where: None,
8093+
trim_what: None,
8094+
trim_characters: Some(vec![Expr::Value(
8095+
Value::SingleQuotedString(" ".to_owned()).with_empty_span()
8096+
)]),
8097+
},
8098+
expr_from_projection(only(&select.projection))
8099+
);
8100+
8101+
let sql = "SELECT TRIM('xyz', 'a')";
8102+
let select = dialects.verified_only_select(sql);
8103+
assert_eq!(
8104+
&Expr::Trim {
8105+
expr: Box::new(Expr::Value(
8106+
Value::SingleQuotedString("xyz".to_owned()).with_empty_span()
8107+
)),
8108+
trim_where: None,
8109+
trim_what: None,
8110+
trim_characters: Some(vec![Expr::Value(
8111+
Value::SingleQuotedString("a".to_owned()).with_empty_span()
8112+
)]),
8113+
},
8114+
expr_from_projection(only(&select.projection))
8115+
);
80948116

8117+
// dialects without comma-style TRIM syntax should fail
8118+
let unsupported_dialects = all_dialects_where(|d| !d.supports_comma_separated_trim());
80958119
assert_eq!(
8096-
ParserError::ParserError("Expected: ), found: 'a'".to_owned()),
8097-
all_expected_error
8120+
ParserError::ParserError("Expected: ), found: ,".to_owned()),
8121+
unsupported_dialects
80988122
.parse_sql_statements("SELECT TRIM('xyz', 'a')")
80998123
.unwrap_err()
81008124
);

tests/sqlparser_postgres.rs

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8596,44 +8596,3 @@ fn parse_pg_analyze() {
85968596
_ => panic!("Expected Analyze, got: {stmt:?}"),
85978597
}
85988598
}
8599-
8600-
#[test]
8601-
fn parse_postgres_two_argument_trim() {
8602-
let sql = "SELECT TRIM(' xyz ', ' ')";
8603-
let select = pg().verified_only_select(sql);
8604-
assert_eq!(
8605-
&Expr::Trim {
8606-
expr: Box::new(Expr::Value(
8607-
Value::SingleQuotedString(" xyz ".to_owned()).with_empty_span()
8608-
)),
8609-
trim_where: None,
8610-
trim_what: None,
8611-
trim_characters: Some(vec![Expr::Value(
8612-
Value::SingleQuotedString(" ".to_owned()).with_empty_span()
8613-
)]),
8614-
},
8615-
expr_from_projection(only(&select.projection))
8616-
);
8617-
8618-
let sql = "SELECT TRIM('xyz', 'a')";
8619-
let select = pg().verified_only_select(sql);
8620-
assert_eq!(
8621-
&Expr::Trim {
8622-
expr: Box::new(Expr::Value(
8623-
Value::SingleQuotedString("xyz".to_owned()).with_empty_span()
8624-
)),
8625-
trim_where: None,
8626-
trim_what: None,
8627-
trim_characters: Some(vec![Expr::Value(
8628-
Value::SingleQuotedString("a".to_owned()).with_empty_span()
8629-
)]),
8630-
},
8631-
expr_from_projection(only(&select.projection))
8632-
);
8633-
8634-
let error_sql = "SELECT TRIM('xyz' 'a')";
8635-
assert_eq!(
8636-
ParserError::ParserError("Expected: ), found: 'a'".to_owned()),
8637-
pg().parse_sql_statements(error_sql).unwrap_err()
8638-
);
8639-
}

0 commit comments

Comments
 (0)