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