From 2547304f806424df2e497a301cc10130adfb9877 Mon Sep 17 00:00:00 2001 From: geooo109 Date: Wed, 12 Nov 2025 13:38:12 +0200 Subject: [PATCH 1/2] fix(parser): support IS with identifier as RHS --- sqlglot/parser.py | 2 +- tests/dialects/test_sqlite.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sqlglot/parser.py b/sqlglot/parser.py index 1c75a0591c..c1c7bd48fb 100644 --- a/sqlglot/parser.py +++ b/sqlglot/parser.py @@ -5090,7 +5090,7 @@ def _parse_is(self, this: t.Optional[exp.Expression]) -> t.Optional[exp.Expressi exp.JSON, **{"this": kind, "with": _with, "unique": unique} ) else: - expression = self._parse_primary() or self._parse_null() + expression = self._parse_null() or self._parse_bitwise() if not expression: self._retreat(index) return None diff --git a/tests/dialects/test_sqlite.py b/tests/dialects/test_sqlite.py index c3db50b7a2..a7c65e4a33 100644 --- a/tests/dialects/test_sqlite.py +++ b/tests/dialects/test_sqlite.py @@ -141,6 +141,7 @@ def test_sqlite(self): "ATTACH 'foo' || '.foo2' AS schema_name", ) self.validate_identity("DETACH DATABASE schema_name", "DETACH schema_name") + self.validate_identity("SELECT * FROM t WHERE NULL IS y") def test_strftime(self): self.validate_identity("SELECT STRFTIME('%Y/%m/%d', 'now')") From d3a189b4c12a7c85a206542d0292775795da2374 Mon Sep 17 00:00:00 2001 From: geooo109 Date: Wed, 12 Nov 2025 13:54:34 +0200 Subject: [PATCH 2/2] add not test --- tests/dialects/test_sqlite.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/dialects/test_sqlite.py b/tests/dialects/test_sqlite.py index a7c65e4a33..79d1b6a634 100644 --- a/tests/dialects/test_sqlite.py +++ b/tests/dialects/test_sqlite.py @@ -142,6 +142,9 @@ def test_sqlite(self): ) self.validate_identity("DETACH DATABASE schema_name", "DETACH schema_name") self.validate_identity("SELECT * FROM t WHERE NULL IS y") + self.validate_identity( + "SELECT * FROM t WHERE NULL IS NOT y", "SELECT * FROM t WHERE NOT NULL IS y" + ) def test_strftime(self): self.validate_identity("SELECT STRFTIME('%Y/%m/%d', 'now')")