From f76087c296a81190a9bc975c2db81c8d532d30b2 Mon Sep 17 00:00:00 2001 From: Mohamed Abdeen Date: Thu, 13 Jun 2024 14:39:53 +0300 Subject: [PATCH] ensure no collision in aggregate cse --- datafusion/optimizer/src/common_subexpr_eliminate.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/datafusion/optimizer/src/common_subexpr_eliminate.rs b/datafusion/optimizer/src/common_subexpr_eliminate.rs index 5f8d7da6317a..4246421d862c 100644 --- a/datafusion/optimizer/src/common_subexpr_eliminate.rs +++ b/datafusion/optimizer/src/common_subexpr_eliminate.rs @@ -171,9 +171,13 @@ impl CommonSubexprEliminate { input.schema().iter().for_each(|(qualifier, field)| { let name = field.name(); if name.starts_with('#') { - let index = name.trim_start_matches('#').parse::().unwrap_or(1); - let expr = Expr::from((qualifier, field)); - common_exprs.insert(name.clone(), (expr, index)); + match name.trim_start_matches('#').parse::() { + Ok(index) => { + let expr = Expr::from((qualifier, field)); + common_exprs.insert(name.clone(), (expr, index)); + } + Err(_) => (), // probably user-assigned alias, skip if not numeric + } } }); @@ -342,7 +346,7 @@ impl CommonSubexprEliminate { Aggregate::try_new(Arc::new(new_input), new_group_expr, new_aggr_expr) .map(LogicalPlan::Aggregate) } else { - let mut expr_number = common_exprs.len(); + let mut expr_number = common_exprs.values().map(|t| t.1).max().unwrap_or(0); let mut agg_exprs = common_exprs .into_iter()