This is the code I'd like here -- I'd hide all the details in PersistentTable to make this work.

       Table* found = getTable(tableId);
        if ( ! found) {
            return -1;
        }
        PersistentTable * currentTable = dynamic_cast<PersistentTable*>(found);
        assert(currentTable != NULL);
        // The ongoing TABLE STREAM needs the original table from before the first table truncate.
        PersistentTable * originalTable = currentPreTruncateTable();
        VOLT_DEBUG("tableStreamSerializeMore: type %s, rewinds to the table before the first truncate",
                tableStreamTypeToString(streamType));
        remaining = originalTable->streamMore(outputStreams, streamType, retPositions);
        if (remaining <= 0) {
            // The on going TABLE STREAM of the original table before the first table truncate has finished.
            // Reset the pre-truncate table pointer to be NULL.
            currentTable->unsetPreTruncateTable();
            VOLT_DEBUG("tableStreamSerializeMore: type %s, null the previous truncate table pointer",
                    tableStreamTypeToString(streamType));
        }