From d0a782d8cccbc06ae85c19797292f98079b3c9d4 Mon Sep 17 00:00:00 2001 From: Nickolay Ponomarev Date: Sat, 4 May 2019 02:12:08 +0300 Subject: [PATCH] [mssql] Support delimited identifiers in [square brackets] T-SQL supports non-standard `[...]` quoting in addition to the widely supported and standard `"..."`: https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017 --- src/dialect/mssql.rs | 4 ++++ tests/sqlparser_mssql.rs | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/dialect/mssql.rs b/src/dialect/mssql.rs index 65daeb8d..4ed1d00f 100644 --- a/src/dialect/mssql.rs +++ b/src/dialect/mssql.rs @@ -4,6 +4,10 @@ use crate::dialect::Dialect; pub struct MsSqlDialect {} impl Dialect for MsSqlDialect { + fn is_delimited_identifier_start(&self, ch: char) -> bool { + ch == '"' || ch == '[' + } + fn is_identifier_start(&self, ch: char) -> bool { // See https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017#rules-for-regular-identifiers // We don't support non-latin "letters" currently. diff --git a/tests/sqlparser_mssql.rs b/tests/sqlparser_mssql.rs index d209ed94..eb5e0596 100644 --- a/tests/sqlparser_mssql.rs +++ b/tests/sqlparser_mssql.rs @@ -27,7 +27,14 @@ fn parse_mssql_identifiers() { }; } -#[allow(dead_code)] +#[test] +fn parse_mssql_delimited_identifiers() { + let _ = ms().one_statement_parses_to( + "SELECT [a.b!] [FROM] FROM foo [WHERE]", + "SELECT [a.b!] AS [FROM] FROM foo AS [WHERE]", + ); +} + fn ms() -> TestedDialects { TestedDialects { dialects: vec![Box::new(MsSqlDialect {})],