[ 
https://issues.apache.org/jira/browse/CALCITE-4479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated CALCITE-4479:
------------------------------------
    Labels: pull-request-available  (was: )

> "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
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.27.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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)

Reply via email to