Skip to content

Commit 543daa3

Browse files
committed
Fix unparsing of Aggregate with grouping sets
1 parent 920b384 commit 543daa3

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

datafusion/sql/src/unparser/utils.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use std::cmp::Ordering;
19+
1820
use datafusion_common::{
1921
internal_err,
2022
tree_node::{Transformed, TreeNode},
@@ -166,10 +168,15 @@ fn find_agg_expr<'a>(agg: &'a Aggregate, column: &Column) -> Result<Option<&'a E
166168
if matches!(agg.group_expr.as_slice(), [Expr::GroupingSet(_)]) {
167169
// For grouping set expr, we must operate by expression list from the grouping set
168170
let grouping_expr = grouping_set_to_exprlist(agg.group_expr.as_slice())?;
169-
Ok(grouping_expr
170-
.into_iter()
171-
.chain(agg.aggr_expr.iter())
172-
.nth(index))
171+
match index.cmp(&grouping_expr.len()) {
172+
Ordering::Less => Ok(grouping_expr.into_iter().nth(index)),
173+
Ordering::Equal => {
174+
internal_err!("Tried to unproject column refereing to internal grouping id")
175+
}
176+
Ordering::Greater => {
177+
Ok(agg.aggr_expr.get(index - grouping_expr.len() - 1))
178+
}
179+
}
173180
} else {
174181
Ok(agg.group_expr.iter().chain(agg.aggr_expr.iter()).nth(index))
175182
}

0 commit comments

Comments
 (0)