This is an automated email from the ASF dual-hosted git repository.

mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new b4bcd3b69a [CALCITE-6345] Intervals with more than 100 years are not 
supported
b4bcd3b69a is described below

commit b4bcd3b69a39ac40974690d1bd4ea08f364638ce
Author: Mihai Budiu <[email protected]>
AuthorDate: Tue Apr 16 20:29:05 2024 -0700

    [CALCITE-6345] Intervals with more than 100 years are not supported
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 .../apache/calcite/sql/SqlIntervalQualifier.java   |  2 +-
 .../org/apache/calcite/test/SqlValidatorTest.java  |  6 +++--
 .../java/org/apache/calcite/test/IntervalTest.java | 26 ++++++++++------------
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java 
b/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java
index 91e70e09bc..b3a29c715d 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java
@@ -297,7 +297,7 @@ public class SqlIntervalQualifier extends SqlNode {
 
   public int getStartPrecision(RelDataTypeSystem typeSystem) {
     if (startPrecision == RelDataType.PRECISION_NOT_SPECIFIED) {
-      return typeSystem.getDefaultPrecision(typeName());
+      return typeSystem.getMaxPrecision(typeName());
     } else {
       return startPrecision;
     }
diff --git a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java 
b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
index e68d94c869..4b5ffd63d1 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
@@ -2262,6 +2262,8 @@ public class SqlValidatorTest extends 
SqlValidatorTestCase {
     expr("INTERVAL '5' MONTH").assertInterval(is(5L));
     expr("INTERVAL '3-2' YEAR TO MONTH").assertInterval(is(38L));
     expr("INTERVAL '-5-4' YEAR TO MONTH").assertInterval(is(-64L));
+    expr("INTERVAL '100-2' YEAR TO MONTH").assertInterval(is(1202L));
+    expr("INTERVAL '1000-2' YEAR TO MONTH").assertInterval(is(12002L));
   }
 
   @Test void testIntervalMillisConversion() {
@@ -2381,9 +2383,9 @@ public class SqlValidatorTest extends 
SqlValidatorTestCase {
         .columnType("TIME(0) NOT NULL");
 
     expr("interval '1' day + interval '1' DAY(4)")
-        .columnType("INTERVAL DAY(4) NOT NULL");
+        .columnType("INTERVAL DAY NOT NULL");
     expr("interval '1' day(5) + interval '1' DAY")
-        .columnType("INTERVAL DAY(5) NOT NULL");
+        .columnType("INTERVAL DAY NOT NULL");
     expr("interval '1' day + interval '1' HOUR(10)")
         .columnType("INTERVAL DAY TO HOUR NOT NULL");
     expr("interval '1' day + interval '1' MINUTE")
diff --git a/testkit/src/main/java/org/apache/calcite/test/IntervalTest.java 
b/testkit/src/main/java/org/apache/calcite/test/IntervalTest.java
index 7b45a9f50f..d771f42118 100644
--- a/testkit/src/main/java/org/apache/calcite/test/IntervalTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/IntervalTest.java
@@ -871,7 +871,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' YEAR")
-        .fails("Interval field value 100 exceeds precision of YEAR\\(2\\) 
field.*");
+        .columnType("INTERVAL YEAR NOT NULL");
     f.wholeExpr("INTERVAL '100' YEAR(2)")
         .fails("Interval field value 100 exceeds precision of YEAR\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000' YEAR(3)")
@@ -936,7 +936,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100-0' YEAR TO MONTH")
-        .fails("Interval field value 100 exceeds precision of YEAR\\(2\\) 
field.*");
+        .columnType("INTERVAL YEAR TO MONTH NOT NULL");
     f.wholeExpr("INTERVAL '100-0' YEAR(2) TO MONTH")
         .fails("Interval field value 100 exceeds precision of YEAR\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000-0' YEAR(3) TO MONTH")
@@ -1124,7 +1124,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' MONTH")
-        .fails("Interval field value 100 exceeds precision of MONTH\\(2\\) 
field.*");
+        .columnType("INTERVAL MONTH NOT NULL");
     f.wholeExpr("INTERVAL '100' MONTH(2)")
         .fails("Interval field value 100 exceeds precision of MONTH\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000' MONTH(3)")
@@ -1180,7 +1180,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' DAY")
-        .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
+        .columnType("INTERVAL DAY NOT NULL");
     f.wholeExpr("INTERVAL '100' DAY(2)")
         .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000' DAY(3)")
@@ -1245,7 +1245,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100 0' DAY TO HOUR")
-        .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
+        .columnType("INTERVAL DAY TO HOUR NOT NULL");
     f.wholeExpr("INTERVAL '100 0' DAY(2) TO HOUR")
         .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000 0' DAY(3) TO HOUR")
@@ -1323,7 +1323,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100 0:0' DAY TO MINUTE")
-        .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
+        .columnType("INTERVAL DAY TO MINUTE NOT NULL");
     f.wholeExpr("INTERVAL '100 0:0' DAY(2) TO MINUTE")
         .fails("Interval field value 100 exceeds precision of DAY\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000 0:0' DAY(3) TO MINUTE")
@@ -1511,8 +1511,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' HOUR")
-        .fails("Interval field value 100 exceeds precision of "
-            + "HOUR\\(2\\) field.*");
+        .columnType("INTERVAL HOUR NOT NULL");
     f.wholeExpr("INTERVAL '100' HOUR(2)")
         .fails("Interval field value 100 exceeds precision of "
             + "HOUR\\(2\\) field.*");
@@ -1580,7 +1579,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100:0' HOUR TO MINUTE")
-        .fails("Interval field value 100 exceeds precision of HOUR\\(2\\) 
field.*");
+        .columnType("INTERVAL HOUR TO MINUTE NOT NULL");
     f.wholeExpr("INTERVAL '100:0' HOUR(2) TO MINUTE")
         .fails("Interval field value 100 exceeds precision of HOUR\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000:0' HOUR(3) TO MINUTE")
@@ -1659,8 +1658,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100:0:0' HOUR TO SECOND")
-        .fails("Interval field value 100 exceeds precision of "
-            + "HOUR\\(2\\) field.*");
+        .columnType("INTERVAL HOUR TO SECOND NOT NULL");
     f.wholeExpr("INTERVAL '100:0:0' HOUR(2) TO SECOND")
         .fails("Interval field value 100 exceeds precision of "
             + "HOUR\\(2\\) field.*");
@@ -1736,7 +1734,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' MINUTE")
-        .fails("Interval field value 100 exceeds precision of MINUTE\\(2\\) 
field.*");
+        .columnType("INTERVAL MINUTE NOT NULL");
     f.wholeExpr("INTERVAL '100' MINUTE(2)")
         .fails("Interval field value 100 exceeds precision of MINUTE\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000' MINUTE(3)")
@@ -1809,7 +1807,7 @@ public class IntervalTest {
     //  (default, explicit default, alt, neg alt, max, neg max)
     //  plus >max value for mid/end fields
     f.wholeExpr("INTERVAL '100:0' MINUTE TO SECOND")
-        .fails("Interval field value 100 exceeds precision of MINUTE\\(2\\) 
field.*");
+        .columnType("INTERVAL MINUTE TO SECOND NOT NULL");
     f.wholeExpr("INTERVAL '100:0' MINUTE(2) TO SECOND")
         .fails("Interval field value 100 exceeds precision of MINUTE\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000:0' MINUTE(3) TO SECOND")
@@ -1883,7 +1881,7 @@ public class IntervalTest {
     // Field value out of range
     //  (default, explicit default, alt, neg alt, max, neg max)
     f.wholeExpr("INTERVAL '100' SECOND")
-        .fails("Interval field value 100 exceeds precision of SECOND\\(2\\) 
field.*");
+        .columnType("INTERVAL SECOND NOT NULL");
     f.wholeExpr("INTERVAL '100' SECOND(2)")
         .fails("Interval field value 100 exceeds precision of SECOND\\(2\\) 
field.*");
     f.wholeExpr("INTERVAL '1000' SECOND(3)")

Reply via email to