This is an automated email from the ASF dual-hosted git repository.
danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new d70039d [CALCITE-4282] Promote the window table functions window
attribute data type with precision 3
d70039d is described below
commit d70039ddda15112a6398765073572605fb01e23c
Author: yuzhao.cyz <[email protected]>
AuthorDate: Mon Sep 28 10:13:00 2020 +0800
[CALCITE-4282] Promote the window table functions window attribute data
type with precision 3
Now the window_start and window_end has a type of a Timestamp with
default system precision. But, actually, many DB vendors has default
precision as 6 (which is also defined in the SQL standard).
We better promote the precision to 3 because:
1. For windowing, time unit as millisecond is enough
2. Make the precision deterministic instead of overriding by each
engine's default one
---
.../apache/calcite/sql/SqlWindowTableFunction.java | 6 ++--
.../apache/calcite/test/SqlToRelConverterTest.xml | 34 +++++++++++-----------
2 files changed, 19 insertions(+), 21 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 e9d4494..82a1d75 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlWindowTableFunction.java
@@ -103,13 +103,11 @@ public class SqlWindowTableFunction extends SqlFunction
private static RelDataType inferRowType(SqlOperatorBinding opBinding) {
final RelDataType inputRowType = opBinding.getOperandType(0);
final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
- final RelDataType timestampType =
- typeFactory.createSqlType(SqlTypeName.TIMESTAMP);
return typeFactory.builder()
.kind(inputRowType.getStructKind())
.addAll(inputRowType.getFieldList())
- .add("window_start", timestampType)
- .add("window_end", timestampType)
+ .add("window_start", SqlTypeName.TIMESTAMP, 3)
+ .add("window_end", SqlTypeName.TIMESTAMP, 3)
.build();
}
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 519feec..85c8f71 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -5064,7 +5064,7 @@ 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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5082,7 +5082,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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5100,7 +5100,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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5117,10 +5117,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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) 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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5135,7 +5135,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5149,7 +5149,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5168,7 +5168,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5187,7 +5187,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5201,7 +5201,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(0)
window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5215,7 +5215,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5234,7 +5234,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5253,7 +5253,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5267,7 +5267,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(0) window_start, TIMESTAMP(0) window_end)])
+ LogicalTableFunctionScan(invocation=[TUMBLE(DESCRIPTOR($1), 60000:INTERVAL
MINUTE)], rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME,
TIMESTAMP(3) window_start, TIMESTAMP(3) window_end)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5281,7 +5281,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5295,7 +5295,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(0) window_start, TIMESTAMP(0) window_end)])
+ 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)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
]]>
@@ -5309,7 +5309,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(0) window_start, TIMESTAMP(0)
window_end)])
+ 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)])
LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2])
LogicalTableScan(table=[[CATALOG, SALES, ORDERS]])
]]>