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:14:49 UTC

(superset) 10/11: 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.1
in repository https://gitbox.apache.org/repos/asf/superset.git

commit b699df703047c13dd38e46a8ca64da53f1262714
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 | 17 +++++++++++------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/superset/datasource/api.py b/superset/datasource/api.py
index 131d115755..6943d00bc7 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 df3dd93488..3e88bec44f 100644
--- a/superset/models/helpers.py
+++ b/superset/models/helpers.py
@@ -792,7 +792,7 @@ class ExploreMixin:  # pylint: disable=too-many-public-methods
         self,
         template_processor: Optional[  # pylint: disable=unused-argument
             BaseTemplateProcessor
-        ] = None,  # pylint: disable=unused-argument
+        ] = None,
     ) -> TextClause:
         return self.fetch_values_predicate
 
@@ -1340,14 +1340,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)