You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2024/12/07 14:49:56 UTC
(superset) branch master updated: fix: pass string to `process_template` (#31329)
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 9315a8838c fix: pass string to `process_template` (#31329)
9315a8838c is described below
commit 9315a8838cbd7d84541c17912b631188fd8ce4d8
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Sat Dec 7 09:49:49 2024 -0500
fix: pass string to `process_template` (#31329)
---
superset/sql_parse.py | 7 +++++--
tests/unit_tests/sql_parse_tests.py | 27 ++++++++++++++++++++++++---
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/superset/sql_parse.py b/superset/sql_parse.py
index cb457cd4f5..377f09ec35 100644
--- a/superset/sql_parse.py
+++ b/superset/sql_parse.py
@@ -26,7 +26,7 @@ from typing import Any, cast, TYPE_CHECKING
import sqlparse
from flask_babel import gettext as __
-from jinja2 import nodes
+from jinja2 import nodes, Template
from sqlalchemy import and_
from sqlparse import keywords
from sqlparse.lexer import Lexer
@@ -999,10 +999,13 @@ def extract_tables_from_jinja_sql(sql: str, database: Database) -> set[Table]:
node.fields = nodes.TemplateData.fields
node.data = "NULL"
+ # re-render template back into a string
+ rendered_template = Template(template).render()
+
return (
tables
| ParsedQuery(
- sql_statement=processor.process_template(template),
+ sql_statement=processor.process_template(rendered_template),
engine=database.db_engine_spec.engine,
).tables
)
diff --git a/tests/unit_tests/sql_parse_tests.py b/tests/unit_tests/sql_parse_tests.py
index cf6eda3dda..d7d9941b61 100644
--- a/tests/unit_tests/sql_parse_tests.py
+++ b/tests/unit_tests/sql_parse_tests.py
@@ -17,7 +17,7 @@
# pylint: disable=invalid-name, redefined-outer-name, too-many-lines
from typing import Optional
-from unittest.mock import Mock
+from unittest import mock
import pytest
import sqlparse
@@ -1888,12 +1888,33 @@ SELECT * FROM t"""
],
)
def test_extract_tables_from_jinja_sql(
- engine: str, macro: str, expected: set[Table]
+ mocker: MockerFixture,
+ engine: str,
+ macro: str,
+ expected: set[Table],
) -> None:
assert (
extract_tables_from_jinja_sql(
sql=f"'{{{{ {engine}.{macro} }}}}'",
- database=Mock(),
+ database=mocker.Mock(),
)
== expected
)
+
+
+@mock.patch.dict(
+ "superset.extensions.feature_flag_manager._feature_flags",
+ {"ENABLE_TEMPLATE_PROCESSING": False},
+ clear=True,
+)
+def test_extract_tables_from_jinja_sql_disabled(mocker: MockerFixture) -> None:
+ """
+ Test the function when the feature flag is disabled.
+ """
+ database = mocker.Mock()
+ database.db_engine_spec.engine = "mssql"
+
+ assert extract_tables_from_jinja_sql(
+ sql="SELECT 1 FROM t",
+ database=database,
+ ) == {Table("t")}