Danny Chen created CALCITE-4479: ----------------------------------- Summary: "vFloat in (1.0, 2.0)" throws UnsupportedOperationException Key: CALCITE-4479 URL: https://issues.apache.org/jira/browse/CALCITE-4479 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.26.0 Reporter: Danny Chen Assignee: Danny Chen Fix For: 1.27.0
Check this test in {{RexBuilderTest}}: {code:java} @Test void testMakeIn() { final RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); final RexBuilder rexBuilder = new RexBuilder(typeFactory); final RelDataType floatType = typeFactory.createSqlType(SqlTypeName.FLOAT); RexNode left = rexBuilder.makeInputRef(floatType, 0); final RexNode literal1 = rexBuilder.makeLiteral(1.0f, floatType); final RexNode literal2 = rexBuilder.makeLiteral(2.0f, floatType); RexNode inCall = rexBuilder.makeIn(left, ImmutableList.of(literal1, literal2)); assertThat(inCall.getKind(), is(SqlKind.SEARCH)); } {code} The stacktrace is: {noformat} class org.apache.calcite.sql.type.SqlTypeName: FLOAT java.lang.UnsupportedOperationException: class org.apache.calcite.sql.type.SqlTypeName: FLOAT at org.apache.calcite.util.Util.needToImplement(Util.java:1085) at org.apache.calcite.rex.RexLiteral.appendAsJava(RexLiteral.java:726) at org.apache.calcite.rex.RexLiteral.toJavaString(RexLiteral.java:427) at org.apache.calcite.rex.RexLiteral.computeDigest(RexLiteral.java:289) at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:233) at org.apache.calcite.rex.RexLiteral.toLiteral(RexLiteral.java:762) at org.apache.calcite.rex.RexLiteral.lambda$printSarg$4(RexLiteral.java:733) at org.apache.calcite.util.RangeSets$Printer.singleton(RangeSets.java:409) at org.apache.calcite.util.RangeSets.forEach(RangeSets.java:249) at org.apache.calcite.util.Sarg.lambda$printTo$0(Sarg.java:119) at org.apache.calcite.linq4j.Ord.forEach(Ord.java:157) at org.apache.calcite.util.Sarg.printTo(Sarg.java:115) at org.apache.calcite.rex.RexLiteral.printSarg(RexLiteral.java:732) at org.apache.calcite.rex.RexLiteral.lambda$appendAsJava$1(RexLiteral.java:673) at org.apache.calcite.util.Util.asStringBuilder(Util.java:2525) at org.apache.calcite.rex.RexLiteral.appendAsJava(RexLiteral.java:672) at org.apache.calcite.rex.RexLiteral.toJavaString(RexLiteral.java:427) at org.apache.calcite.rex.RexLiteral.computeDigest(RexLiteral.java:289) at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:233) at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:990) at org.apache.calcite.rex.RexBuilder.makeSearchArgumentLiteral(RexBuilder.java:1085) at org.apache.calcite.rex.RexBuilder.makeIn(RexBuilder.java:1335) at org.apache.calcite.rex.RexBuilderTest.testMakeIn(RexBuilderTest.java:621) {noformat} The root cause is that {{RexLiteral#strictTypeName}} has different type name strategies with what {{RexBuilder.makeLiteral}} follows, the best way to fix is to make the rules synced, but here i only give a simple fix because the code path only used for Sarg digest. -- This message was sent by Atlassian Jira (v8.3.4#803005)