Steven Talbot created CALCITE-4495: -------------------------------------- Summary: Sarg simplification with IS_NULL and unknown type throws IllegalArgumentException Key: CALCITE-4495 URL: https://issues.apache.org/jira/browse/CALCITE-4495 Project: Calcite Issue Type: Bug Reporter: Steven Talbot
Apologies. After spending an hour or so trying to write a simple repro for this I was unable to, so filing a bug for now so I have something to reference on my end. There is a condition in which this code explodes, here's the traceback: {noformat} Java::JavaLang::IllegalArgumentException: com.google.common.base.Preconditions.checkArgument(com/google/common/base/Preconditions.java:128) org.apache.calcite.rex.RexLiteral.<init>(org/apache/calcite/rex/RexLiteral.java:221) org.apache.calcite.rex.RexBuilder.makeLiteral(org/apache/calcite/rex/RexBuilder.java:982) org.apache.calcite.rex.RexBuilder.makeSearchArgumentLiteral(org/apache/calcite/rex/RexBuilder.java:1077) org.apache.calcite.rex.RexSimplify$SargCollector.fix(org/apache/calcite/rex/RexSimplify.java:2719) org.apache.calcite.rex.RexSimplify.lambda$simplifyAnd$4(org/apache/calcite/rex/RexSimplify.java:1335) java.util.ArrayList.forEach(java/util/ArrayList.java:1257) org.apache.calcite.rex.RexSimplify.simplifyAnd(org/apache/calcite/rex/RexSimplify.java:1335) org.apache.calcite.rex.RexSimplify.simplify(org/apache/calcite/rex/RexSimplify.java:274) org.apache.calcite.rex.RexSimplify.simplifyUnknownAs(org/apache/calcite/rex/RexSimplify.java:243) org.apache.calcite.rex.RexSimplify.simplifyUnknownAsFalse(org/apache/calcite/rex/RexSimplify.java:232) org.apache.calcite.plan.SubstitutionVisitor.splitFilter(org/apache/calcite/plan/SubstitutionVisitor.java:307) org.apache.calcite.rel.rules.materialize.MaterializedViewRule.computeCompensationPredicates(org/apache/calcite/rel/rules/materialize/MaterializedViewRule.java:834){noformat} It has _something_ to do with trying to calling into `splitFilter` with an OR(x, IS_NULL(x)) and a IS_NOT_NULL(x), where x is an unknown type. Here is my failed attempt to make a repro case (in Kotlin, again sorry): {noformat} @Test fun testUnknownBadness() { val relBuilder = relBuilder() val unknownTypeFunc = object: SqlOperator("some_func", SqlKind.OTHER, 0, false, null, null, null) { override fun getSyntax(): SqlSyntax { return SqlSyntax.FUNCTION } override fun inferReturnType(opBinding: SqlOperatorBinding): RelDataType { return opBinding.typeFactory.createUnknownType() } } val boolFunc = object: SqlOperator("bool_func", SqlKind.OTHER, 0, false, ReturnTypes.BOOLEAN, null, null) { override fun getSyntax(): SqlSyntax { return SqlSyntax.FUNCTION } } relBuilder.values(listOf("age").toTypedArray(), 25) relBuilder.project(relBuilder.field("age"), relBuilder.call(unknownTypeFunc, relBuilder.field("age"))) val ex = RexUtil.EXECUTOR val simpl = RexSimplify(relBuilder.rexBuilder, RelOptPredicateList.EMPTY, ex) SubstitutionVisitor.splitFilter(simpl, relBuilder.rexBuilder.makeCall( SqlStdOperatorTable.OR, relBuilder.call(SqlStdOperatorTable.IS_NULL, relBuilder.field(1)), relBuilder.call(boolFunc, relBuilder.field(1)) ), relBuilder.call(SqlStdOperatorTable.IS_NOT_NULL, relBuilder.field(1))) } {noformat} Chatting with [~julianhyde], we have the strong suspicion this relates to CALCITE-4446, though I can't say for sure because I'm unable to boil it down right now into something simple. -- This message was sent by Atlassian Jira (v8.3.4#803005)