From a9d6b485d0fb8b3ca520d022d6e10566e322af8d Mon Sep 17 00:00:00 2001 From: George Date: Mon, 8 Aug 2022 22:59:36 +0800 Subject: [PATCH] fix: physical binary expr compare array with 1 element fix --- .../physical-expr/src/expressions/binary.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/datafusion/physical-expr/src/expressions/binary.rs b/datafusion/physical-expr/src/expressions/binary.rs index 24018a74bc64..85dbd062c769 100644 --- a/datafusion/physical-expr/src/expressions/binary.rs +++ b/datafusion/physical-expr/src/expressions/binary.rs @@ -1251,6 +1251,21 @@ impl PhysicalExpr for BinaryExpr { // if right is literal and left is array - reverse operator and parameters self.evaluate_scalar_array(scalar, array)? } + (ColumnarValue::Array(first_arr), ColumnarValue::Array(second_arr)) + if first_arr.len() != second_arr.len() => + { + if first_arr.len() == 1 { + match ScalarValue::try_from_array(first_arr, 0) { + Ok(scalar) => self.evaluate_scalar_array(&scalar, second_arr)?, + _ => None, + } + } else { + match ScalarValue::try_from_array(second_arr, 0) { + Ok(scalar) => self.evaluate_array_scalar(first_arr, &scalar)?, + _ => None, + } + } + } (_, _) => None, // default to array implementation };