Skip to content

Commit 608bbb2

Browse files
mustafasrepojackwener
authored andcommitted
Add alias check to optimize projections merge (apache#8438)
* Relax schema check for optimize projections. * Minor changes * Update datafusion/optimizer/src/optimize_projections.rs Co-authored-by: jakevin <jakevingoo@gmail.com> --------- Co-authored-by: jakevin <jakevingoo@gmail.com>
1 parent 304d7ae commit 608bbb2

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

datafusion/optimizer/src/optimize_projections.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,18 @@ fn merge_consecutive_projections(proj: &Projection) -> Result<Option<Projection>
405405
.iter()
406406
.map(|expr| rewrite_expr(expr, prev_projection))
407407
.collect::<Result<Option<Vec<_>>>>()?;
408-
new_exprs
409-
.map(|exprs| Projection::try_new(exprs, prev_projection.input.clone()))
410-
.transpose()
408+
if let Some(new_exprs) = new_exprs {
409+
let new_exprs = new_exprs
410+
.into_iter()
411+
.zip(proj.expr.iter())
412+
.map(|(new_expr, old_expr)| {
413+
new_expr.alias_if_changed(old_expr.name_for_alias()?)
414+
})
415+
.collect::<Result<Vec<_>>>()?;
416+
Projection::try_new(new_exprs, prev_projection.input.clone()).map(Some)
417+
} else {
418+
Ok(None)
419+
}
411420
}
412421

413422
/// Trim Expression

datafusion/sqllogictest/test_files/select.slt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,3 +1056,12 @@ drop table annotated_data_finite2;
10561056

10571057
statement ok
10581058
drop table t;
1059+
1060+
statement ok
1061+
create table t(x bigint, y bigint) as values (1,2), (1,3);
1062+
1063+
query II
1064+
select z+1, y from (select x+1 as z, y from t) where y > 1;
1065+
----
1066+
3 2
1067+
3 3

0 commit comments

Comments
 (0)