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

Julian Hyde edited comment on CALCITE-1553 at 12/23/16 6:45 PM:
----------------------------------------------------------------

I don't see a problem. I ran your example and it gave the correct result, 
{{date '2009-12-31'}}.

{noformat}
diff --git 
a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java 
b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index 3b90848..63c3e52 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -2765,6 +2765,12 @@ protected static Calendar getCalendarNotTooNear(int 
timeUnit) {
         "DATE NOT NULL");
   }
 
+  @Test public void testDatePlusMonthInterval() {
+    tester.checkScalar("date '2008-12-31' + interval '1' year",
+        "2009-12-31",
+        "DATE NOT NULL");
+  }
+
   @Test public void testNotEqualsOperator() {
     tester.setFor(SqlStdOperatorTable.NOT_EQUALS);
     tester.checkBoolean("1<>1", Boolean.FALSE);
{noformat}

Maybe you misunderstand how interval literals are represented internally: YEAR 
and MONTH intervals are represented in months, all others are represented in 
seconds. Normalizing units makes things easier for Calcite internals.

Can you describe the benefits of exposing {{SqlNodeToRexConverter}}? The cost 
(albeit a fairly minor one) is that it is yet another API that we have to 
maintain compatibility in. We already expose {{SqlRexConvertletTable}} (see 
CALCITE-250), so that gives you control over how function and operator calls 
are translated.


was (Author: julianhyde):
I don't see a problem. I ran your example and it gave the correct result, 
{{date '2009-12-31'}}.

{noformat}
diff --git 
a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java 
b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index 3b90848..63c3e52 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -2765,6 +2765,12 @@ protected static Calendar getCalendarNotTooNear(int 
timeUnit) {
         "DATE NOT NULL");
   }
 
+  @Test public void testDatePlusMonthInterval() {
+    tester.checkScalar("date '2008-12-31' + interval '1' year",
+        "2009-12-31",
+        "DATE NOT NULL");
+  }
+
   @Test public void testNotEqualsOperator() {
     tester.setFor(SqlStdOperatorTable.NOT_EQUALS);
     tester.checkBoolean("1<>1", Boolean.FALSE);
{noformat}

Maybe you misunderstand how interval literals are represented internally: YEAR 
and MONTH intervals are represented in months, all others are represented in 
seconds. Normalizing units makes things easier for Calcite internals.

Can you describe the benefits of exposing `SqlNodeToRexConverter`? The cost 
(albeit a fairly minor one) is that it is yet another API that we have to 
maintain compatibility in. We already expose `SqlRexConvertletTable` (see 
CALCITE-250), so that gives you control over how function and operator calls 
are translated.

> Forget to change qualifier when converting INVERVAL_YEAR literal
> ----------------------------------------------------------------
>
>                 Key: CALCITE-1553
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1553
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Baofeng Zhang
>            Assignee: Julian Hyde
>
> If I execute this SQL:
> {code}SELECT date '2008-12-31' + INTERVAL '1' YEAR{code}
> {{INTERVAL '1' YEAR}} is converted into {{INTERVAL '12' YEAR}} inside 
> {{SqlNodeToRexConverterImpl.convertLiteral}} method, which forgets to change 
> qualifier to MONTH.
> Besides {{INTERVAL_YEAR_MONTH}}, there maybe other {{SqlTypeFamily}} have the 
> same problem. 
> In addition, can we expose {{SqlNodeToRexConverter}} in {{SqlToRelConverter}} 
> to let developer to plugin their own converter?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to