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 2023/12/08 14:05:05 UTC

(superset) 07/08: fix(chart-filter): Avoid column denormalization if not enabled (#26199)

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

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

commit 8eb6bbba91debe75309a5187fc301f1f03e6b3ff
Author: Vitor Avila <96...@users.noreply.github.com>
AuthorDate: Thu Dec 7 22:24:47 2023 -0300

    fix(chart-filter): Avoid column denormalization if not enabled (#26199)
    
    (cherry picked from commit 05d7060d838271ae46176040bcdd02b6fa359c72)
---
 superset/datasource/api.py |  5 ++++-
 superset/models/helpers.py | 15 ++++++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/superset/datasource/api.py b/superset/datasource/api.py
index 213298d30b..9a278c7032 100644
--- a/superset/datasource/api.py
+++ b/superset/datasource/api.py
@@ -115,9 +115,12 @@ class DatasourceRestApi(BaseSupersetApi):
             return self.response(403, message=ex.message)
 
         row_limit = apply_max_row_limit(app.config["FILTER_SELECT_ROW_LIMIT"])
+        denormalize_column = not datasource.normalize_columns
         try:
             payload = datasource.values_for_column(
-                column_name=column_name, limit=row_limit
+                column_name=column_name,
+                limit=row_limit,
+                denormalize_column=denormalize_column,
             )
             return self.response(200, result=payload)
         except KeyError:
diff --git a/superset/models/helpers.py b/superset/models/helpers.py
index 13b4edb3bc..b22768bfd6 100644
--- a/superset/models/helpers.py
+++ b/superset/models/helpers.py
@@ -1331,14 +1331,19 @@ class ExploreMixin:  # pylint: disable=too-many-public-methods
             )
         return and_(*l)
 
-    def values_for_column(self, column_name: str, limit: int = 10000) -> list[Any]:
-        # always denormalize column name before querying for values
+    def values_for_column(
+        self, column_name: str, limit: int = 10000, denormalize_column: bool = False
+    ) -> list[Any]:
+        # denormalize column name before querying for values
+        # unless disabled in the dataset configuration
         db_dialect = self.database.get_dialect()
-        denormalized_col_name = self.database.db_engine_spec.denormalize_name(
-            db_dialect, column_name
+        column_name_ = (
+            self.database.db_engine_spec.denormalize_name(db_dialect, column_name)
+            if denormalize_column
+            else column_name
         )
         cols = {col.column_name: col for col in self.columns}
-        target_col = cols[denormalized_col_name]
+        target_col = cols[column_name_]
         tp = self.get_template_processor()
         tbl, cte = self.get_from_clause(tp)