I'd like to propose a mechanism to window continuous executions to allow for a stream of aggregates without introducing new SQL keywords. For example, a common use case is to get the count of events over a stream of 10 minute time blocks.
Suppose Teiid introduced a windowClosed() method on ExecutionContext. Any translator participating in a place could call windowClosed() to indicate that the engine should produce a result over the accumualted results as if the execution were closed but, windowClosed would still allow the execution to continue.
I imagine that I could write the following query:
SELECT window.timestamp, count(t.event)
FROM (call window.produce_timestamps(60, 'SECONDS')) as window, t
The implementation of "produce_time_blocks" stored procedure is an implementation of ProcedureExecution and ReusableExecution which would operate asynchronously. Every 60 seconds, it would
Return a single column result set of the current timestamp
The engine would then have enough information to produce a result set from the query. It would then reset all ReusableExecutions and continue processing the plan.
I believe this approach would allow for GROUP BY and ORDER BY operations within execution windows, as well.