diff --git a/core/src/main/java/org/apache/calcite/util/Bug.java b/core/src/main/java/org/apache/calcite/util/Bug.java
index 90dce754cba..c9a57d4d4af 100644
--- a/core/src/main/java/org/apache/calcite/util/Bug.java
+++ b/core/src/main/java/org/apache/calcite/util/Bug.java
@@ -108,12 +108,6 @@ public abstract class Bug {
*/
public static final boolean FRG254_FIXED = false;
- /**
- * Whether issue
- * FRG-282: Support precision in TIME and TIMESTAMP data types is fixed.
- */
- public static final boolean FRG282_FIXED = false;
-
/**
* Whether issue
* FRG-296: SUBSTRING(string FROM regexp FOR regexp) is fixed.
@@ -211,6 +205,14 @@ public abstract class Bug {
*/
public static final boolean TODO_FIXED = false;
+ /** Whether
+ * [CALCITE-6282]
+ * Avatica ignores time precision when returning TIME results is fixed.
+ * This should be removed once the bug is fixed in Avatica, and
+ * Calcite switches to the most recent version of Avatica.
+ * This is expected to be fixed in Avatica 1.25.0. */
+ public static final boolean CALCITE_6282_FIXED = false;
+
/**
* Use this method to flag temporary code.
*
diff --git a/core/src/test/resources/sql/misc.iq b/core/src/test/resources/sql/misc.iq
index 5999222b455..fd60c24693a 100644
--- a/core/src/test/resources/sql/misc.iq
+++ b/core/src/test/resources/sql/misc.iq
@@ -2136,6 +2136,7 @@ EnumerableAggregate(group=[{}], C=[COUNT()])
EnumerableValues(tuples=[[]])
!plan
+!if (fixed.calcite6828) {
# [CALCITE-1659] Simplifying CAST('YYYY-MM-DD hh:mm:ss.SSS' as TIMESTAMP)
# should round the sub-second fraction
select TIMESTAMP '2016-02-26 19:06:00.123456789',
@@ -2146,17 +2147,20 @@ select TIMESTAMP '2016-02-26 19:06:00.123456789',
CAST('2016-02-26 19:06:00.123' as TIMESTAMP(3)),
CAST('2016-02-26 19:06:00.123' as TIMESTAMP(6)),
CAST('2016-02-26 19:06:00.123' as TIMESTAMP(9));
-+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
-| EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 | EXPR$5 | EXPR$6 | EXPR$7 |
-+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
-| 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 |
-+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
++-------------------------+---------------------+---------------------+-----------------------+------------------------+-------------------------+-------------------------+-------------------------+
+| EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 | EXPR$5 | EXPR$6 | EXPR$7 |
++-------------------------+---------------------+---------------------+-----------------------+------------------------+-------------------------+-------------------------+-------------------------+
+| 2016-02-26 19:06:00.123 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 2016-02-26 19:06:00.1 | 2016-02-26 19:06:00.12 | 2016-02-26 19:06:00.123 | 2016-02-26 19:06:00.123 | 2016-02-26 19:06:00.123 |
++-------------------------+---------------------+---------------------+-----------------------+------------------------+-------------------------+-------------------------+-------------------------+
(1 row)
!ok
EnumerableValues(tuples=[[{ 2016-02-26 19:06:00.123, 2016-02-26 19:06:00, 2016-02-26 19:06:00, 2016-02-26 19:06:00.1, 2016-02-26 19:06:00.12, 2016-02-26 19:06:00.123, 2016-02-26 19:06:00.123, 2016-02-26 19:06:00.123 }]])
!plan
+!}
+
+!if (fixed.calcite6828) {
# [CALCITE-1664] CAST('' as TIMESTAMP) adds part of sub-second fraction to the value
select
TIMESTAMP '2016-02-26 19:06:00.12345678',
@@ -2164,15 +2168,16 @@ select
TIMESTAMPDIFF(SECOND,
TIMESTAMP '2016-02-26 19:06:00.123456789',
CAST('2016-02-26 19:06:00.123456789' as TIMESTAMP));
-+---------------------+---------------------+--------+
-| EXPR$0 | EXPR$1 | EXPR$2 |
-+---------------------+---------------------+--------+
-| 2016-02-26 19:06:00 | 2016-02-26 19:06:00 | 0 |
-+---------------------+---------------------+--------+
++-------------------------+---------------------+--------+
+| EXPR$0 | EXPR$1 | EXPR$2 |
++-------------------------+---------------------+--------+
+| 2016-02-26 19:06:00.123 | 2016-02-26 19:06:00 | 0 |
++-------------------------+---------------------+--------+
(1 row)
!ok
+!}
# TIMESTAMPDIFF with 'flag' literal as time unit argument
SELECT TIMESTAMPDIFF(quarter, TIMESTAMP '2008-12-25', TIMESTAMP '2008-09-25');
+--------+
diff --git a/core/src/test/resources/sql/operator.iq b/core/src/test/resources/sql/operator.iq
index 9fe31a46329..278010727cf 100644
--- a/core/src/test/resources/sql/operator.iq
+++ b/core/src/test/resources/sql/operator.iq
@@ -221,6 +221,7 @@ order by 1,2;
!ok
+!if (fixed.calcite6828) {
# FLOOR and CEIL of TIME
select v,
case when b then 'ceil' else 'floor' end as op,
@@ -235,16 +236,17 @@ select v,
from (values (time '12:34:56.7')) as t(v),
(values false, true) as u(b)
order by 1,2;
-+----------+-------+----------+----------+----------+----------+----------+----------+----------+----------+
-| V | OP | Y | Q | M | W | D | H | MI | S |
-+----------+-------+----------+----------+----------+----------+----------+----------+----------+----------+
-| 12:34:56 | ceil | 12:34:57 | 12:34:56 | 12:34:56 | 12:34:56 | 12:34:56 | 13:00:00 | 12:35:00 | 12:34:57 |
-| 12:34:56 | floor | 12:34:56 | 12:34:56 | 12:34:56 | 12:34:56 | 12:34:56 | 12:00:00 | 12:34:00 | 12:34:56 |
-+----------+-------+----------+----------+----------+----------+----------+----------+----------+----------+
++------------+-------+------------+------------+------------+------------+------------+------------+------------+------------+
+| V | OP | Y | Q | M | W | D | H | MI | S |
++------------+-------+------------+------------+------------+------------+------------+------------+------------+------------+
+| 12:34:56.7 | ceil | 12:34:57.0 | 12:34:56.7 | 12:34:56.7 | 12:34:56.7 | 12:34:56.7 | 13:00:00.0 | 12:35:00.0 | 12:34:57.0 |
+| 12:34:56.7 | floor | 12:34:56.6 | 12:34:56.6 | 12:34:56.6 | 12:34:56.6 | 12:34:56.7 | 12:00:00.0 | 12:34:00.0 | 12:34:56.0 |
++------------+-------+------------+------------+------------+------------+------------+------------+------------+------------+
(2 rows)
-
!ok
+!}
+
select "T"."X"[1] as x1 from (VALUES (ROW(ROW(3, 7), ROW(4, 8)))) as T(x, y);
X1 INTEGER(10) NOT NULL
diff --git a/core/src/test/resources/sql/stream.iq b/core/src/test/resources/sql/stream.iq
index 365994e0e1a..f0ef3504f56 100644
--- a/core/src/test/resources/sql/stream.iq
+++ b/core/src/test/resources/sql/stream.iq
@@ -15,6 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+!if (fixed.calcite6282) {
!use orinoco
!set outputformat mysql
SELECT * FROM TABLE(
@@ -22,76 +23,76 @@ SELECT * FROM TABLE(
DATA => TABLE ORDERS,
TIMECOL => DESCRIPTOR(ROWTIME),
SIZE => INTERVAL '1' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:16:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 10:59:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:11:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:16:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 10:59:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:11:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
SELECT * FROM TABLE(TUMBLE(TABLE ORDERS, DESCRIPTOR(ROWTIME), INTERVAL '1' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:16:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 10:59:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:11:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:16:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 10:59:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:11:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
SELECT * FROM TABLE(TUMBLE((SELECT * FROM ORDERS), DESCRIPTOR(ROWTIME), INTERVAL '1' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:16:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 10:59:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:11:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:16:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 10:59:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:11:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
SELECT * FROM TABLE(TUMBLE((SELECT * FROM ORDERS), DESCRIPTOR(ROWTIME), INTERVAL '10' MINUTE, INTERVAL '3' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:13:00 | 2015-02-15 10:23:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:23:00 | 2015-02-15 10:33:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:23:00 | 2015-02-15 10:33:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:53:00 | 2015-02-15 11:03:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:03:00 | 2015-02-15 11:13:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:13:00.000 | 2015-02-15 10:23:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:23:00.000 | 2015-02-15 10:33:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:23:00.000 | 2015-02-15 10:33:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:53:00.000 | 2015-02-15 11:03:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:03:00.000 | 2015-02-15 11:13:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
SELECT * FROM TABLE(HOP(TABLE ORDERS, DESCRIPTOR(ROWTIME), INTERVAL '5' MINUTE, INTERVAL '10' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00 | 2015-02-15 10:20:00 |
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00 | 2015-02-15 11:00:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00 | 2015-02-15 11:05:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00 | 2015-02-15 11:15:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:20:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00.000 | 2015-02-15 10:20:00.000 |
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00.000 | 2015-02-15 11:00:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00.000 | 2015-02-15 11:05:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00.000 | 2015-02-15 11:15:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:20:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(10 rows)
!ok
@@ -102,72 +103,72 @@ SELECT * FROM TABLE(
TIMECOL => DESCRIPTOR(ROWTIME),
SLIDE => INTERVAL '5' MINUTE,
SIZE => INTERVAL '10' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00 | 2015-02-15 10:20:00 |
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00 | 2015-02-15 11:00:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00 | 2015-02-15 11:05:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00 | 2015-02-15 11:15:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:20:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00.000 | 2015-02-15 10:20:00.000 |
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00.000 | 2015-02-15 11:00:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00.000 | 2015-02-15 11:05:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00.000 | 2015-02-15 11:15:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:20:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(10 rows)
!ok
SELECT * FROM TABLE(HOP(TABLE ORDERS, DESCRIPTOR(ROWTIME), INTERVAL '5' MINUTE, INTERVAL '10' MINUTE, INTERVAL '2' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:07:00 | 2015-02-15 10:17:00 |
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:12:00 | 2015-02-15 10:22:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:17:00 | 2015-02-15 10:27:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:22:00 | 2015-02-15 10:32:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:17:00 | 2015-02-15 10:27:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:22:00 | 2015-02-15 10:32:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:52:00 | 2015-02-15 11:02:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:57:00 | 2015-02-15 11:07:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:02:00 | 2015-02-15 11:12:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:07:00 | 2015-02-15 11:17:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:07:00.000 | 2015-02-15 10:17:00.000 |
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:12:00.000 | 2015-02-15 10:22:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:17:00.000 | 2015-02-15 10:27:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:22:00.000 | 2015-02-15 10:32:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:17:00.000 | 2015-02-15 10:27:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:22:00.000 | 2015-02-15 10:32:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:52:00.000 | 2015-02-15 11:02:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:57:00.000 | 2015-02-15 11:07:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:02:00.000 | 2015-02-15 11:12:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:07:00.000 | 2015-02-15 11:17:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(10 rows)
!ok
SELECT * FROM TABLE(HOP((SELECT * FROM ORDERS), DESCRIPTOR(ROWTIME), INTERVAL '5' MINUTE, INTERVAL '10' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00 | 2015-02-15 10:20:00 |
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00 | 2015-02-15 10:25:00 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00 | 2015-02-15 10:30:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00 | 2015-02-15 11:00:00 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00 | 2015-02-15 11:05:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00 | 2015-02-15 11:15:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00 | 2015-02-15 11:20:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:10:00.000 | 2015-02-15 10:20:00.000 |
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:15:00.000 | 2015-02-15 10:25:00.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:20:00.000 | 2015-02-15 10:30:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:50:00.000 | 2015-02-15 11:00:00.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:55:00.000 | 2015-02-15 11:05:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:05:00.000 | 2015-02-15 11:15:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.000 | 2015-02-15 11:20:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(10 rows)
!ok
SELECT * FROM TABLE(SESSION(TABLE ORDERS, DESCRIPTOR(ROWTIME), DESCRIPTOR(PRODUCT), INTERVAL '20' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:35:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15 | 2015-02-15 10:44:15 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45 | 2015-02-15 10:44:45 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:35:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15.000 | 2015-02-15 10:44:15.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45.000 | 2015-02-15 10:44:45.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
@@ -178,29 +179,32 @@ SELECT * FROM TABLE(
TIMECOL => DESCRIPTOR(ROWTIME),
KEY => DESCRIPTOR(PRODUCT),
SIZE => INTERVAL '20' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:35:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15 | 2015-02-15 10:44:15 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45 | 2015-02-15 10:44:45 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:35:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15.000 | 2015-02-15 10:44:15.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45.000 | 2015-02-15 10:44:45.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
SELECT * FROM TABLE(SESSION((SELECT * FROM ORDERS), DESCRIPTOR(ROWTIME), DESCRIPTOR(PRODUCT), INTERVAL '20' MINUTE));
-+---------------------+----+---------+-------+---------------------+---------------------+
-| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
-+---------------------+----+---------+-------+---------------------+---------------------+
-| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00 | 2015-02-15 10:35:00 |
-| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15 | 2015-02-15 10:44:15 |
-| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45 | 2015-02-15 10:44:45 |
-| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00 | 2015-02-15 11:30:00 |
-+---------------------+----+---------+-------+---------------------+---------------------+
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.000 | 2015-02-15 10:35:00.000 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15.000 | 2015-02-15 10:44:15.000 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45.000 | 2015-02-15 10:44:45.000 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 10:58:00.000 | 2015-02-15 11:30:00.000 |
++---------------------+----+---------+-------+-------------------------+-------------------------+
(5 rows)
!ok
+
+!}
+# End of fixed.calcite6282
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index 023de7c972d..7c9fef60c0d 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -211,19 +211,19 @@ public class SqlOperatorTest {
public static final boolean TODO = false;
/**
- * Regular expression for a SQL TIME(0) value.
+ * Regular expression for a SQL TIME(0/1) value.
*/
public static final Pattern TIME_PATTERN =
Pattern.compile(
- "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]");
+ "[0-9][0-9]:[0-9][0-9]:[0-9][0-9](.[0-9])?");
/**
- * Regular expression for a SQL TIMESTAMP(0) value.
+ * Regular expression for a SQL TIMESTAMP(0/1) value.
*/
public static final Pattern TIMESTAMP_PATTERN =
Pattern.compile(
"[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] "
- + "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]");
+ + "[0-9][0-9]:[0-9][0-9]:[0-9][0-9](.[0-9])?");
/**
* Regular expression for a SQL DATE value.
@@ -1167,7 +1167,7 @@ void testCastDateTime(CastType castType, SqlOperatorFixture f) {
"12:42:26", "TIME(0) NOT NULL");
}
- if (Bug.FRG282_FIXED) {
+ if (Bug.CALCITE_6282_FIXED) {
// test precision
f.checkScalar("cast(TIME '12:42:25.34' as TIME(2))",
"12:42:25.34", "TIME(2) NOT NULL");
@@ -1230,7 +1230,7 @@ void testCastStringToDateTime(CastType castType, SqlOperatorFixture f) {
f.checkScalar("cast('12:42:25.34' as TIME)",
"12:42:25", "TIME(0) NOT NULL");
- if (Bug.FRG282_FIXED) {
+ if (Bug.CALCITE_6282_FIXED) {
f.checkScalar("cast('12:42:25.34' as TIME(2))",
"12:42:25.34", "TIME(2) NOT NULL");
}
@@ -1270,12 +1270,10 @@ void testCastStringToDateTime(CastType castType, SqlOperatorFixture f) {
f.checkScalar("cast('2004-02-29' as TIMESTAMP)",
"2004-02-29 00:00:00", "TIMESTAMP(0) NOT NULL");
- if (Bug.FRG282_FIXED) {
+ if (Bug.CALCITE_6282_FIXED) {
f.checkScalar("cast('1945-02-24 12:42:25.34' as TIMESTAMP(2))",
"1945-02-24 12:42:25.34", "TIMESTAMP(2) NOT NULL");
- }
- // Remove the if condition and the else block once CALCITE-6053 is fixed
- if (TestUtil.AVATICA_VERSION.startsWith("1.0.0-dev-main")) {
+
if (castType == CastType.CAST) {
f.checkFails("cast('1945-2-2 12:2:5' as TIMESTAMP)",
"Invalid DATE value, '1945-2-2 12:2:5'", true);
@@ -1295,17 +1293,6 @@ void testCastStringToDateTime(CastType castType, SqlOperatorFixture f) {
f.checkNull("cast('1945-01-24 25:42:25.34' as TIMESTAMP)");
f.checkNull("cast('1945-1-24 12:23:34.454' as TIMESTAMP)");
}
- } else {
- f.checkScalar("cast('1945-2-2 12:2:5' as TIMESTAMP)",
- "1945-02-02 12:02:05", "TIMESTAMP(0) NOT NULL");
- f.checkScalar("cast('1241241' as TIMESTAMP)",
- "1241-01-01 00:00:00", "TIMESTAMP(0) NOT NULL");
- f.checkScalar("cast('1945-20-24 12:42:25.34' as TIMESTAMP)",
- "1946-08-26 12:42:25", "TIMESTAMP(0) NOT NULL");
- f.checkScalar("cast('1945-01-24 25:42:25.34' as TIMESTAMP)",
- "1945-01-25 01:42:25", "TIMESTAMP(0) NOT NULL");
- f.checkScalar("cast('1945-1-24 12:23:34.454' as TIMESTAMP)",
- "1945-01-24 12:23:34", "TIMESTAMP(0) NOT NULL");
}
if (castType == CastType.CAST) {
f.checkFails("cast('nottime' as TIMESTAMP)", BAD_DATETIME_MESSAGE, true);
@@ -11547,14 +11534,16 @@ private static void checkArrayConcatAggFuncFails(SqlOperatorFixture t) {
"(?s)Cannot apply 'FLOOR' to arguments .*", false);
f.checkScalar("floor(time '12:34:56' to minute)",
"12:34:00", "TIME(0) NOT NULL");
- f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to second)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to millisecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to microsecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to nanosecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
+ if (Bug.CALCITE_6282_FIXED) {
+ f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to second)",
+ "2015-02-19 12:34:56.00", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to millisecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to microsecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("floor(timestamp '2015-02-19 12:34:56.78' to nanosecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ }
f.checkScalar("floor(timestamp '2015-02-19 12:34:56' to minute)",
"2015-02-19 12:34:00", "TIMESTAMP(0) NOT NULL");
f.checkScalar("floor(timestamp '2015-02-19 12:34:56' to year)",
@@ -11592,16 +11581,18 @@ private static void checkArrayConcatAggFuncFails(SqlOperatorFixture t) {
"12:35:00", "TIME(0) NOT NULL");
f.checkScalar("ceil(time '12:59:56' to minute)",
"13:00:00", "TIME(0) NOT NULL");
- f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to second)",
- "2015-02-19 12:34:57", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to millisecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to microsecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to nanosecond)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
- f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.00' to second)",
- "2015-02-19 12:34:56", "TIMESTAMP(2) NOT NULL");
+ if (Bug.CALCITE_6282_FIXED) {
+ f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to second)",
+ "2015-02-19 12:34:57.00", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to millisecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to microsecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.78' to nanosecond)",
+ "2015-02-19 12:34:56.78", "TIMESTAMP(2) NOT NULL");
+ f.checkScalar("ceil(timestamp '2015-02-19 12:34:56.00' to second)",
+ "2015-02-19 12:34:56.00", "TIMESTAMP(2) NOT NULL");
+ }
f.checkScalar("ceil(timestamp '2015-02-19 12:34:56' to minute)",
"2015-02-19 12:35:00", "TIMESTAMP(0) NOT NULL");
f.checkScalar("ceil(timestamp '2015-02-19 12:34:56' to year)",
@@ -11734,26 +11725,30 @@ private static void checkArrayConcatAggFuncFails(SqlOperatorFixture t) {
@Test void testTimestampAdd() {
final SqlOperatorFixture f = fixture();
f.setFor(SqlStdOperatorTable.TIMESTAMP_ADD, VmName.EXPAND);
- MICROSECOND_VARIANTS.forEach(s ->
- f.checkScalar("timestampadd(" + s
- + ", 2000000, timestamp '2016-02-24 12:42:25')",
- "2016-02-24 12:42:27",
- "TIMESTAMP(3) NOT NULL"));
+ if (Bug.CALCITE_6282_FIXED) {
+ MICROSECOND_VARIANTS.forEach(s ->
+ f.checkScalar("timestampadd(" + s
+ + ", 2000000, timestamp '2016-02-24 12:42:25')",
+ "2016-02-24 12:42:27.000",
+ "TIMESTAMP(3) NOT NULL"));
+ }
SECOND_VARIANTS.forEach(s ->
f.checkScalar("timestampadd(" + s
+ ", 2, timestamp '2016-02-24 12:42:25')",
"2016-02-24 12:42:27",
"TIMESTAMP(0) NOT NULL"));
- NANOSECOND_VARIANTS.forEach(s ->
- f.checkScalar("timestampadd(" + s
- + ", 3000000000, timestamp '2016-02-24 12:42:25')",
- "2016-02-24 12:42:28",
- "TIMESTAMP(3) NOT NULL"));
- NANOSECOND_VARIANTS.forEach(s ->
- f.checkScalar("timestampadd(" + s
- + ", 2000000000, timestamp '2016-02-24 12:42:25')",
- "2016-02-24 12:42:27",
- "TIMESTAMP(3) NOT NULL"));
+ if (Bug.CALCITE_6282_FIXED) {
+ NANOSECOND_VARIANTS.forEach(s ->
+ f.checkScalar("timestampadd(" + s
+ + ", 3000000000, timestamp '2016-02-24 12:42:25')",
+ "2016-02-24 12:42:28.000",
+ "TIMESTAMP(3) NOT NULL"));
+ NANOSECOND_VARIANTS.forEach(s ->
+ f.checkScalar("timestampadd(" + s
+ + ", 2000000000, timestamp '2016-02-24 12:42:25')",
+ "2016-02-24 12:42:27.000",
+ "TIMESTAMP(3) NOT NULL"));
+ }
MINUTE_VARIANTS.forEach(s ->
f.checkScalar("timestampadd(" + s
+ ", 2, timestamp '2016-02-24 12:42:25')",