From fca58e114d6e5513bd6774e5b45eb6bc84c1aa9b Mon Sep 17 00:00:00 2001 From: Awanish Gupta Date: Thu, 18 Jun 2026 12:36:53 +0530 Subject: [PATCH 1/3] fix: Add alias_tokens parameter to _parse_join() for sqlglot 30.9.0 compatibility - Add missing alias_tokens parameter to _parse_join() method signature - Pass alias_tokens to internal __parse_join() calls - Maintain backward compatibility with optional parameter - Fixes TypeError when using sqlglot 30.9.0 or later Resolves compatibility issue where SQLMesh's _parse_join() override was incompatible with sqlglot 30.9.0's updated method signature. Signed-off-by: Awanish Gupta --- sqlmesh/core/dialect.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sqlmesh/core/dialect.py b/sqlmesh/core/dialect.py index 94b8c2f2ad..491d8c956c 100644 --- a/sqlmesh/core/dialect.py +++ b/sqlmesh/core/dialect.py @@ -315,16 +315,19 @@ def _parse_with(self: Parser, skip_with_token: bool = False) -> t.Optional[exp.E def _parse_join( - self: Parser, skip_join_token: bool = False, parse_bracket: bool = False + self: Parser, + skip_join_token: bool = False, + parse_bracket: bool = False, + alias_tokens: t.Optional[t.Collection[TokenType]] = None, ) -> t.Optional[exp.Expr]: index = self._index method, side, kind = self._parse_join_parts() macro = _parse_matching_macro(self, "JOIN") if not macro: self._retreat(index) - return self.__parse_join(skip_join_token=skip_join_token, parse_bracket=parse_bracket) # type: ignore + return self.__parse_join(skip_join_token=skip_join_token, parse_bracket=parse_bracket, alias_tokens=alias_tokens) # type: ignore - join = self.__parse_join(skip_join_token=True) # type: ignore + join = self.__parse_join(skip_join_token=True, alias_tokens=alias_tokens) # type: ignore if method: join.set("method", method.text) if side: From 0c1abe17761112378a64b43694cc1ef4920159a6 Mon Sep 17 00:00:00 2001 From: Awanish Gupta Date: Mon, 22 Jun 2026 16:11:55 +0530 Subject: [PATCH 2/3] chore: Bump sqlglot version to 30.9.0 - Update sqlglot dependency from ~=30.8.0 to ~=30.9.0 - This makes sqlglot 30.9.0 the officially supported version - Works in conjunction with the alias_tokens parameter fix - Enables full sqlglot 30.9.0 feature support Signed-off-by: Awanish Gupta --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0f9a9e2c3e..4c5faa2820 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ dependencies = [ "requests", "rich[jupyter]", "ruamel.yaml", - "sqlglot~=30.8.0", + "sqlglot~=30.9.0", "tenacity", "time-machine", "json-stream" From 3d993c9717e21f48e93ff7803fc208284c1cd19b Mon Sep 17 00:00:00 2001 From: Awanish Gupta Date: Wed, 24 Jun 2026 08:42:50 +0530 Subject: [PATCH 3/3] fix: Use super() instead of name mangling for _parse_join calls The previous implementation used self.__parse_join() which relies on Python's name mangling and doesn't work correctly. This changes it to use super(Parser, self)._parse_join() which properly calls the parent class method. This fixes the mypy error: Parser has no attribute __parse_join Signed-off-by: Awanish Gupta --- sqlmesh/core/dialect.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sqlmesh/core/dialect.py b/sqlmesh/core/dialect.py index 491d8c956c..cecb92b5f0 100644 --- a/sqlmesh/core/dialect.py +++ b/sqlmesh/core/dialect.py @@ -325,9 +325,13 @@ def _parse_join( macro = _parse_matching_macro(self, "JOIN") if not macro: self._retreat(index) - return self.__parse_join(skip_join_token=skip_join_token, parse_bracket=parse_bracket, alias_tokens=alias_tokens) # type: ignore + return super(Parser, self)._parse_join( + skip_join_token=skip_join_token, + parse_bracket=parse_bracket, + alias_tokens=alias_tokens, + ) - join = self.__parse_join(skip_join_token=True, alias_tokens=alias_tokens) # type: ignore + join = super(Parser, self)._parse_join(skip_join_token=True, alias_tokens=alias_tokens) if method: join.set("method", method.text) if side: