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)