This is an automated email from the ASF dual-hosted git repository.

jli pushed a commit to branch 4.1
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 2774adfe297a24d66c00651c65673a1433ddd83d
Author: Beto Dealmeida <[email protected]>
AuthorDate: Sat Dec 7 09:49:49 2024 -0500

    fix: pass string to `process_template` (#31329)
    
    (cherry picked from commit 9315a8838cbd7d84541c17912b631188fd8ce4d8)
---
 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 8c4ca3ea32..cf7d5b87d3 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
     )
+
+
[email protected](
+    "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")}

Reply via email to