Currently we loop through read and update clauses with every stage result set fed into the next stage. Instead, this can be turned into a pipeline with one stage feeding a cursor to the next.
Also, if there are no projections, do not collect results.