You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2024/03/08 20:04:50 UTC
(superset) 01/02: Revert "fix(sqlglot): Address regressions introduced in #26476 (#27217)"
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch 3.1
in repository https://gitbox.apache.org/repos/asf/superset.git
commit fad32cf4ae405c68c3909946aaf5aeec75910f63
Author: Michael S. Molina <mi...@gmail.com>
AuthorDate: Fri Mar 8 16:55:42 2024 -0300
Revert "fix(sqlglot): Address regressions introduced in #26476 (#27217)"
This reverts commit e687525524d406aa0a08a35af9a9fe6a02bf1167.
---
superset/sql_parse.py | 17 ++++++-----------
tests/unit_tests/sql_parse_tests.py | 10 ++++------
2 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/superset/sql_parse.py b/superset/sql_parse.py
index c85afc9460..7b89ab8f0e 100644
--- a/superset/sql_parse.py
+++ b/superset/sql_parse.py
@@ -28,7 +28,7 @@ import sqlparse
from sqlalchemy import and_
from sqlglot import exp, parse, parse_one
from sqlglot.dialects import Dialects
-from sqlglot.errors import SqlglotError
+from sqlglot.errors import ParseError
from sqlglot.optimizer.scope import Scope, ScopeType, traverse_scope
from sqlparse import keywords
from sqlparse.lexer import Lexer
@@ -287,7 +287,7 @@ class ParsedQuery:
"""
try:
statements = parse(self.stripped(), dialect=self._dialect)
- except SqlglotError:
+ except ParseError:
logger.warning("Unable to parse SQL (%s): %s", self._dialect, self.sql)
return set()
@@ -319,17 +319,12 @@ class ParsedQuery:
elif isinstance(statement, exp.Command):
# Commands, like `SHOW COLUMNS FROM foo`, have to be converted into a
# `SELECT` statetement in order to extract tables.
- if not (literal := statement.find(exp.Literal)):
+ literal = statement.find(exp.Literal)
+ if not literal:
return set()
- try:
- pseudo_query = parse_one(
- f"SELECT {literal.this}",
- dialect=self._dialect,
- )
- sources = pseudo_query.find_all(exp.Table)
- except SqlglotError:
- return set()
+ pseudo_query = parse_one(f"SELECT {literal.this}", dialect=self._dialect)
+ sources = pseudo_query.find_all(exp.Table)
else:
sources = [
source
diff --git a/tests/unit_tests/sql_parse_tests.py b/tests/unit_tests/sql_parse_tests.py
index 2d2448c2fa..f650b77734 100644
--- a/tests/unit_tests/sql_parse_tests.py
+++ b/tests/unit_tests/sql_parse_tests.py
@@ -271,7 +271,6 @@ def test_extract_tables_illdefined() -> None:
assert extract_tables("SELECT * FROM catalogname..tbname") == {
Table(table="tbname", schema=None, catalog="catalogname")
}
- assert extract_tables('SELECT * FROM "tbname') == set()
def test_extract_tables_show_tables_from() -> None:
@@ -559,10 +558,6 @@ def test_extract_tables_multistatement() -> None:
Table("t1"),
Table("t2"),
}
- assert extract_tables(
- "ADD JAR file:///hive.jar; SELECT * FROM t1;",
- engine="hive",
- ) == {Table("t1")}
def test_extract_tables_complex() -> None:
@@ -1821,7 +1816,10 @@ def test_extract_table_references(mocker: MockerFixture) -> None:
# test falling back to sqlparse
logger = mocker.patch("superset.sql_parse.logger")
sql = "SELECT * FROM table UNION ALL SELECT * FROM other_table"
- assert extract_table_references(sql, "trino") == {
+ assert extract_table_references(
+ sql,
+ "trino",
+ ) == {
Table(table="table", schema=None, catalog=None),
Table(table="other_table", schema=None, catalog=None),
}