This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch site
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/site by this push:
new 9d9da66964 [CALCITE-7410] TIMESTAMP type for TUMBLE and HOP is
hardwired to TIMESTAMP(3)
9d9da66964 is described below
commit 9d9da66964bfb40cad0ced301d08d66ea7a66bd0
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 6decf5b119..5fbd358d23 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 d5648f9776..e4d3a40529 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -2459,6 +2459,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 88adcf67b7..3647cf68bd 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -8304,7 +8304,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]])
]]>
@@ -8318,7 +8318,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]])
]]>
@@ -8337,7 +8337,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]])
]]>
@@ -8356,7 +8356,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]])
]]>
@@ -8370,7 +8370,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]])
]]>
@@ -8384,7 +8384,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]])
]]>
@@ -8398,7 +8398,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]])
]]>
@@ -8417,7 +8417,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]])
]]>
@@ -8436,7 +8436,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]])
]]>
@@ -8450,7 +8450,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]])
]]>
@@ -8485,9 +8485,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>
@@ -8502,10 +8516,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]])
]]>
@@ -8520,7 +8534,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]])
]]>
@@ -8538,7 +8552,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]])
]]>
@@ -8556,7 +8570,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]])
]]>
@@ -8570,7 +8584,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`.