You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Oliver Lee (Jira)" <ji...@apache.org> on 2023/11/14 23:20:00 UTC
[jira] [Updated] (CALCITE-5607) Error when deserializing TIMESTAMP_DIFF in RelJson#toJson
[ https://issues.apache.org/jira/browse/CALCITE-5607?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Oliver Lee updated CALCITE-5607:
--------------------------------
Summary: Error when deserializing TIMESTAMP_DIFF in RelJson#toJson (was: Error when deserializing TIMESTAMP_DIFF in RelJson.toJson())
> 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)