@Override public void setFrame(ITreeIndexFrame frame) { this.frame = (BTreeFieldPrefixNSMLeafFrame) frame; this.buf = frame.getBuffer(); }
@Override public int getTupleOff(int offset) { return frame.getBuffer().getInt(offset); }
@Override public void setSlot(int offset, int value) { frame.getBuffer().putInt(offset, value); }
@Override public int getSlotStartOff() { return frame.getBuffer().capacity() - slotSize; }
@Override public int getSlotEndOff() { return frame.getBuffer().capacity() - (frame.getTupleCount() * slotSize); }
@Override public void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) { resetByTupleOffset(frame.getBuffer().array(), frame.getTupleOffset(tupleIndex)); }
@Override public void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) { resetByTupleOffset(frame.getBuffer().array(), frame.getTupleOffset(tupleIndex)); }
@Override public void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) { resetByTupleOffset(frame.getBuffer().array(), frame.getTupleOffset(tupleIndex)); }
@Override public void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) { resetByTupleOffset(frame.getBuffer().array(), frame.getTupleOffset(tupleIndex)); }
@Override public int insertSlot(int tupleIndex, int tupleOff) { int slotOff = getSlotOff(tupleIndex); if (tupleIndex == GREATEST_KEY_INDICATOR) { slotOff = getSlotEndOff() - slotSize; setSlot(slotOff, tupleOff); return slotOff; } else { int slotEndOff = getSlotEndOff(); int length = (slotOff - slotEndOff) + slotSize; System.arraycopy(frame.getBuffer().array(), slotEndOff, frame.getBuffer().array(), slotEndOff - slotSize, length); setSlot(slotOff, tupleOff); return slotOff; } } }
public void deleteEmptySlots() { int slotOff = getSlotStartOff(); while (frame.getTupleCount() > 0) { while (frame.getBuffer().getInt(getSlotEndOff()) == -1) { ((RTreeNSMFrame) frame).setTupleCount(frame.getTupleCount() - 1); if (frame.getTupleCount() == 0) { break; } } if (frame.getTupleCount() == 0 || slotOff <= getSlotEndOff()) { break; } if (frame.getBuffer().getInt(slotOff) == -1) { modifySlot(slotOff, frame.getBuffer().getInt(getSlotEndOff())); ((RTreeNSMFrame) frame).setTupleCount(frame.getTupleCount() - 1); } slotOff -= slotSize; } } }
@Override public boolean doHasNext() throws HyracksDataException { if (numTuples <= currentTupleIndex) { return false; } // We don't latch pages since this code is only used by flush () before // bulk-loading the r-tree to disk and flush is not concurrent. // ICachedPage node1 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, tPointers[currentTupleIndex * 2]), false); try { leafFrame1.setPage(node1); frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), tPointers[currentTupleIndex * 2 + 1]); } finally { bufferCache.unpin(node1); } return true; }
private int compare(int[] tPointers, int tp1, int tp2i, int tp2j) throws HyracksDataException { int i1 = tPointers[tp1 * 2]; int j1 = tPointers[tp1 * 2 + 1]; int i2 = tp2i; int j2 = tp2j; ICachedPage node1 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i1), false); try { leafFrame1.setPage(node1); ICachedPage node2 = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, i2), false); try { leafFrame2.setPage(node2); frameTuple1.resetByTupleOffset(leafFrame1.getBuffer().array(), j1); frameTuple2.resetByTupleOffset(leafFrame2.getBuffer().array(), j2); return cmp.selectiveFieldCompare(frameTuple1, frameTuple2, comparatorFields); } finally { bufferCache.unpin(node2); } } finally { bufferCache.unpin(node1); } }
mbrTuple.resetByTupleOffset(mbr.array(), 0); interiorFrame.insert(mbrTuple, -1); interiorFrame.getBuffer().putInt( interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevPageId);
public AbstractTreeIndexBulkLoader(float fillFactor) throws HyracksDataException { leafFrame = leafFrameFactory.createFrame(); interiorFrame = interiorFrameFactory.createFrame(); metaFrame = freePageManager.createMetadataFrame(); queue = bufferCache.createFIFOQueue(); if (!isEmptyTree(leafFrame)) { throw HyracksDataException.create(ErrorCode.CANNOT_BULK_LOAD_NON_EMPTY_TREE); } this.cmp = MultiComparator.create(cmpFactories); leafFrame.setMultiComparator(cmp); interiorFrame.setMultiComparator(cmp); tupleWriter = leafFrame.getTupleWriter(); NodeFrontier leafFrontier = new NodeFrontier(leafFrame.createTupleReference()); leafFrontier.pageId = freePageManager.takePage(metaFrame); leafFrontier.page = bufferCache.confiscatePage(BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId)); interiorFrame.setPage(leafFrontier.page); interiorFrame.initBuffer((byte) 0); interiorMaxBytes = (int) (interiorFrame.getBuffer().capacity() * fillFactor); leafFrame.setPage(leafFrontier.page); leafFrame.initBuffer((byte) 0); leafMaxBytes = (int) (leafFrame.getBuffer().capacity() * fillFactor); slotSize = leafFrame.getSlotSize(); nodeFrontiers.add(leafFrontier); pagesToWrite = new ArrayList<>(); compressedPageWriter = bufferCache.getCompressedPageWriter(fileId); }
interiorFrame.getBuffer().putInt( interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevNodeFrontierPages.get(level - 1)); interiorFrame.getBuffer().putInt( interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevNodeFrontierPages.get(level - 1));
int spaceUsed = interiorFrame.getBuffer().capacity() - interiorFrame.getTotalFreeSpace(); if (spaceUsed + spaceNeeded > interiorMaxBytes) {