/**
   * Restore field to its old value.
   *
   * @exception IOException Can be thrown by any of the methods of ObjectInput.
   * @exception StandardException Standard Derby policy.
   * @see LogicalPageOperation#undoMe
   */
  public void undoMe(
      Transaction xact,
      BasePage undoPage,
      int undoRecordId,
      LogInstant CLRInstant,
      LimitObjectInput in)
      throws StandardException, IOException {
    int slot = undoPage.findRecordById(undoRecordId, Page.FIRST_SLOT_NUMBER);

    if (SanityManager.DEBUG) {
      // if the record Id has changed, the page had better changed
      // this can only happen during recovery since in run time undo,
      // this resetRecordHandle gets called and this object have the new
      // page number and recordId
      if (undoRecordId != this.recordId)
        if (undoPage.getPageNumber() == getPageId().getPageNumber())
          SanityManager.THROWASSERT(
              "recordId changed from "
                  + this.recordId
                  + " to "
                  + undoRecordId
                  + " but page number did not change "
                  + undoPage.getPageNumber());

      if (slot == -1)
        SanityManager.THROWASSERT(
            "recordId " + undoRecordId + " not found on page " + undoPage.getPageNumber());
    }

    undoPage.skipField((java.io.ObjectInput) in); // skip the after image of the column
    undoPage.storeField(CLRInstant, slot, fieldId, in);
    undoPage.setAuxObject(null);
  }