Skip to content

Commit 00375a1

Browse files
parser: gate comma-separated TRIM with a dialect capability
Add a new Dialect::supports_comma_separated_trim() capability with a false default and opt in the dialects that currently support TRIM(expr, characters). Use this capability in parse_trim() instead of a hardcoded dialect list so dialect support is declared at the dialect layer.
1 parent e978c61 commit 00375a1

File tree

9 files changed

+36
-8
lines changed

9 files changed

+36
-8
lines changed

src/dialect/bigquery.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,8 @@ impl Dialect for BigQueryDialect {
162162
fn supports_select_wildcard_replace(&self) -> bool {
163163
true
164164
}
165+
166+
fn supports_comma_separated_trim(&self) -> bool {
167+
true
168+
}
165169
}

src/dialect/clickhouse.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,8 @@ impl Dialect for ClickHouseDialect {
141141
fn supports_select_wildcard_replace(&self) -> bool {
142142
true
143143
}
144+
145+
fn supports_comma_separated_trim(&self) -> bool {
146+
true
147+
}
144148
}

src/dialect/duckdb.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,8 @@ impl Dialect for DuckDbDialect {
129129
fn supports_select_wildcard_replace(&self) -> bool {
130130
true
131131
}
132+
133+
fn supports_comma_separated_trim(&self) -> bool {
134+
true
135+
}
132136
}

src/dialect/generic.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,4 +280,8 @@ impl Dialect for GenericDialect {
280280
fn supports_constraint_keyword_without_name(&self) -> bool {
281281
true
282282
}
283+
284+
fn supports_comma_separated_trim(&self) -> bool {
285+
true
286+
}
283287
}

src/dialect/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,12 @@ pub trait Dialect: Debug + Any {
16271627
fn supports_select_format(&self) -> bool {
16281628
false
16291629
}
1630+
1631+
/// Returns true if the dialect supports the two-argument comma-separated
1632+
/// form of the `TRIM` function: `TRIM(expr, characters)`.
1633+
fn supports_comma_separated_trim(&self) -> bool {
1634+
false
1635+
}
16301636
}
16311637

16321638
/// Operators for which precedence must be defined.

src/dialect/postgresql.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,4 +292,8 @@ impl Dialect for PostgreSqlDialect {
292292
fn supports_insert_table_alias(&self) -> bool {
293293
true
294294
}
295+
296+
fn supports_comma_separated_trim(&self) -> bool {
297+
true
298+
}
295299
}

src/dialect/snowflake.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,10 @@ impl Dialect for SnowflakeDialect {
667667
fn supports_lambda_functions(&self) -> bool {
668668
true
669669
}
670+
671+
fn supports_comma_separated_trim(&self) -> bool {
672+
true
673+
}
670674
}
671675

672676
// Peeks ahead to identify tokens that are expected after

src/dialect/sqlite.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,8 @@ impl Dialect for SQLiteDialect {
120120
fn supports_notnull_operator(&self) -> bool {
121121
true
122122
}
123+
124+
fn supports_comma_separated_trim(&self) -> bool {
125+
true
126+
}
123127
}

src/parser/mod.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2961,14 +2961,8 @@ impl<'a> Parser<'a> {
29612961
trim_what: Some(trim_what),
29622962
trim_characters: None,
29632963
})
2964-
} else if self.consume_token(&Token::Comma)
2965-
&& dialect_of!(
2966-
self is DuckDbDialect
2967-
| SnowflakeDialect
2968-
| BigQueryDialect
2969-
| PostgreSqlDialect
2970-
| GenericDialect
2971-
)
2964+
} else if self.dialect.supports_comma_separated_trim()
2965+
&& self.consume_token(&Token::Comma)
29722966
{
29732967
let characters = self.parse_comma_separated(Parser::parse_expr)?;
29742968
self.expect_token(&Token::RParen)?;

0 commit comments

Comments
 (0)