anthonylouisbsb commented on a change in pull request #12526:
URL: https://github.com/apache/arrow/pull/12526#discussion_r827246327



##########
File path: cpp/src/gandiva/precompiled/arithmetic_ops.cc
##########
@@ -234,20 +234,42 @@ NUMERIC_TYPES(VALIDITY_OP, isnumeric, +)
 
 #undef VALIDITY_OP
 
-#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP) \
-  FORCE_INLINE                                \
-  gdv_##TYPE NAME##_boolean(gdv_##TYPE in) { return OP in; }
+#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP)                      \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return is_valid && OP in;                                      \
+  }
+
+#define IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(NAME, TYPE, OP)           \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return !is_valid ? true : OP in;                               \

Review comment:
       I think you can rewrite it to `!is_valid || OP in;`

##########
File path: cpp/src/gandiva/precompiled/arithmetic_ops.cc
##########
@@ -234,20 +234,42 @@ NUMERIC_TYPES(VALIDITY_OP, isnumeric, +)
 
 #undef VALIDITY_OP
 
-#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP) \
-  FORCE_INLINE                                \
-  gdv_##TYPE NAME##_boolean(gdv_##TYPE in) { return OP in; }
+#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP)                      \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return is_valid && OP in;                                      \
+  }
+
+#define IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(NAME, TYPE, OP)           \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return !is_valid ? true : OP in;                               \
+  }
+
+IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(isnottrue, boolean, !)
+IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(isnotfalse, boolean, +)
 
 IS_TRUE_OR_FALSE_BOOL(istrue, boolean, +)
 IS_TRUE_OR_FALSE_BOOL(isfalse, boolean, !)
 
-#define IS_TRUE_OR_FALSE_NUMERIC(NAME, TYPE, OP) \
-  FORCE_INLINE                                   \
-  gdv_boolean NAME##_##TYPE(gdv_##TYPE in) { return OP(in != 0 ? true : 
false); }
+#define IS_TRUE_OR_FALSE_NUMERIC(NAME, TYPE, OP)                   \
+  FORCE_INLINE                                                     \
+  gdv_boolean NAME##_##TYPE(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return is_valid && OP(in != 0 ? true : false);                 \

Review comment:
       I think you can just keep it as `is_valid && OP(in != 0)`

##########
File path: cpp/src/gandiva/precompiled/arithmetic_ops.cc
##########
@@ -234,20 +234,42 @@ NUMERIC_TYPES(VALIDITY_OP, isnumeric, +)
 
 #undef VALIDITY_OP
 
-#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP) \
-  FORCE_INLINE                                \
-  gdv_##TYPE NAME##_boolean(gdv_##TYPE in) { return OP in; }
+#define IS_TRUE_OR_FALSE_BOOL(NAME, TYPE, OP)                      \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return is_valid && OP in;                                      \
+  }
+
+#define IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(NAME, TYPE, OP)           \
+  FORCE_INLINE                                                     \
+  gdv_##TYPE NAME##_boolean(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return !is_valid ? true : OP in;                               \
+  }
+
+IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(isnottrue, boolean, !)
+IS_NOT_TRUE_OR_IS_NOT_FALSE_BOOL(isnotfalse, boolean, +)
 
 IS_TRUE_OR_FALSE_BOOL(istrue, boolean, +)
 IS_TRUE_OR_FALSE_BOOL(isfalse, boolean, !)
 
-#define IS_TRUE_OR_FALSE_NUMERIC(NAME, TYPE, OP) \
-  FORCE_INLINE                                   \
-  gdv_boolean NAME##_##TYPE(gdv_##TYPE in) { return OP(in != 0 ? true : 
false); }
+#define IS_TRUE_OR_FALSE_NUMERIC(NAME, TYPE, OP)                   \
+  FORCE_INLINE                                                     \
+  gdv_boolean NAME##_##TYPE(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return is_valid && OP(in != 0 ? true : false);                 \
+  }
 
 NUMERIC_TYPES(IS_TRUE_OR_FALSE_NUMERIC, istrue, +)
 NUMERIC_TYPES(IS_TRUE_OR_FALSE_NUMERIC, isfalse, !)
 
+#define IS_NOT_TRUE_OR_IS_NOT_FALSE_NUMERIC(NAME, TYPE, OP)        \
+  FORCE_INLINE                                                     \
+  gdv_boolean NAME##_##TYPE(gdv_##TYPE in, gdv_boolean is_valid) { \
+    return !is_valid ? true : (OP(in != 0 ? true : false));        \

Review comment:
       I think you can keep it as `!is_valid || OP(in != 0)`




-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to