bombsimon commented on code in PR #1576:
URL:
https://github.com/apache/datafusion-sqlparser-rs/pull/1576#discussion_r1873553041
##########
src/dialect/mod.rs:
##########
@@ -128,14 +128,38 @@ pub trait Dialect: Debug + Any {
ch == '"' || ch == '`'
}
- /// Return the character used to quote identifiers.
- fn identifier_quote_style(&self, _identifier: &str) -> Option<char> {
+ /// Determine if a character starts a potential nested quoted identifier.
+ /// Example: RedShift supports the following quote styles to all mean the
same thing:
+ /// ```sql
+ /// SELECT 1 AS foo;
+ /// SELECT 1 AS "foo";
+ /// SELECT 1 AS [foo];
+ /// SELECT 1 AS ["foo"];
+ /// ```
+ fn is_nested_delimited_identifier_start(&self, _ch: char) -> bool {
+ false
+ }
+
+ /// Only applicable whenever
[`Self::is_nested_delimited_identifier_start`] returns true
+ /// If the next sequence of tokens potentially represent a nested
identifier, then this method
+ /// returns a tuple containing the outer quote style, and if present, the
inner (nested) quote style.
+ ///
+ /// Example (Redshift):
+ /// ```text
+ /// `["foo"]` => (Some(`[`), Some(`"`))
+ /// `[foo]` => (Some(`[`), None)
+ /// `"foo"` => None
Review Comment:
nit: Looks like this doesn't line up with the return type.
```suggestion
/// `["foo"]` => Some(('[', Some('"'))
/// `[foo]` => Some(('[', None))
/// `"foo"` => None
```
##########
src/dialect/redshift.rs:
##########
@@ -32,21 +32,50 @@ pub struct RedshiftSqlDialect {}
// in the Postgres dialect, the query will be parsed as an array, while in the
Redshift dialect it will
// be a json path
impl Dialect for RedshiftSqlDialect {
- fn is_delimited_identifier_start(&self, ch: char) -> bool {
- ch == '"' || ch == '['
+ /// Determine if a character starts a potential nested quoted identifier.
+ /// Example: RedShift supports the following quote styles to all mean the
same thing:
+ /// ```sql
+ /// SELECT 1 AS foo;
+ /// SELECT 1 AS "foo";
+ /// SELECT 1 AS [foo];
+ /// SELECT 1 AS ["foo"];
+ /// ```
+ fn is_nested_delimited_identifier_start(&self, ch: char) -> bool {
+ ch == '['
}
- /// Determine if quoted characters are proper for identifier
- /// It's needed to distinguish treating square brackets as quotes from
- /// treating them as json path. If there is identifier then we assume
- /// there is no json path.
- fn is_proper_identifier_inside_quotes(&self, mut chars:
Peekable<Chars<'_>>) -> bool {
+ /// Only applicable whenever
[`Self::is_nested_delimited_identifier_start`] returns true
+ /// If the next sequence of tokens potentially represent a nested
identifier, then this method
+ /// returns a tuple containing the outer quote style, and if present, the
inner (nested) quote style.
+ ///
+ /// Example (Redshift):
+ /// ```text
+ /// `["foo"]` => (Some(`[`), Some(`"`))
+ /// `[foo]` => (Some(`[`), None)
+ /// `"foo"` => None
Review Comment:
Same here right?
```suggestion
/// `["foo"]` => Some(('[', Some('"'))
/// `[foo]` => Some(('[', None))
/// `"foo"` => None
```
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]