docs: public Object doMove(int iRelPosition, int iRecordCount) throws DBException, RemoteException
      {
          boolean bShouldBeCached = (((m_iOpenMode & Constants.OPEN_CACHE_RECORDS) == Constants.OPEN_CACHE_RECORDS)
                  || ((m_iOpenMode & Constants.OPEN_READ_ONLY) == Constants.OPEN_READ_ONLY));
          if (!bShouldBeCached)
          {   // If it is not read-only or explicit request, don't cache (it is way too hard to reposition the records for an update/remove).
              m_objCurrentPhysicalRecord = NONE;
              m_objCurrentLockedRecord = NONE;
              m_objCurrentCacheRecord = NONE;
              return m_tableRemote.doMove(iRelPosition, iRecordCount);
          }
          else
          {   // If it is read-only, use the hash table cache to do a multiple read.
              int iCurrentLogicalPosition = m_iCurrentLogicalPosition + iRelPosition;
              if (iRelPosition == Constants.FIRST_RECORD)
                  iCurrentLogicalPosition = 0;
              if (iRelPosition == Constants.LAST_RECORD)
              {
                  if (m_iPhysicalLastRecordPlusOne == -1)
                      iCurrentLogicalPosition = -1;
                  else
                      iCurrentLogicalPosition = m_iPhysicalLastRecordPlusOne - 1;
              }
              return this.cacheGetMove(iRelPosition, iRecordCount, iCurrentLogicalPosition, false);
          }
      }