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 e7e3925cf1 [CALCITE-7410] TIMESTAMP type for TUMBLE and HOP is
hardwired to TIMESTAMP(3)
e7e3925cf1 is described below
commit e7e3925cf1bcd8d71b664fe295705c1180f89c3a
Author: Mihai Budiu <[email protected]>
AuthorDate: Mon Feb 16 11:07:45 2026 -0800
[CALCITE-7410] TIMESTAMP type for TUMBLE and HOP is hardwired to
TIMESTAMP(3)
Signed-off-by: Mihai Budiu <[email protected]>
---
.../apache/calcite/sql/SqlWindowTableFunction.java | 29 ++-
.../apache/calcite/test/SqlToRelConverterTest.java | 7 +
.../apache/calcite/test/SqlToRelConverterTest.xml | 48 ++--
core/src/test/resources/sql/stream.iq | 256 +++++++++++----------
site/_docs/history.md | 6 +
5 files changed, 208 insertions(+), 138 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
b/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
index ca2fdd19a8..601b382994 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
@@ -40,6 +40,8 @@
import static org.apache.calcite.util.Static.RESOURCE;
+import static java.util.Objects.requireNonNull;
+
/**
* Base class for a table-valued function that computes windows. Examples
* include {@code TUMBLE}, {@code HOP} and {@code SESSION}.
@@ -107,14 +109,37 @@ public SqlWindowTableFunction(String name,
SqlOperandMetadata operandMetadata) {
private static RelDataType inferRowType(SqlOperatorBinding opBinding) {
final RelDataType inputRowType = opBinding.getOperandType(0);
final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
+ int precision = getTimestampPrecision(opBinding);
return typeFactory.builder()
.kind(inputRowType.getStructKind())
.addAll(inputRowType.getFieldList())
- .add("window_start", SqlTypeName.TIMESTAMP, 3)
- .add("window_end", SqlTypeName.TIMESTAMP, 3)
+ .add("window_start", SqlTypeName.TIMESTAMP, precision)
+ .add("window_end", SqlTypeName.TIMESTAMP, precision)
.build();
}
+ /** Extract the precision for the start_window, end_window columns from the
column supplied as
+ * DESCRIPTOR for the window function. */
+ private static int getTimestampPrecision(SqlOperatorBinding opBinding) {
+ RelDataType inputRowType = opBinding.getOperandType(0);
+ SqlCallBinding callBinding = (SqlCallBinding) opBinding;
+ // Locate the "descriptor" argument
+ for (SqlNode operand : callBinding.operands()) {
+ if (operand instanceof SqlCall) {
+ SqlCall opCall = (SqlCall) operand;
+ if (opCall.getOperator().getKind() == SqlKind.DESCRIPTOR) {
+ SqlNode descriptor = opCall.operand(0);
+ SqlIdentifier id = (SqlIdentifier) descriptor;
+ RelDataTypeField field =
+ inputRowType.getField(id.getSimple(), false, false);
+ return requireNonNull(field, "field").getType().getPrecision();
+ }
+ }
+ }
+ // Should be unreachable, since validation succeeded
+ throw new RuntimeException("Could not locate DESCRIPTOR column");
+ }
+
/** Partial implementation of operand type checker. */
protected abstract static class AbstractOperandMetadata
implements SqlOperandMetadata {
diff --git
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index f0d068d5bb..dc18d05520 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -2502,6 +2502,13 @@ void checkCorrelatedMapSubQuery(boolean expand) {
sql(sql).ok();
}
+ @Test void testTableFunctionTumbleConvert() {
+ final String sql = "with t as (select CAST(rowtime AS TIMESTAMP(2)) as
rowtime FROM Shipments) "
+ + "select *\n"
+ + "from table(tumble(table t, descriptor(rowtime), INTERVAL '1.5'
SECOND))";
+ sql(sql).ok();
+ }
+
@Test void testTableFunctionTumbleWithParamNames() {
final String sql = "select *\n"
+ "from table(\n"
diff --git
a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index c8c136c97f..a4dc246f8e 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -8404,7 +8404,7 @@ from table(hop(table Shipments, descriptor(rowtime),
INTERVAL '1' MINUTE, INTERV
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8418,7 +8418,7 @@ from table(hop(table Shipments, descriptor(rowtime),
INTERVAL '1' MINUTE, INTERV
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 300000:INTERVAL MINUTE, 180000:INTERVAL MINUTE)],
rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME, TIMESTAMP(3)
window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 300000:INTERVAL MINUTE, 180000:INTERVAL MINUTE)],
rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME, TIMESTAMP(0)
window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8437,7 +8437,7 @@ hop(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8456,7 +8456,7 @@ hop(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8470,7 +8470,7 @@ from table(hop((select * from Shipments),
descriptor(rowtime), INTERVAL '1' MINU
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[HOP(DESCRIPTOR($1), 60000:INTERVAL
MINUTE, 120000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8484,7 +8484,7 @@ from table(session(table Shipments, descriptor(rowtime),
descriptor(orderId), IN
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8498,7 +8498,7 @@ from table(session(table Orders, descriptor(rowtime),
descriptor(orderId, produc
<Resource name="plan">
<![CDATA[
LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2], window_start=[$3],
window_end=[$4])
- LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($0), DESCRIPTOR($2,
$1), 600000:INTERVAL MINUTE)], rowType=[RecordType(TIMESTAMP(0) ROWTIME,
INTEGER PRODUCTID, INTEGER ORDERID, TIMESTAMP(3) window_start, TIMESTAMP(3)
window_end)])
+ LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($0), DESCRIPTOR($2,
$1), 600000:INTERVAL MINUTE)], rowType=[RecordType(TIMESTAMP(0) ROWTIME,
INTEGER PRODUCTID, INTEGER ORDERID, TIMESTAMP(0) window_start, TIMESTAMP(0)
window_end)])
LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2])
LogicalTableScan(table=[[CATALOG, SALES, ORDERS]])
]]>
@@ -8517,7 +8517,7 @@ session(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8536,7 +8536,7 @@ session(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8550,7 +8550,7 @@ from table(session((select * from Shipments),
descriptor(rowtime), descriptor(or
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[SESSION(DESCRIPTOR($1), DESCRIPTOR($0),
600000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0)
ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8585,9 +8585,23 @@ from table(tumble(table Shipments, descriptor(rowtime),
INTERVAL '1' MINUTE))]]>
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testTableFunctionTumbleConvert">
+ <Resource name="sql">
+ <![CDATA[with t as (select CAST(rowtime AS TIMESTAMP(2)) as rowtime FROM
Shipments) select *
+from table(tumble(table t, descriptor(rowtime), INTERVAL '1.5' SECOND))]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(ROWTIME=[$0], window_start=[$1], window_end=[$2])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($0), 1500:INTERVAL
SECOND)], rowType=[RecordType(TIMESTAMP(2) ROWTIME, TIMESTAMP(2) window_start,
TIMESTAMP(2) window_end)])
+ LogicalProject(ROWTIME=[CAST($1):TIMESTAMP(2) NOT NULL])
+ LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
</Resource>
</TestCase>
@@ -8602,10 +8616,10 @@ on a.orderid = b.orderid]]>
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3],
ORDERID0=[$4], ROWTIME0=[$5], window_start0=[$6], window_end0=[$7])
LogicalJoin(condition=[=($0, $4)], joinType=[inner])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8620,7 +8634,7 @@ from table(tumble(table Shipments, descriptor(rowtime),
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 600000:INTERVAL
MINUTE, 60000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 600000:INTERVAL
MINUTE, 60000:INTERVAL MINUTE)], rowType=[RecordType(INTEGER ORDERID,
TIMESTAMP(0) ROWTIME, TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8638,7 +8652,7 @@ tumble(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8656,7 +8670,7 @@ tumble(
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -8670,7 +8684,7 @@ from table(tumble((select * from Shipments),
descriptor(rowtime), INTERVAL '1' M
<Resource name="plan">
<![CDATA[
LogicalProject(ORDERID=[$0], ROWTIME=[$1], window_start=[$2], window_end=[$3])
- LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(0) window_start, TIMESTAMP(0) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
diff --git a/core/src/test/resources/sql/stream.iq
b/core/src/test/resources/sql/stream.iq
index 653632955d..f20a7fe640 100644
--- a/core/src/test/resources/sql/stream.iq
+++ b/core/src/test/resources/sql/stream.iq
@@ -17,81 +17,99 @@
#
!use orinoco
!set outputformat mysql
+
+# Test case for [CALCITE-7410] TIMESTAMP type for TUMBLE and HOP is hardwired
to TIMESTAMP(3)
+# Since we cast the input column to TIMESTAMP(3), we expect window_start to
have the same type.
+WITH S AS (SELECT *, CAST(ROWTIME AS TIMESTAMP(3)) + INTERVAL '0.5' SECONDS AS
TS FROM ORDERS)
+SELECT * FROM TABLE(TUMBLE((SELECT * FROM S), DESCRIPTOR(TS), INTERVAL
'20:10.525' MINUTE TO SECOND));
++---------------------+----+---------+-------+-------------------------+-------------------------+-------------------------+
+| ROWTIME | ID | PRODUCT | UNITS | TS |
window_start | window_end |
++---------------------+----+---------+-------+-------------------------+-------------------------+-------------------------+
+| 2015-02-15 10:15:00 | 1 | paint | 10 | 2015-02-15 10:15:00.500 |
2015-02-15 10:10:31.125 | 2015-02-15 10:30:41.650 |
+| 2015-02-15 10:24:15 | 2 | paper | 5 | 2015-02-15 10:24:15.500 |
2015-02-15 10:10:31.125 | 2015-02-15 10:30:41.650 |
+| 2015-02-15 10:24:45 | 3 | brush | 12 | 2015-02-15 10:24:45.500 |
2015-02-15 10:10:31.125 | 2015-02-15 10:30:41.650 |
+| 2015-02-15 10:58:00 | 4 | paint | 3 | 2015-02-15 10:58:00.500 |
2015-02-15 10:50:52.175 | 2015-02-15 11:11:02.700 |
+| 2015-02-15 11:10:00 | 5 | paint | 3 | 2015-02-15 11:10:00.500 |
2015-02-15 10:50:52.175 | 2015-02-15 11:11:02.700 |
++---------------------+----+---------+-------+-------------------------+-------------------------+-------------------------+
+(5 rows)
+
+!ok
+
SELECT * FROM TABLE(
TUMBLE(
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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(10 rows)
!ok
@@ -102,72 +120,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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(5 rows)
!ok
@@ -178,29 +196,29 @@ 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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(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.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 |
-+---------------------+----+---------+-------+-------------------------+-------------------------+
++---------------------+----+---------+-------+---------------------+---------------------+
+| 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 |
++---------------------+----+---------+-------+---------------------+---------------------+
(5 rows)
!ok
diff --git a/site/_docs/history.md b/site/_docs/history.md
index dba2c98c34..8a7da2a4f3 100644
--- a/site/_docs/history.md
+++ b/site/_docs/history.md
@@ -49,6 +49,12 @@ ## <a
href="https://github.com/apache/calcite/releases/tag/calcite-1.42.0">1.42.
#### Breaking Changes
{: #breaking-1-42-0}
+* [<a
href="https://issues.apache.org/jira/browse/CALCITE-7410">CALCITE-7410</a>]
+ Changes the type of the `WINDOW_START` and `WINDOW_END` columns for
+ the table functions `HOP`, `TUMBLE`, `SESSION` to match the original
+ type of the timestamp column. These types used to be hardwired to
+ `TIMESTAMP(3)`.
+
* [<a
href="https://issues.apache.org/jira/browse/CALCITE-7393">CALCITE-7393</a>]
`RelDataTypeImpl.digest` is deprecated. We recommend using
`RelDataTypeImpl.innerDigest` instead.
See system property
`CalciteSystemProperty.DISABLE_GENERATE_REL_DATA_TYPE_DIGEST_STRING`.