Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Cannot Reproduce
-
None
Description
The problem appears to be caused by an inconsistency of RelReader and RexBuilder: RelReader diserializes every integer value as a value of type Integer, but the RexBuilder assumes that for TIMESTAMP literal a value of type Long will be passed, and make the explicit cast:
// RexBuilder#clean(Object, RelDataType) case TIMESTAMP: if (o instanceof TimestampString) { return o; } else if (o instanceof Calendar) { if (!((Calendar) o).getTimeZone().equals(DateTimeUtils.UTC_ZONE)) { throw new AssertionError(); } return TimestampString.fromCalendarFields((Calendar) o); } else { return TimestampString.fromMillisSinceEpoch((Long) o); }
Here is a stack trace:
Caused by: java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap') at org.apache.calcite.rex.RexBuilder.clean(RexBuilder.java:1780) at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:1558) at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:1520) at org.apache.ignite.internal.sql.engine.externalize.RelJson.toRex(RelJson.java:759) at org.apache.ignite.internal.sql.engine.externalize.RelJsonReader$RelInputImpl.getTuple(RelJsonReader.java:367) at org.apache.ignite.internal.sql.engine.externalize.RelJsonReader$RelInputImpl.getTuples(RelJsonReader.java:347) ... 24 more
Attachments
Issue Links
- is a clone of
-
IGNITE-16906 Calcite. ClassCastException when deserialising TIMESTAMP literal
-
- Reopened
-