docs: public Object doGet(int iRowIndex) throws DBException
      {
          if (m_arrayCache == null)
              m_arrayCache = new ArrayCache(-1);
          int iIncrement = -1;
          Object data = m_arrayCache.get(iRowIndex);
          if (data == null)
          {
              if (m_iEndOfFileIndex != NO_INDEX)
                  if (iRowIndex > m_iEndOfFileIndex)
                      return null;    // Past EOF
              int iStart = m_arrayCache.getStartIndex();
              int iEnd = m_arrayCache.getEndIndex();
              for (; iStart < iEnd; iStart++)
              {
                  if (m_arrayCache.get(iStart) != null)
                      break;
              }
              for (; iStart < iEnd; iEnd--)
              {
                  if (m_arrayCache.get(iEnd) != null)
                      break;
              }
              if ((iRowIndex >= iStart) && (iRowIndex <= iEnd))
                  return FieldTable.DELETED_RECORD; // Deleted record
              if (iStart <= iEnd)
                  if (iRowIndex > iEnd)
              {
                  iIncrement = iStart;
                  iStart = iEnd;
                  iEnd = iIncrement;
                  iIncrement = +1;
              }
              data = m_arrayCache.get(iStart);
              if (data == null)
              {
                  this.close();
                  m_iPhysicalIndex = -1;  // Starting from the beginning
                  iIncrement = +1;
              }
              else
              {
                  this.setDataSource(null);
                  this.getPTable().saveCurrentKeys(this, (BaseBuffer)data, false);
                  m_iPhysicalIndex = iStart;  // Starting from the beginning
              }
              for (int i = m_iPhysicalIndex; i != iRowIndex; i = i + iIncrement)
              {
                  if (this.move(iIncrement) == null)  // Moveto automatically caches the records as they are read
                      break;
              }
              data = m_arrayCache.get(iRowIndex);
          }
          if (data != null)
          {
              this.getPTable().saveCurrentKeys(this, (BaseBuffer)this.getDataSource(), false);
              m_iLogicalIndex = iRowIndex;
          }
          else
              if (iIncrement == -1)
                  data = FieldTable.DELETED_RECORD;
          return data;
      }