Replace this abstract function with a simple accessor for "m_partitioningColumns".
Consider inlining the findPartitioningColumns code in the one place where each implementation really needs to be called -- otherwise, make them private.
In any case, take out the "if (m_partitioningColumns != null) {" block from those implementations -- they only need to be called one time, so m_partitioningColumns == null, right?