But does this require that complication of a "calculate on demand and cache" system? The alternative is to find one safe place to call findPartitioningColumns (ONCE) oneach scan before its result is needed -- and afterwards use a simple getter function.  In other words, do we really need to wait and generate m_partitioningColumns only"when it is needed? If there's no earlier time when we know that it's safe to be called for the one and only time, how do we know that's it's ever safe to be called and that we are not calling it too early before the scan is ready for it?