[CALCITE-6282] Avatica ignores time precision when returning TIME results

Signed-off-by: Mihai Budiu <mbudiu@feldera.com>
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 90dce75..c9a57d4 100644
--- a/core/src/main/java/org/apache/calcite/util/Bug.java
+++ b/core/src/main/java/org/apache/calcite/util/Bug.java
@@ -109,12 +109,6 @@
   public static final boolean FRG254_FIXED = false;
 
   /**
-   * Whether <a href="http://issues.eigenbase.org/browse/FRG-282">issue
-   * FRG-282: Support precision in TIME and TIMESTAMP data types</a> is fixed.
-   */
-  public static final boolean FRG282_FIXED = false;
-
-  /**
    * Whether <a href="http://issues.eigenbase.org/browse/FRG-296">issue
    * FRG-296: SUBSTRING(string FROM regexp FOR regexp)</a> is fixed.
    */
@@ -211,6 +205,14 @@
    */
   public static final boolean TODO_FIXED = false;
 
+  /** Whether
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-6282">[CALCITE-6282]
+   * Avatica ignores time precision when returning TIME results</a> 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 5999222..fd60c24 100644
--- a/core/src/test/resources/sql/misc.iq
+++ b/core/src/test/resources/sql/misc.iq
@@ -2136,6 +2136,7 @@
   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 @@
   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('<string>' as TIMESTAMP) adds part of sub-second fraction to the value
 select
   TIMESTAMP '2016-02-26 19:06:00.12345678',
@@ -2164,15 +2168,16 @@
   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 9fe31a4..2780107 100644
--- a/core/src/test/resources/sql/operator.iq
+++ b/core/src/test/resources/sql/operator.iq
@@ -221,6 +221,7 @@
 
 !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 @@
 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 365994e..f0ef350 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 @@
     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 @@
     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 @@
     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 023de7c..7c9fef6 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 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 @@
           "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 @@
     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 @@
     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 @@
         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 @@
         "(?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 @@
         "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 @@
   @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')",