mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
Redshift utf8 idents (#1915)
Some checks are pending
license / Release Audit Tool (RAT) (push) Waiting to run
Rust / codestyle (push) Waiting to run
Rust / lint (push) Waiting to run
Rust / benchmark-lint (push) Waiting to run
Rust / compile (push) Waiting to run
Rust / docs (push) Waiting to run
Rust / compile-no-std (push) Waiting to run
Rust / test (beta) (push) Waiting to run
Rust / test (nightly) (push) Waiting to run
Rust / test (stable) (push) Waiting to run
Some checks are pending
license / Release Audit Tool (RAT) (push) Waiting to run
Rust / codestyle (push) Waiting to run
Rust / lint (push) Waiting to run
Rust / benchmark-lint (push) Waiting to run
Rust / compile (push) Waiting to run
Rust / docs (push) Waiting to run
Rust / compile-no-std (push) Waiting to run
Rust / test (beta) (push) Waiting to run
Rust / test (nightly) (push) Waiting to run
Rust / test (stable) (push) Waiting to run
This commit is contained in:
parent
9ffc546870
commit
f32a41a004
3 changed files with 19 additions and 5 deletions
|
@ -80,13 +80,15 @@ impl Dialect for RedshiftSqlDialect {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_identifier_start(&self, ch: char) -> bool {
|
fn is_identifier_start(&self, ch: char) -> bool {
|
||||||
// Extends Postgres dialect with sharp
|
// Extends Postgres dialect with sharp and UTF-8 multibyte chars
|
||||||
PostgreSqlDialect {}.is_identifier_start(ch) || ch == '#'
|
// https://docs.aws.amazon.com/redshift/latest/dg/r_names.html
|
||||||
|
PostgreSqlDialect {}.is_identifier_start(ch) || ch == '#' || !ch.is_ascii()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_identifier_part(&self, ch: char) -> bool {
|
fn is_identifier_part(&self, ch: char) -> bool {
|
||||||
// Extends Postgres dialect with sharp
|
// Extends Postgres dialect with sharp and UTF-8 multibyte chars
|
||||||
PostgreSqlDialect {}.is_identifier_part(ch) || ch == '#'
|
// https://docs.aws.amazon.com/redshift/latest/dg/r_names.html
|
||||||
|
PostgreSqlDialect {}.is_identifier_part(ch) || ch == '#' || !ch.is_ascii()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// redshift has `CONVERT(type, value)` instead of `CONVERT(value, type)`
|
/// redshift has `CONVERT(type, value)` instead of `CONVERT(value, type)`
|
||||||
|
|
|
@ -11068,10 +11068,17 @@ fn parse_non_latin_identifiers() {
|
||||||
Box::new(RedshiftSqlDialect {}),
|
Box::new(RedshiftSqlDialect {}),
|
||||||
Box::new(MySqlDialect {}),
|
Box::new(MySqlDialect {}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
supported_dialects.verified_stmt("SELECT a.説明 FROM test.public.inter01 AS a");
|
supported_dialects.verified_stmt("SELECT a.説明 FROM test.public.inter01 AS a");
|
||||||
supported_dialects.verified_stmt("SELECT a.説明 FROM inter01 AS a, inter01_transactions AS b WHERE a.説明 = b.取引 GROUP BY a.説明");
|
supported_dialects.verified_stmt("SELECT a.説明 FROM inter01 AS a, inter01_transactions AS b WHERE a.説明 = b.取引 GROUP BY a.説明");
|
||||||
supported_dialects.verified_stmt("SELECT 説明, hühnervögel, garçon, Москва, 東京 FROM inter01");
|
supported_dialects.verified_stmt("SELECT 説明, hühnervögel, garçon, Москва, 東京 FROM inter01");
|
||||||
|
|
||||||
|
let supported_dialects = TestedDialects::new(vec![
|
||||||
|
Box::new(GenericDialect {}),
|
||||||
|
Box::new(DuckDbDialect {}),
|
||||||
|
Box::new(PostgreSqlDialect {}),
|
||||||
|
Box::new(MsSqlDialect {}),
|
||||||
|
Box::new(MySqlDialect {}),
|
||||||
|
]);
|
||||||
assert!(supported_dialects
|
assert!(supported_dialects
|
||||||
.parse_sql_statements("SELECT 💝 FROM table1")
|
.parse_sql_statements("SELECT 💝 FROM table1")
|
||||||
.is_err());
|
.is_err());
|
||||||
|
|
|
@ -402,3 +402,8 @@ fn parse_extract_single_quotes() {
|
||||||
fn parse_string_literal_backslash_escape() {
|
fn parse_string_literal_backslash_escape() {
|
||||||
redshift().one_statement_parses_to(r#"SELECT 'l\'auto'"#, "SELECT 'l''auto'");
|
redshift().one_statement_parses_to(r#"SELECT 'l\'auto'"#, "SELECT 'l''auto'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_utf8_multibyte_idents() {
|
||||||
|
redshift().verified_stmt("SELECT 🚀.city AS 🎸 FROM customers AS 🚀");
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue