/**
  * Determine whether or not any columns in the current index row are being changed by the update.
  * No need to update the index if no columns changed.
  *
  * @return Nothing.
  * @exception StandardException Thrown on error
  */
 private boolean indexRowChanged() throws StandardException {
   int numColumns = ourIndexRow.nColumns();
   for (int index = 1; index <= numColumns; index++) {
     DataValueDescriptor oldOrderable = ourIndexRow.getColumn(index);
     DataValueDescriptor newOrderable = ourUpdatedIndexRow.getColumn(index);
     if (!(oldOrderable.compare(DataValueDescriptor.ORDER_OP_EQUALS, newOrderable, true, true))) {
       return true;
     }
   }
   return false;
 }
 @Override
 @SuppressFBWarnings(value = "RV_NEGATING_RESULT_OF_COMPARETO", justification = "Intentional")
 public int compare(ExecRow o1, ExecRow o2) {
   DataValueDescriptor[] a1 = o1.getRowArray();
   DataValueDescriptor[] a2 = o2.getRowArray();
   for (int i = 0; i < a1.length; ++i) {
     DataValueDescriptor c1 = a1[i];
     DataValueDescriptor c2 = a2[i];
     int result;
     try {
       result = c1.compare(c2, nullsOrderedLow == null ? true : nullsOrderedLow[i]);
     } catch (StandardException e) {
       throw new RuntimeException(e);
     }
     if (result != 0) {
       return descColumns == null || !descColumns[i] ? result : -result;
     }
   }
   return 0;
 }