Hi Marieke,
Usually for a fledged SQL engine built on top of Calcite, it uses both
planner.
And we have Program[1] abstraction to organize multi stages to plan a query.
You can take a look at Calcite's default implementation here[2].
[1]
https://github.com/apache/calcite/blob/master/core/src/main
As you think about this, I might suggest trying to use Substrait as an
intermediate serialized representation between ZetaSQL and Calcite. We have
already done some work on Substrait <=> Calcite [1] and are hoping some
work can be done to add support for ZetaSQL => Substrait [2]. The benefit
here i