You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "TJ Banghart (Jira)" <ji...@apache.org> on 2021/09/01 21:08:00 UTC
[jira] [Updated] (CALCITE-4761) An op with "UNKNOWN" return type
may throw `IllegalArgumentException` when `simplifyingOrs`
[ https://issues.apache.org/jira/browse/CALCITE-4761?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
TJ Banghart updated CALCITE-4761:
---------------------------------
Summary: An op with "UNKNOWN" return type may throw `IllegalArgumentException` when `simplifyingOrs` (was: simplifyingOrs with a "UNKNOWN" return type reference throws `IllegalArgumentException`)
> An op with "UNKNOWN" return type may throw `IllegalArgumentException` when `simplifyingOrs`
> --------------------------------------------------------------------------------------------
>
> Key: CALCITE-4761
> URL: https://issues.apache.org/jira/browse/CALCITE-4761
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.27.0
> Reporter: TJ Banghart
> Priority: Major
>
> [This checkArgument|https://github.com/apache/calcite/blob/017c974e07dd48919e6890dea69320e6ffc406ef/core/src/main/java/org/apache/calcite/rex/RexLiteral.java#L232] may throw an `IllegalArgumentException` while simplifying ORs if the operator's return type is "UNKNOWN".
> For example this test fails with the exception:
> {code:java}
> @Test void testSimplifyLikeOrNullWithUnknownType() {
> final SqlOperator unknownOp = new SqlSpecialOperator(
> "unknown",
> SqlKind.OTHER_FUNCTION,
> 0,
> false, null, null, null) {
> @Override
> public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
> return typeFactory.createUnknownType();
> }
> };
> final RexNode unknownRef = rexBuilder.makeCall(unknownOp);
> final RexNode test = or(
> isNull(unknownRef),
> isNotNull(unknownRef));
> checkSimplify(test, "true");
> }{code}
> Here's the trace:
> {code:java}
> java.lang.IllegalArgumentException
> at com.google.common.base.Preconditions.checkArgument(Preconditions.java:128)
> at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:232)
> at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:993)
> at org.apache.calcite.rex.RexBuilder.makeSearchArgumentLiteral(RexBuilder.java:1088)
> at org.apache.calcite.rex.RexSimplify$SargCollector.fix(RexSimplify.java:2937)
> at org.apache.calcite.rex.RexSimplify.lambda$simplifyOrs$7(RexSimplify.java:1964)
> at java.util.ArrayList.forEach(ArrayList.java:1257)
> at org.apache.calcite.rex.RexSimplify.simplifyOrs(RexSimplify.java:1963)
> at org.apache.calcite.rex.RexSimplify.simplifyOr(RexSimplify.java:1937)
> at org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:281)
> at org.apache.calcite.rex.RexSimplify.simplifyUnknownAs(RexSimplify.java:248)
> at org.apache.calcite.rex.RexProgramTestBase.checkSimplifyAs(RexProgramTestBase.java:152)
> at org.apache.calcite.rex.RexProgramTestBase.checkSimplify3_(RexProgramTestBase.java:136)
> at org.apache.calcite.rex.RexProgramTestBase.checkSimplify(RexProgramTestBase.java:95)
> at org.apache.calcite.rex.RexProgramTest.testSimplifyLikeOrNullWithUnknownType(RexProgramTest.java:3157){code}
> Certainly an edge case but thought I'd record it since it wasn't obvious why this exception was being thrown. Perhaps this is intended behavior.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)