acking-you commented on code in PR #15462:
URL: https://github.com/apache/datafusion/pull/15462#discussion_r2020615756


##########
datafusion/physical-expr/src/expressions/binary.rs:
##########
@@ -805,6 +811,47 @@ impl BinaryExpr {
     }
 }
 
+/// Check if it meets the short-circuit condition
+/// 1. For the `AND` operator, if the `lhs` result all are `false`
+/// 2. For the `OR` operator, if the `lhs` result all are `true`
+/// 3. Otherwise, it does not meet the short-circuit condition
+fn check_short_circuit(arg: &ColumnarValue, op: &Operator) -> bool {
+    let data_type = arg.data_type();
+    match (data_type, op) {
+        (DataType::Boolean, Operator::And) => {
+            match arg {
+                ColumnarValue::Array(array) => {
+                    if let Ok(array) = as_boolean_array(&array) {
+                        return array.false_count() == array.len();

Review Comment:
   > I wonder if it helps to short optimize this expression (e.g. match until 
we get a chunk of the bitmap != 0)
   
   I think the overhead added here should be very small (the compiler 
optimization should work well), and the test results we discussed before were 
sometimes fast and sometimes slow (maybe noise).
   
   Your suggestion of making an early judgment and returning false seems like a 
good idea, but I'm not sure if it will be effective.  
   The concern I have with this approach is that it requires adding an `if` 
condition inside the `for` loop, which will most likely disable the compiler's 
SIMD instruction optimization (I've encountered a similar situation before, and 
I had to manually unroll the SIMD...).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to