diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 8442328407..adbdd62781 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -305,7 +305,10 @@ def get_start_end(token_type: TokenType) -> tuple[str | None, str | None]: **klass.UNESCAPED_SEQUENCES, } - klass.ESCAPED_SEQUENCES = {v: k for k, v in klass.UNESCAPED_SEQUENCES.items()} + klass.ESCAPED_SEQUENCES = { + # The filter is necessary because of `\\a -> a` in Snowflake; we can't replace `a` with `\a`. + v: k for k, v in klass.UNESCAPED_SEQUENCES.items() if not v.isprintable() or v == "\\" + } klass.SUPPORTS_COLUMN_JOIN_MARKS = "(+)" in klass.tokenizer_class.KEYWORDS diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index 1006858931..dd49a3a7be 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -16,6 +16,8 @@ class Snowflake(Dialect): # https://docs.snowflake.com/en/sql-reference/identifiers-syntax NORMALIZATION_STRATEGY = NormalizationStrategy.UPPERCASE + # https://docs.snowflake.com/en/sql-reference/data-types-text#escape-sequences + UNESCAPED_SEQUENCES = {"\\a": "a", "\\v": "v"} NULL_ORDERING = "nulls_are_large" TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'" SUPPORTS_USER_DEFINED_TYPES = False