[
https://issues.apache.org/jira/browse/CALCITE-5010?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17495812#comment-17495812
]
Jiajun Xie commented on CALCITE-5010:
-------------------------------------
[~tdsilva] I understand your purpose and solution. It is not appropriate to use
*SqlRexConvertlet* directly. Perhaps you can extract the code in *convertCall*
and use it for *RelbBuilder* and *SqlRexconverter.*
In addition, If *RelBuilder* also uses transformations, RelToSql will no longer
be {_}TIIMESTAMPDIFF{_}(I think some people only need to use *RelBuilder* to
build _TIMESTAMPDIFF_ without using convert. ). So if you can explain why the
behavior of *RelBuilder* must be consistent with SqlToRel, it may help you
redesign.
> Modify RexBuilder to use convertlets to transform the RexCall when possible
> ---------------------------------------------------------------------------
>
> Key: CALCITE-5010
> URL: https://issues.apache.org/jira/browse/CALCITE-5010
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Reporter: Thomas D'Silva
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 10m
> Remaining Estimate: 0h
>
> SqlRexConvertlets are used to transform a SqlCall into a RexCall while
> parsing a sql string. A RelNode that is created using RelBuilder does not use
> the same transformations. This causes the following error while trying to use
> RelBuilder to create a relnode that use {{{}TIMESTAMPDIFF(){}}}.
> {code:java}
> Suppressed: java.lang.RuntimeException: cannot translate call
> TIMESTAMPDIFF($t8, $t4, $t9)
> at
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitCall(RexToLixTranslator.java:1157)
> at
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitCall(RexToLixTranslator.java:98)
> {code}
> Modify RexBuilder to check if there is a convertlet that exists for the
> operator being constructed and transform the RexCall using the convertlet.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)