@Override
 public int[] getModifiedColumns() {
   if (this.updateColsIndex == null
       && (this.type == Type.AFTER_UPDATE || this.type == Type.BEFORE_UPDATE)) {
     final SerializableDelta delta = getSerializableDelta();
     final FormatableBitSet fbs = delta.getChangedColumns();
     final int numChangedColumns = fbs.getNumBitsSet();
     this.updateColsIndex = new int[numChangedColumns];
     int index = 0;
     for (int colIndex = fbs.anySetBit();
         colIndex >= 0;
         colIndex = fbs.anySetBit(colIndex), ++index) {
       this.updateColsIndex[index] = colIndex + 1;
     }
   }
   return this.updateColsIndex;
 }
 /** {@inheritDoc} */
 @Override
 public ResultSet getNewRowsAsResultSet() {
   if (this.newRow == null) {
     // first check for UPDATE ops to get the delta
     if (this.type == Type.BEFORE_UPDATE || this.type == Type.AFTER_UPDATE) {
       final SerializableDelta delta = getSerializableDelta();
       final GemFireContainer container = getContainer();
       assert container.isByteArrayStore();
       // We ensure that all WAN queues are drained completely before changing
       // schema in ALTER TABLE (see GemFireContainer.incrementSchemaVersion)
       // so using getCurrentRowFormatter below is safe.
       return (this.newRow =
           new DVDStoreResultSet(
               delta.getChangedRow(),
               -1,
               container.getCurrentRowFormatter(),
               delta.getChangedColumns(),
               null));
     }
     Object newVal = getNewValue();
     if (newVal != null) {
       assert getContainer().isByteArrayStore();
       assert !(newVal instanceof OffHeapByteSource);
       if (newVal.getClass() == byte[].class) {
         // table shape may have changed by the time event is replayed in
         // AsyncEventListener so use RowFormatter using the row bytes
         final byte[] row = (byte[]) newVal;
         return (this.newRow = new RawStoreResultSet(row, getRowFormatter(row)));
       } else {
         // table shape may have changed by the time event is replayed in
         // AsyncEventListener so use RowFormatter using the row bytes
         final byte[][] row = (byte[][]) newVal;
         return (this.newRow = new RawStoreResultSet(row, getRowFormatter(row)));
       }
     } else {
       return null;
     }
   }
   return this.newRow;
 }