This is an automated email from the ASF dual-hosted git repository. adriangb pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push: new c62d67186f fix: lazy case else expression evaluation (#17311) c62d67186f is described below commit c62d67186fd034eca461304bedda5d2313ca62d3 Author: Chen Chongchen <chenkov...@qq.com> AuthorDate: Tue Aug 26 23:32:10 2025 +0800 fix: lazy case else expression evaluation (#17311) --- datafusion/physical-expr/src/expressions/case.rs | 14 ++++++++------ datafusion/sqllogictest/test_files/case.slt | 10 ++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/datafusion/physical-expr/src/expressions/case.rs b/datafusion/physical-expr/src/expressions/case.rs index 1a74e78f10..5fa5144ecd 100644 --- a/datafusion/physical-expr/src/expressions/case.rs +++ b/datafusion/physical-expr/src/expressions/case.rs @@ -323,12 +323,14 @@ impl CaseExpr { } if let Some(e) = self.else_expr() { - // keep `else_expr`'s data type and return type consistent - let expr = try_cast(Arc::clone(e), &batch.schema(), return_type.clone())?; - let else_ = expr - .evaluate_selection(batch, &remainder)? - .into_array(batch.num_rows())?; - current_value = zip(&remainder, &else_, ¤t_value)?; + if remainder.true_count() > 0 { + // keep `else_expr`'s data type and return type consistent + let expr = try_cast(Arc::clone(e), &batch.schema(), return_type.clone())?; + let else_ = expr + .evaluate_selection(batch, &remainder)? + .into_array(batch.num_rows())?; + current_value = zip(&remainder, &else_, ¤t_value)?; + } } Ok(ColumnarValue::Array(current_value)) diff --git a/datafusion/sqllogictest/test_files/case.slt b/datafusion/sqllogictest/test_files/case.slt index 21913005e2..69f80f4593 100644 --- a/datafusion/sqllogictest/test_files/case.slt +++ b/datafusion/sqllogictest/test_files/case.slt @@ -482,3 +482,13 @@ SELECT v, CASE WHEN v < 0 THEN 10/0 ELSE 1 END FROM (VALUES (1), (2)) t(v) statement ok drop table t + +query I +SELECT case when true then 1 / 1 else 1 / 0 end; +---- +1 + +query I +SELECT case when false then 1 / 0 else 1 / 1 end; +---- +1 --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org For additional commands, e-mail: commits-h...@datafusion.apache.org