/** * Check if there is an uncommitted row with the given key * within a different session. * * @param session the original session * @param row the row (only the key is checked) * @return true if there is an uncommitted row */ public boolean isUncommittedFromOtherSession(Session session, Row row) { Cursor c = delta.find(session, row, row); while (c.next()) { Row r = c.get(); return r.getSessionId() != session.getId(); } return false; }
private Cursor find(Row row) { if (index == null) { // for the case "in(select ...)", the query might // use an optimization and not create the index // up front createIndex(); } Cursor cursor = index.find(session, row, row); while (cursor.next()) { SearchRow found = cursor.getSearchRow(); boolean ok = true; Database db = session.getDatabase(); for (int i = 0; i < row.getColumnCount(); i++) { if (!db.areEqual(row.getValue(i), found.getValue(i))) { ok = false; break; } } if (ok) { return cursor; } } return null; }
/** * Load the current row. */ void loadCurrent() { synchronized (sync) { baseRow = baseCursor.getSearchRow(); deltaRow = deltaCursor.get(); needNewDelta = false; needNewBase = false; } }
@Override public Row get() { if (cursor == null) { return null; } return cursor.get(); }
/** {@inheritDoc} */ @Override public long getRowCount(Session ses) { Cursor cursor = find(ses, null, null); long res = 0; while (cursor.next()) res++; return res; }
@Override public SearchRow getSearchRow() { synchronized (sync) { if (end) { return null; } return onBase ? baseCursor.getSearchRow() : deltaCursor.getSearchRow(); } }
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; } } } }
/** {@inheritDoc} */ @Override public long getRowCount(Session ses) { Cursor c = find(ses, null, null); long cnt = 0; while (c.next()) cnt++; return cnt; }
@Override public SearchRow getSearchRow() { return cursor.getSearchRow(); }
cursor.next(); int columnId = index.getColumns()[0].getColumnId(); ExpressionColumn expr = (ExpressionColumn) on; row = cursor.getSearchRow(); if (row == null) { return ValueNull.INSTANCE; cursor.next(); hasNulls = true; } else { check.setValue(columnId, ValueNull.INSTANCE); Cursor nullsCursor = index.find(session, check, check); while (nullsCursor.next()) { count--; cursor.next(); SearchRow row = cursor.getSearchRow(); if (row == null) { return ValueNull.INSTANCE; cursor.next(); row = cursor.getSearchRow(); if (row == null) { return v;
/** * Load the current row. */ void loadCurrent() { synchronized (sync) { baseRow = baseCursor.getSearchRow(); deltaRow = deltaCursor.get(); needNewDelta = false; needNewBase = false; } }
/** * @param rangeId Requested range ID. * @return Current row. */ public Row get(int rangeId) { assert rangeId == cursorRangeId; return cursor.get(); } }
@Override public boolean next() { while (true) { if (cursor == null) { nextCursor(); if (cursor == null) { return false; } } if (cursor.next()) { return true; } cursor = null; } }
SearchRow row = cursor.getSearchRow(); Value v; if (row == null) {