[
https://issues.apache.org/jira/browse/CALCITE-5607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17787569#comment-17787569
]
Julian Hyde commented on CALCITE-5607:
--------------------------------------
[~oliverlee], In my review (above) I gave a +1 conditional on you making 3
edits. You only did one of the three. You did not say this was about datetime
minus in the commit message, and you did not include the summary in the test
case javadoc.
> Error when deserializing TIMESTAMP_DIFF in RelJson#toJson
> ---------------------------------------------------------
>
> Key: CALCITE-5607
> URL: https://issues.apache.org/jira/browse/CALCITE-5607
> Project: Calcite
> Issue Type: Improvement
> Reporter: Oliver Lee
> Assignee: Oliver Lee
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.37.0
>
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> We found a bug in {{RelJson#toRex}} for the {{TIMESTAMP_DIFF}} call for Big
> Query dialect.
> {{TIMESTAMP_DIFF}} is translated to the {{MINUS_DATE}}
> [operator|https://github.com/apache/calcite/blob/c28d1dcbc34e748b7bea9712ef6bcf43793a91e8/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java#L2113-L2116]
> with a return type explicitly declared as the interval.
> {{MINUS_DATE}} uses an
> {{[ARG2_NULLABLE|https://github.com/apache/calcite/blob/c28d1dcbc34e748b7bea9712ef6bcf43793a91e8/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java#L241]}}
> return type inference which requires 3 operands. This is fine in most cases
> where the RexCall is then used to generate SQL or for native implementations.
> However, in {{{}RelJson#toRex{}}}, when it tries to reconstruct the entire
> call to a RexNode, it attempts to derive the return type of the
> {{MINUS_DATE}} operator using the {{ARG2_NULLABLE}} inference. This throws an
> error as there are only 2 operands given to the {{MINUS_DATE}} operator.
>
> The solution here is to do something similar to how we handle {{CAST}} and to
> add in "type" when serializing to JSON in {{RelJson.toJson(RexNode node)}}
> for {{SqlKind.MINUS}} so that
> {{[jsonType|https://github.com/apache/calcite/blob/c28d1dcbc34e748b7bea9712ef6bcf43793a91e8/core/src/main/java/org/apache/calcite/rel/externalize/RelJson.java#L712]}}
> will be defined in {{{}toRex{}}}.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)