@Override
 public SearchRow getSearchRow() {
   synchronized (sync) {
     if (end) {
       return null;
     }
     return onBase ? baseCursor.getSearchRow() : deltaCursor.getSearchRow();
   }
 }
 /** Load the current row. */
 void loadCurrent() {
   synchronized (sync) {
     baseRow = baseCursor.getSearchRow();
     deltaRow = deltaCursor.get();
     needNewDelta = false;
     needNewBase = false;
   }
 }
 public HashMap<Expression, Value> getCurrentValues() {
   SearchRow searchRow = cursor.getSearchRow();
   int len = expressions.size();
   HashMap<Expression, Value> result = New.hashMapNonRehash(len);
   for (int i = 0; i < len; i++) {
     result.put(expressions.get(i), searchRow.getValue(i));
   }
   return result;
 }
 private void loadNext(boolean base) {
   synchronized (sync) {
     if (base) {
       if (step(baseCursor)) {
         baseRow = baseCursor.getSearchRow();
       } else {
         baseRow = null;
       }
     } else {
       if (step(deltaCursor)) {
         deltaRow = deltaCursor.get();
       } else {
         deltaRow = null;
       }
     }
   }
 }
Example #5
0
 @Override
 public Cursor findFirstOrLast(Session session, boolean first) {
   if (closed) {
     throw DbException.throwInternalError();
   }
   if (first) {
     // TODO optimization: this loops through NULL
     Cursor cursor = find(session, null, null);
     while (cursor.next()) {
       SearchRow row = cursor.getSearchRow();
       Value v = row.getValue(columnIds[0]);
       if (v != ValueNull.INSTANCE) {
         return cursor;
       }
     }
     return cursor;
   }
   TreeNode x = root, n;
   while (x != null) {
     n = x.right;
     if (n == null) {
       break;
     }
     x = n;
   }
   TreeCursor cursor = new TreeCursor(this, x, null, null);
   if (x == null) {
     return cursor;
   }
   // TODO optimization: this loops through NULL elements
   do {
     SearchRow row = cursor.getSearchRow();
     if (row == null) {
       break;
     }
     Value v = row.getValue(columnIds[0]);
     if (v != ValueNull.INSTANCE) {
       return cursor;
     }
   } while (cursor.previous());
   return cursor;
 }
 @Override
 public SearchRow getSearchRow() {
   return cursor.getSearchRow();
 }