JiajunBernoulli commented on code in PR #3296: URL: https://github.com/apache/calcite/pull/3296#discussion_r1255708038
########## core/src/test/java/org/apache/calcite/rex/RexProgramTest.java: ########## @@ -2458,6 +2458,63 @@ private SqlOperator getNoDeterministicOperator() { checkSimplifyUnchanged(isNull(cast(vVarcharNotNull(), tInt(false)))); } + /** Unit test for + * <a href="https://issues.apache.org/jira/browse/CALCITE-5769">[CALCITE-5769] + * Optimizing 'CAST(e AS t) IS NOT NULL' to 'e IS NOT NULL'</a>. */ + @Test void testSimplifyCastIsNull3() { + // "(cast A as bigint) IS NULL" when A is int and A is not null + // ==> + // "false" + checkSimplify(isNull(cast(vIntNotNull(), tBigInt(false))), "false"); + // "(cast A as smallint) IS NULL" when A is int and A is not null + // ==> + // "(cast A as smallint) IS NULL" + checkSimplifyUnchanged(isNull(cast(vIntNotNull(), tSmallInt(false)))); + } + + /** Unit test for + * <a href="https://issues.apache.org/jira/browse/CALCITE-5769">[CALCITE-5769] + * Optimizing 'CAST(e AS t) IS NOT NULL' to 'e IS NOT NULL'</a>. */ + @Test void testSimplifyCastIsNull4() { + // "(cast A as bigint) IS NULL" when A is int and A is nullable + // ==> + // "A IS NULL" + checkSimplify(isNull(cast(vInt(), tBigInt(true))), "IS NULL(?0.int0)"); + // "(cast A as smallint) IS NULL" when A is int and A is nullable + // ==> + // "(cast A as smallint) IS NULL" + checkSimplifyUnchanged(isNull(cast(vInt(), tSmallInt(true)))); + } + + /** Unit test for + * <a href="https://issues.apache.org/jira/browse/CALCITE-5769">[CALCITE-5769] + * Optimizing 'CAST(e AS t) IS NOT NULL' to 'e IS NOT NULL'</a>. */ + @Test void testSimplifyCastIsNotNull() { + // "(cast A as bigint) IS NOT NULL" when A is int and A is not null + // ==> + // "true" + checkSimplify(isNotNull(cast(vIntNotNull(), tBigInt(false))), "true"); + // "(cast A as smallint) IS NOT NULL" when A is int and A is not null + // ==> + // "(cast A as smallint) IS NOT NULL" + checkSimplifyUnchanged(isNotNull(cast(vIntNotNull(), tSmallInt(false)))); + } + + /** Unit test for + * <a href="https://issues.apache.org/jira/browse/CALCITE-5769">[CALCITE-5769] + * Optimizing 'CAST(e AS t) IS NOT NULL' to 'e IS NOT NULL'</a>. */ + @Test void testSimplifyCastIsNotNull2() { + // "(cast A as bigint) IS NOT NULL" when A is int and A is nullable + // ==> + // "A IS NOT NULL" + checkSimplify(isNotNull(cast(vInt(), tBigInt(true))), "IS NOT NULL(?0.int0)"); Review Comment: @NobiGo Thanks for your detailed explanation. I will approve if the CI success. -- 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: commits-unsubscr...@calcite.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org