Caizhi Weng created FLINK-22313: ----------------------------------- Summary: Redundant CAST in plan when selecting window start and window end in window agg Key: FLINK-22313 URL: https://issues.apache.org/jira/browse/FLINK-22313 Project: Flink Issue Type: Bug Components: Table SQL / API Affects Versions: 1.13.0 Reporter: Caizhi Weng
Add the following test case to {{org.apache.flink.table.planner.plan.stream.sql.agg.WindowAggregateTest}} to reproduce this bug. {code:scala} @Test def testSessionFunction(): Unit = { val sql = """ |SELECT | COUNT(*), | SESSION_START(proctime, INTERVAL '15' MINUTE), | SESSION_END(proctime, INTERVAL '15' MINUTE) |FROM MyTable | GROUP BY SESSION(proctime, INTERVAL '15' MINUTE) """.stripMargin util.verifyExecPlan(sql) } {code} The produced plan is {code} Calc(select=[EXPR$0, CAST(w$start) AS EXPR$1, CAST(w$end) AS EXPR$2]) +- GroupWindowAggregate(window=[SessionGroupWindow('w$, proctime, 900000)], properties=[w$start, w$end, w$proctime], select=[COUNT(*) AS EXPR$0, start('w$) AS w$start, end('w$) AS w$end, proctime('w$) AS w$proctime]) +- Exchange(distribution=[single]) +- Calc(select=[proctime]) +- WatermarkAssigner(rowtime=[rowtime], watermark=[(rowtime - 1000:INTERVAL SECOND)]) +- Calc(select=[PROCTIME() AS proctime, rowtime]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable, project=[rowtime]]], fields=[rowtime]) {code} This is because the nullability indicated by {{PlannerWindowStart#getResultType}} and {{SqlGroupedWindowFunction#WindowStartEndReturnTypeInference}} are different. Actually time attribute and window start / end should always be not null. -- This message was sent by Atlassian Jira (v8.3.4#803005)