askoa commented on code in PR #3669:
URL: https://github.com/apache/arrow-datafusion/pull/3669#discussion_r985239232


##########
datafusion/optimizer/src/simplify_expressions.rs:
##########
@@ -790,6 +791,37 @@ impl<'a, S: SimplifyInfo> ExprRewriter for Simplifier<'a, 
S> {
                 right,
             } if !info.nullable(&left)? && left == right => lit(1),
 
+            //
+            // Rules for Modulo
+            //
+
+            // A % null --> null
+            BinaryExpr {
+                left: _,
+                op: Modulo,
+                right,
+            } if is_null(&right) => *right,
+            // null % A --> null
+            BinaryExpr {
+                left,
+                op: Modulo,
+                right: _,
+            } if is_null(&left) => *left,
+            // A % 1 --> 0
+            BinaryExpr {
+                left,
+                op: Modulo,
+                right,
+            } if !info.nullable(&left)? && is_one(&right) => lit(0),
+            // A % 0 --> DivideByZero Error
+            BinaryExpr {
+                left,
+                op: Modulo,
+                right,
+            } if !info.nullable(&left)? && is_zero(&right) => {
+                return 
Err(DataFusionError::ArrowError(ArrowError::DivideByZero))

Review Comment:
   I agree with @HaoYang670.  It does make sense to stop users from writing 
wrong queries irrespective of its going to be executed at runtime or not. If `A 
% 0` is wrong then why not force the user to change the query at compile time 
rather than taking a chance to see if that expression gets executed at run time?
   
   Edit: I have changed this PR to Draft. Will update the PR once we come to an 
agreement.



-- 
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...@arrow.apache.org

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

Reply via email to