Hi Anton, The TIMESTAMPADD operator never ends up in the logical plan so essentially there is no code for executing it. It is just used as a syntactic sugar in the parser.
Have a look below to see how you can obtain the equivalent in relational algebra: https://github.com/apache/calcite/blob/8eb852039db04c132ae7a99943495f87cf39dfd2/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java#L1437 Best, Stamatis Στις Παρ, 22 Φεβ 2019 στις 3:51 μ.μ., ο/η Anton Haidai < [email protected]> έγραψε: > Hongze, thank you for your answer. Your code successfully produces a > plan with the following node: > > EnumerableCalc(.... expr#6=[TIMESTAMPADD($t3, $t4, $t5)] ...) > > But Calcite (both 1.18 and 1.19-SNAPSHOT) can't execute this plan: > > Caused by: java.lang.RuntimeException: cannot translate call > TIMESTAMPADD($t3, $t4, $t5) > at > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCall(RexToLixTranslator.java:719) > at > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate0(RexToLixTranslator.java:693) > at > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:197) > > While the SQL from my first message produces the following node: > > EnumerableCalc(expr#0..26=[{inputs}], expr#27=[1], expr#28=[1], > expr#29=[*($t27, $t28)], expr#30=[+($t0, $t29)], EXPR$0=[$t30]) > > And Calcite is able to execute it. So now I'm trying to replicate it > using a RelBuilder (using INTERVAL instead of TIMESTAMP_ADD), without > a success so far. > > On Fri, Feb 22, 2019 at 4:11 PM Hongze Zhang <[email protected]> wrote: > > > > Correct the flag: > > TimeUnitRange.MONTH -> TimeUnit.MONTH > > > > > > Best, > > Hongze > > > > > > > > > > > > > > > > > > > > > > At 2019-02-22 22:07:11, "Hongze Zhang" <[email protected]> wrote: > > > > Hi Anton, > > > > > > Following code works to me: > > > > > > > > final RexNode shiftedDateField = > > > > relBuilder.call( > > > > SqlStdOperatorTable.TIMESTAMP_ADD, > > > > relBuilder.getRexBuilder().makeFlag(TimeUnitRange.MONTH), > > > > relBuilder.literal(1), > > > > relBuilder.getRexBuilder().makeDateLiteral(new DateString(2019, > 1, 1)) > > > > ); > > > > > > > > > > > > Best, > > Hongze > > > > > > > > > > > > At 2019-02-22 19:16:09, "Anton Haidai" <[email protected]> wrote: > > >Hello. In SQL, I can execute a query like "SELECT TIMESTAMPADD(month, > > >1, "date" ) FROM ..." and it works. But my attempts to do the same > > >thing using RelBuilder are not successful, for example, this code does > > >not work: > > > > > >RexNode shiftedDateField = relBuilder.call( > > > SqlStdOperatorTable.TIMESTAMP_ADD, > > > relBuilder.literal("month"), > > > relBuilder.literal(1), > > > dateFieldRef > > >); > > > > > >Could you please tell me, how to make a TIMESTAMP_ADD call using > RelBuilder? > > >-- > > >Best regards, > > >Anton. > > > > > > > > > > > > > > > > -- > Best regards, > Anton. >
