This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 04c77ca3ec fix use of name in Column (#8219)
04c77ca3ec is described below
commit 04c77ca3ec9f56d3ded52e15aa4de3f08e261478
Author: Andrew Lamb <[email protected]>
AuthorDate: Wed Nov 15 17:38:56 2023 -0500
fix use of name in Column (#8219)
---
datafusion/optimizer/src/push_down_projection.rs | 27 +++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/datafusion/optimizer/src/push_down_projection.rs
b/datafusion/optimizer/src/push_down_projection.rs
index 2c314bf765..59a5357c97 100644
--- a/datafusion/optimizer/src/push_down_projection.rs
+++ b/datafusion/optimizer/src/push_down_projection.rs
@@ -228,7 +228,7 @@ impl OptimizerRule for PushDownProjection {
// Gather all columns needed for expressions in this Aggregate
let mut new_aggr_expr = vec![];
for e in agg.aggr_expr.iter() {
- let column = Column::from(e.display_name()?);
+ let column = Column::from_name(e.display_name()?);
if required_columns.contains(&column) {
new_aggr_expr.push(e.clone());
}
@@ -605,6 +605,31 @@ mod tests {
assert_optimized_plan_eq(&plan, expected)
}
+ #[test]
+ fn aggregate_with_periods() -> Result<()> {
+ let schema = Schema::new(vec![Field::new("tag.one", DataType::Utf8,
false)]);
+
+ // Build a plan that looks as follows (note "tag.one" is a column named
+ // "tag.one", not a column named "one" in a table named "tag"):
+ //
+ // Projection: tag.one
+ // Aggregate: groupBy=[], aggr=[MAX("tag.one") AS "tag.one"]
+ // TableScan
+ let plan = table_scan(Some("m4"), &schema, None)?
+ .aggregate(
+ Vec::<Expr>::new(),
+
vec![max(col(Column::new_unqualified("tag.one"))).alias("tag.one")],
+ )?
+ .project([col(Column::new_unqualified("tag.one"))])?
+ .build()?;
+
+ let expected = "\
+ Aggregate: groupBy=[[]], aggr=[[MAX(m4.tag.one) AS tag.one]]\
+ \n TableScan: m4 projection=[tag.one]";
+
+ assert_optimized_plan_eq(&plan, expected)
+ }
+
#[test]
fn redundant_project() -> Result<()> {
let table_scan = test_table_scan()?;