[ 
https://issues.apache.org/jira/browse/CALCITE-5607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17786133#comment-17786133
 ] 

Oliver Lee commented on CALCITE-5607:
-------------------------------------

Sorry I just saw this reply. I checked the commit log earlier and I guess there 
was some inconsistencies with the commit message titles and what you've 
described – I will note for future reference.

I believe this case is really just for {{TIMESTAMP_DIFF}} and {{MINUS}} 
normally works. 

In this instance it is due to how we use [makeCall to create the 
MINUS_DATE|https://github.com/apache/calcite/blob/c28d1dcbc34e748b7bea9712ef6bcf43793a91e8/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java#L2113-L2116]

> 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)

Reply via email to