@Override public Cursor find(Session session, SearchRow first, SearchRow last) { synchronized (sync) { Cursor baseCursor = base.find(session, first, last); Cursor deltaCursor = delta.find(session, first, last); return new MultiVersionCursor(session, this, baseCursor, deltaCursor, sync); } }
@Override Row getRowWithKey(long key) { int at = find(key); PageData page = index.getPage(childPageIds[at], getPos()); return page.getRowWithKey(key); }
@Override public Index getUniqueIndex() { for (Index idx : indexes) { if (idx.getIndexType().isUnique()) { return idx; } } return null; }
@Override public void remove(Session session, Row row) { synchronized (sync) { base.remove(session, row); if (removeIfExists(session, row)) { // added and deleted in the same transaction: no change } else { delta.add(session, row); } } }
@Override public Cursor findFirstOrLast(Session session, boolean first) { Cursor cursor; if (first) { cursor = mainIndex.find(session, Long.MIN_VALUE, Long.MAX_VALUE, false); } else { long x = mainIndex.getLastKey(); cursor = mainIndex.find(session, x, x, false); } cursor.next(); return cursor; }
@Override void find(PageBtreeCursor cursor, SearchRow first, boolean bigger) { int i = find(first, bigger, false, false); if (i > entryCount) { if (parentPageId == PageBtree.ROOT) { return; } PageBtreeNode next = (PageBtreeNode) index.getPage(parentPageId); next.find(cursor, first, bigger); return; } cursor.setCurrent(this, i); }
public MetaIndex(MetaTable meta, IndexColumn[] columns, boolean scan) { initBaseIndex(meta, 0, null, columns, IndexType.createNonUnique(true)); this.meta = meta; this.scan = scan; }
@Override PageDataLeaf getFirstLeaf() { int child = childPageIds[0]; return index.getPage(child, getPos()).getFirstLeaf(); }
private void freeOverflow() { if (firstOverflowPageId != 0) { int next = firstOverflowPageId; do { PageDataOverflow page = index.getPageOverflow(next); page.free(); next = page.getNextOverflow(); } while (next != 0); } }
@Override Cursor find(Session session, long minKey, long maxKey, boolean multiVersion) { int x = find(minKey); return new PageDataCursor(session, this, x, maxKey, multiVersion); }
@Override PageBtreeLeaf getFirstLeaf() { int child = childPageIds[0]; return index.getPage(child).getFirstLeaf(); }
@Override PageBtreeLeaf getLastLeaf() { int child = childPageIds[entryCount]; return index.getPage(child).getLastLeaf(); }
@Override public long getDiskSpaceUsed() { PageData root = getPage(rootPageId, 0); return root.getDiskSpaceUsed(); }
PageDataLeaf getNextPage() { if (parentPageId == PageData.ROOT) { return null; } PageDataNode next = (PageDataNode) index.getPage(parentPageId, -1); return next.getNextPage(keys[entryCount - 1]); }
/** * Get the row with the given key. * * @param key the key * @return the row */ public Row getRowWithKey(long key) { PageData root = getPage(rootPageId, 0); return root.getRowWithKey(key); }
PageBtree(PageBtreeIndex index, int pageId, Data data) { this.index = index; this.data = data; setPos(pageId); memoryEstimated = index.getMemoryPerPage(); }