* "on top" of this work should calculate correct output
* column state as nodes are added. (That is,
* the recursive updateOutputColumns() ideally wouldn't
* have other callers.)
*/
root.updateOutputColumns(m_catalogDb);
// PAVLO: Ok so now before this just assumed that we were going to stick a AggregatePlanNode on top
// of the root that we sent it (which should be a AbstractScanPlanNode or a ReceievePlanNode).
// But now because we are trying to impress John Hugg (and who isn't really?), we may actually perform
// part of the aggregation at the remote partitions, so we need a buttom up approach for cleaning