This gets rid of the intermediate LogicalPlanExtension graph in favor of rewriting the logical plan, making more use of DataFusion's Extensions. In particular, I've added extensions for aggregations, joins, key calculations, and sources. There are also more synthetic extensions that are there to clarify the physical boundaries and simulate record batch changes that will be executed by the operators. For instance, the tumbling aggregating operator manually inserts the timestamp column after aggregations are calculated, and this is represented by the TimestampAppendExtension.
This gets rid of the intermediate LogicalPlanExtension graph in favor of rewriting the logical plan, making more use of DataFusion's Extensions. In particular, I've added extensions for aggregations, joins, key calculations, and sources. There are also more synthetic extensions that are there to clarify the physical boundaries and simulate record batch changes that will be executed by the operators. For instance, the tumbling aggregating operator manually inserts the timestamp column after aggregations are calculated, and this is represented by the TimestampAppendExtension.