fix(chart-filter): Avoid column denormalization if not enabled (#26199)

This commit is contained in:
Vitor Avila 2023-12-07 22:24:47 -03:00 committed by GitHub
parent d2adc858cb
commit 05d7060d83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 7 deletions

View File

@ -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:

View File

@ -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)