code: public int doMove(int iRelPosition) throws DBException
      {
          int iRecordStatus = super.doMove(iRelPosition);
          if ((iRecordStatus == Constants.NORMAL_RETURN)
              || (iRecordStatus == FieldTable.DELETED_RECORD.intValue()))   // Deleted record
          {
              if (m_arrayCache != null)
                  if (m_iPhysicalIndex != NO_INDEX)
              {
                  m_iPhysicalIndex = m_iPhysicalIndex + iRelPosition;
                  Object data = null;
                  if (iRecordStatus == Constants.NORMAL_RETURN)
                      data = this.getDataSource();
                  m_arrayCache.set(m_iPhysicalIndex, data); // Update the current record.
              }
          }
          else
          {
              if (iRelPosition > 0)
              {
                  m_iEndOfFileIndex = m_iPhysicalIndex;
                  m_iPhysicalIndex = NO_INDEX;
              }
              else
                  if (m_arrayCache != null)
                      if (m_iPhysicalIndex != NO_INDEX)
                          m_arrayCache.set(m_iPhysicalIndex, null); // Show the current record as deleted.
          }
          return iRecordStatus;
      }
docs: Get the next record (return a null at EOF).
  Note: Remember to set the data source before returning a NORMAL_RETURN.
  @param iRelPosition The relative records to move.
  @return A record status (NORMAL_RETURN means the move was successful).