findepi commented on code in PR #17139:
URL: https://github.com/apache/datafusion/pull/17139#discussion_r2270981870
##########
datafusion/optimizer/src/optimize_projections/mod.rs:
##########
@@ -153,23 +153,16 @@ fn optimize_projections(
// Only use the absolutely necessary aggregate expressions required
// by the parent:
- let mut new_aggr_expr =
aggregate_reqs.get_at_indices(&aggregate.aggr_expr);
-
- // Aggregations always need at least one aggregate expression.
- // With a nested count, we don't require any column as input, but
- // still need to create a correct aggregate, which may be optimized
- // out later. As an example, consider the following query:
- //
- // SELECT count(*) FROM (SELECT count(*) FROM [...])
- //
- // which always returns 1.
- if new_aggr_expr.is_empty()
- && new_group_bys.is_empty()
- && !aggregate.aggr_expr.is_empty()
- {
- // take the old, first aggregate expression
- new_aggr_expr = aggregate.aggr_expr;
- new_aggr_expr.resize_with(1, || unreachable!());
+ let new_aggr_expr =
aggregate_reqs.get_at_indices(&aggregate.aggr_expr);
+
+ if new_group_bys.is_empty() && new_aggr_expr.is_empty() {
+ // Global aggregation with no aggregate functions always
produces 1 row and no columns.
Review Comment:
IMO here is a natural place to place this logic. We're pruning and we need
to somehow handle the case where we prune the last aggregate function. The code
should do something reasonable and now it does.
alternative is to let this place create Agg with empty group by and no
aggregate functions (I had so initially), and then have a separate rule that
finds such trivial Aggs and replaces with VALUES.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]