From ec892d428e1578c00ce591992797bd415671af4b Mon Sep 17 00:00:00 2001 From: fivetran-amrutabhimsenayachit Date: Fri, 19 Jun 2026 13:45:19 -0400 Subject: [PATCH 1/2] fix(duckdb): Fix lexical backslash handling --- sqlglot/dialects/dialect.py | 4 +++- sqlglot/dialects/snowflake.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 8442328407..a7f161b80e 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -305,7 +305,9 @@ 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 = { + 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 From 6b9ced7b8a41de4bcc4d1d2b5bfef7716cd29bc3 Mon Sep 17 00:00:00 2001 From: Jo <46752250+georgesittas@users.noreply.github.com> Date: Mon, 22 Jun 2026 16:44:28 +0300 Subject: [PATCH 2/2] Update sqlglot/dialects/dialect.py --- sqlglot/dialects/dialect.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index a7f161b80e..adbdd62781 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -306,6 +306,7 @@ def get_start_end(token_type: TokenType) -> tuple[str | None, str | None]: } 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 == "\\" }