fix: Chart series limit doesn't work for some databases (#25150)

This commit is contained in:
KSPT-taylorjohn 2023-08-31 18:05:39 -04:00 committed by GitHub
parent de9515c294
commit bbfaeb074e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -98,6 +98,7 @@ config = app.config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
VIRTUAL_TABLE_ALIAS = "virtual_table" VIRTUAL_TABLE_ALIAS = "virtual_table"
SERIES_LIMIT_SUBQ_ALIAS = "series_limit"
ADVANCED_DATA_TYPES = config["ADVANCED_DATA_TYPES"] ADVANCED_DATA_TYPES = config["ADVANCED_DATA_TYPES"]
@ -1463,7 +1464,13 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
groupby = groupby or [] groupby = groupby or []
rejected_adhoc_filters_columns: list[Union[str, ColumnTyping]] = [] rejected_adhoc_filters_columns: list[Union[str, ColumnTyping]] = []
applied_adhoc_filters_columns: list[Union[str, ColumnTyping]] = [] applied_adhoc_filters_columns: list[Union[str, ColumnTyping]] = []
series_column_names = utils.get_column_names(series_columns or []) db_engine_spec = self.db_engine_spec
series_column_labels = [
db_engine_spec.make_label_compatible(column)
for column in utils.get_column_names(
columns=series_columns or [],
)
]
# deprecated, to be removed in 2.0 # deprecated, to be removed in 2.0
if is_timeseries and timeseries_limit: if is_timeseries and timeseries_limit:
series_limit = timeseries_limit series_limit = timeseries_limit
@ -1476,7 +1483,6 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
template_kwargs["removed_filters"] = removed_filters template_kwargs["removed_filters"] = removed_filters
template_kwargs["applied_filters"] = applied_template_filters template_kwargs["applied_filters"] = applied_template_filters
template_processor = self.get_template_processor(**template_kwargs) template_processor = self.get_template_processor(**template_kwargs)
db_engine_spec = self.db_engine_spec
prequeries: list[str] = [] prequeries: list[str] = []
orderby = orderby or [] orderby = orderby or []
need_groupby = bool(metrics is not None or groupby) need_groupby = bool(metrics is not None or groupby)
@ -1620,8 +1626,8 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
) )
groupby_all_columns[outer.name] = outer groupby_all_columns[outer.name] = outer
if ( if (
is_timeseries and not series_column_names is_timeseries and not series_column_labels
) or outer.name in series_column_names: ) or outer.name in series_column_labels:
groupby_series_columns[outer.name] = outer groupby_series_columns[outer.name] = outer
select_exprs.append(outer) select_exprs.append(outer)
elif columns: elif columns:
@ -2012,7 +2018,7 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
col_name = db_engine_spec.make_label_compatible(gby_name + "__") col_name = db_engine_spec.make_label_compatible(gby_name + "__")
on_clause.append(gby_obj == sa.column(col_name)) on_clause.append(gby_obj == sa.column(col_name))
tbl = tbl.join(subq.alias(), and_(*on_clause)) tbl = tbl.join(subq.alias(SERIES_LIMIT_SUBQ_ALIAS), and_(*on_clause))
else: else:
if series_limit_metric: if series_limit_metric:
orderby = [ orderby = [