[ https://issues.apache.org/jira/browse/CALCITE-5489?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17679770#comment-17679770 ]
Sergey Nuyanzin commented on CALCITE-5489: ------------------------------------------ yes it looks like a regression, same test is passing on 1.32.0 Ok, thanks for mentioning this, update to blocker > Cannot convert TIMESTAMP literal to class > org.apache.calcite.avatica.util.TimeUnit > ---------------------------------------------------------------------------------- > > Key: CALCITE-5489 > URL: https://issues.apache.org/jira/browse/CALCITE-5489 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.33.0 > Reporter: Sergey Nuyanzin > Priority: Major > Labels: pull-request-available > Time Spent: 20m > Remaining Estimate: 0h > > It seems it stops working after > {noformat} > [CALCITE-5360] Add TIMESTAMP_ADD function (enabled in BigQuery > library){noformat} > for {{RexCallBinding}} > e.g. this test starts failing > {code:java} > @Test void testTimestampDiffCall() { > final RelDataTypeFactory typeFactory = new > SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); > RexBuilder rexBuilder = new RexBuilder(typeFactory); > final RexImplicationCheckerFixtures.Fixture f = new > RexImplicationCheckerFixtures.Fixture(); > final TimestampString ts = > TimestampString.fromCalendarFields(Util.calendar()); > rexBuilder.makeCall(SqlStdOperatorTable.TIMESTAMP_DIFF, > ImmutableList.of(rexBuilder.makeFlag(TimeUnit.QUARTER), > f.timestampLiteral(ts), f.timestampLiteral(ts))); > } > {code} > like > {noformat} > cannot convert TIMESTAMP literal to class > org.apache.calcite.avatica.util.TimeUnit > java.lang.AssertionError: cannot convert TIMESTAMP literal to class > org.apache.calcite.avatica.util.TimeUnit > at org.apache.calcite.rex.RexLiteral.getValueAs(RexLiteral.java:1143) > at > org.apache.calcite.rex.RexCallBinding.getOperandLiteralValue(RexCallBinding.java:100) > at > org.apache.calcite.sql.fun.SqlTimestampDiffFunction.inferReturnType2(SqlTimestampDiffFunction.java:69) > at > org.apache.calcite.sql.SqlOperator.inferReturnType(SqlOperator.java:537) > at > org.apache.calcite.rex.RexBuilder.deriveReturnType(RexBuilder.java:292) > at org.apache.calcite.rex.RexBuilder.makeCall(RexBuilder.java:266) > at > org.apache.calcite.rex.RexBuilderTest.testTimestampDiffCall(RexBuilderTest.java:863) > ... > {noformat} > It seems it recognise {{FLAG(QUARTER)}} as a literal... > at {{org.apache.calcite.sql.fun.SqlTimestampDiffFunction#inferReturnType2}} > {code:java} > if (opBinding.isOperandLiteral(0, true)) { > type1 = opBinding.getOperandType(0); > type2 = opBinding.getOperandType(1); > timeUnit = opBinding.getOperandLiteralValue(2, TimeUnit.class); > } else { > timeUnit = opBinding.getOperandLiteralValue(0, TimeUnit.class); > type1 = opBinding.getOperandType(1); > type2 = opBinding.getOperandType(2); > } > {code} > Probably the condition should be something like that > {code:java} > if (opBinding.getOperandLiteralValue(2, Object.class) instanceof > TimeUnit) { > ...} > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)