From 9c6476043c238c7d61e0847382df282116332ecc Mon Sep 17 00:00:00 2001 From: Runji Wang Date: Sat, 9 Dec 2023 17:23:43 +0800 Subject: [PATCH] fix the bug Signed-off-by: Runji Wang --- src/expr/impl/src/scalar/case.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/expr/impl/src/scalar/case.rs b/src/expr/impl/src/scalar/case.rs index 309a792183b0e..f7b1dc677d04b 100644 --- a/src/expr/impl/src/scalar/case.rs +++ b/src/expr/impl/src/scalar/case.rs @@ -61,8 +61,10 @@ impl Expression for CaseExpression { let when_len = self.when_clauses.len(); let mut result_array = Vec::with_capacity(when_len + 1); for (when_idx, WhenClause { when, then }) in self.when_clauses.iter().enumerate() { - let calc_then_vis = when.eval(&input).await?.as_bool().to_bitmap(); let input_vis = input.visibility().clone(); + // note that evaluated result from when clause may contain bits that are not visible, + // so we need to mask it with input visibility. + let calc_then_vis = when.eval(&input).await?.as_bool().to_bitmap() & &input_vis; input.set_visibility(calc_then_vis.clone()); let then_res = then.eval(&input).await?; calc_then_vis