This is an automated email from the ASF dual-hosted git repository. beto pushed a commit to branch explorable in repository https://gitbox.apache.org/repos/asf/superset.git
commit befcf96027b844b6b7323c7fb1a407ed51c5c73d Author: Beto Dealmeida <[email protected]> AuthorDate: Mon Oct 20 19:00:58 2025 -0400 WIP --- superset-frontend/package-lock.json | 2 +- superset/semantic_layers/mapper.py | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index 06f036e7c3..c2aa3f7e34 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -64148,7 +64148,7 @@ "reselect": "^5.1.1", "rison": "^0.1.1", "seedrandom": "^3.0.5", - "xss": "^1.0.14" + "xss": "^1.0.15" }, "devDependencies": { "@emotion/styled": "^11.14.1", diff --git a/superset/semantic_layers/mapper.py b/superset/semantic_layers/mapper.py index 59d05d101f..f54428766f 100644 --- a/superset/semantic_layers/mapper.py +++ b/superset/semantic_layers/mapper.py @@ -34,15 +34,25 @@ def map_query_object(query_object: QueryObject) -> SemanticQuery: and more semantic layer-centric. This simplifies the process of adding new semantic layers to Superset, by providing a domain-specific representation of queries. """ + semantic_view = query_object.datasource.semantic_view + validate_query_object(query_object, semantic_view) + + all_dimensions = {dimension.id: dimension for dimension in semantic_view.dimensions} + all_metrics = {metric.id: metric for metric in semantic_view.metrics} + metrics: set[Metric] = set() dimensions: set[Dimension] = set() filters: set[Filter] = set() order = None group_limit = GroupLimit( - dimensions=[], + dimensions=[ + all_dimensions[dim_id] + for dim_id in query_object.columns + if dim_id in all_dimensions + ], top=query_object.series_limit, - metric=None, + metric=all_metrics.get(query_object.series_limit_metric), direction=( OrderDirection.DESC if query_object.order_desc else OrderDirection.ASC ), @@ -58,3 +68,15 @@ def map_query_object(query_object: QueryObject) -> SemanticQuery: offset=query_object.row_offset, group_limit=group_limit, ) + + +def validate_query_object( + query_object: QueryObject, + semantic_view: SemanticViewProtocol, +) -> None: + """ + Validate that the `QueryObject` is compatible with the `SemanticView`. + + For example, semantic view might not support adhoc expressions in filters or + metrics. + """
