@Override public int getTupleSize(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple) + childPtrSize; }
@Override public int getTupleSize(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple); }
@Override public int getBytesRequiredToWriteTuple(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple) + CHILD_PTR_SIZE + slotManager.getSlotSize(); }
@Override public int getBytesRequiredToWriteTuple(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple) + childPtrSize + slotManager.getSlotSize(); }
@Override public int getBytesRequiredToWriteTuple(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple) + slotManager.getSlotSize(); }
@Override public int getBytesRequiredToWriteTuple(ITupleReference tuple) { return tupleWriter.bytesRequired(tuple) + slotManager.getSlotSize(); }
@Override public FrameOpSpaceStatus hasSpaceInsert(ITupleReference tuple) throws HyracksDataException { int bytesRequired = tupleWriter.bytesRequired(tuple) + childPtrSize; if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(Constants.FREE_SPACE_OFFSET) - (buf.getInt(Constants.TUPLE_COUNT_OFFSET) * slotManager.getSlotSize())) { return FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE; } else if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(TOTAL_FREE_SPACE_OFFSET)) { return FrameOpSpaceStatus.SUFFICIENT_SPACE; } else { return FrameOpSpaceStatus.INSUFFICIENT_SPACE; } }
@Override public void deleteGreatest() { int slotOff = slotManager.getSlotEndOff(); int tupleOff = slotManager.getTupleOff(slotOff); frameTuple.resetByTupleOffset(buf.array(), tupleOff); int keySize = tupleWriter.bytesRequired(frameTuple); System.arraycopy(buf.array(), tupleOff + keySize, buf.array(), RIGHT_LEAF_OFFSET, CHILD_PTR_SIZE); // Maintain space information. buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) + keySize + CHILD_PTR_SIZE + slotManager.getSlotSize()); int freeSpace = buf.getInt(Constants.FREE_SPACE_OFFSET); if (freeSpace == tupleOff + keySize + CHILD_PTR_SIZE) { buf.putInt(freeSpace, freeSpace - (keySize + CHILD_PTR_SIZE)); } }
@Override public FrameOpSpaceStatus hasSpaceInsert(ITupleReference tuple) throws HyracksDataException { int bytesRequired = tupleWriter.bytesRequired(tuple); // Enough space in the contiguous space region? if (bytesRequired + slotManager.getSlotSize() <= buf.capacity() - buf.getInt(Constants.FREE_SPACE_OFFSET) - (buf.getInt(Constants.TUPLE_COUNT_OFFSET) * slotManager.getSlotSize())) { return FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE; } // Enough space after compaction? if (bytesRequired + slotManager.getSlotSize() <= buf.getInt(TOTAL_FREE_SPACE_OFFSET)) { return FrameOpSpaceStatus.SUFFICIENT_SPACE; } return FrameOpSpaceStatus.INSUFFICIENT_SPACE; }
@Override public void delete(ITupleReference tuple, int tupleIndex) { int slotOff = slotManager.getSlotOff(tupleIndex); int tupleOff = slotManager.getTupleOff(slotOff); frameTuple.resetByTupleOffset(buf.array(), tupleOff); int tupleSize = tupleWriter.bytesRequired(frameTuple); // perform deletion (we just do a memcpy to overwrite the slot) int slotStartOff = slotManager.getSlotEndOff(); int length = slotOff - slotStartOff; System.arraycopy(buf.array(), slotStartOff, buf.array(), slotStartOff + slotManager.getSlotSize(), length); // maintain space information buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) + tupleSize + slotManager.getSlotSize()); }
@Override public void delete(int tupleIndex, MultiComparator cmp) { int slotOff = slotManager.getSlotOff(tupleIndex); int tupleOff = slotManager.getTupleOff(slotOff); frameTuple.resetByTupleOffset(buf.array(), tupleOff); int tupleSize = tupleWriter.bytesRequired(frameTuple); // perform deletion (we just do a memcpy to overwrite the slot) int slotStartOff = slotManager.getSlotEndOff(); int length = slotOff - slotStartOff; System.arraycopy(buf.array(), slotStartOff, buf.array(), slotStartOff + slotManager.getSlotSize(), length); // maintain space information buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) + tupleSize + slotManager.getSlotSize()); }
@Override public void delete(int tupleIndex, MultiComparator cmp) { frameTuple.setFieldCount(cmp.getKeyFieldCount()); int slotOff = slotManager.getSlotOff(tupleIndex); int tupleOff = slotManager.getTupleOff(slotOff); frameTuple.resetByTupleOffset(buf.array(), tupleOff); int tupleSize = tupleWriter.bytesRequired(frameTuple); // perform deletion (we just do a memcpy to overwrite the slot) int slotStartOff = slotManager.getSlotEndOff(); int length = slotOff - slotStartOff; System.arraycopy(buf.array(), slotStartOff, buf.array(), slotStartOff + slotManager.getSlotSize(), length); // maintain space information buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) - 1); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) + tupleSize + childPtrSize + slotManager.getSlotSize()); }
@Override public FrameOpSpaceStatus hasSpaceUpdate(ITupleReference newTuple, int oldTupleIndex) { frameTuple.resetByTupleIndex(this, oldTupleIndex); int oldTupleBytes = frameTuple.getTupleSize(); int newTupleBytes = tupleWriter.bytesRequired(newTuple); return hasSpaceUpdate(oldTupleBytes, newTupleBytes); }
@Override public FrameOpSpaceStatus hasSpaceInsert(ITupleReference tuple) throws HyracksDataException { int tupleSize = tupleWriter.bytesRequired(tuple) + CHILD_PTR_SIZE; if (tupleSize > getMaxTupleSize(buf.capacity())) { return FrameOpSpaceStatus.TOO_LARGE; } // Tuple bytes + child pointer + slot. int bytesRequired = tupleSize + slotManager.getSlotSize(); if (bytesRequired <= getFreeContiguousSpace()) { return FrameOpSpaceStatus.SUFFICIENT_CONTIGUOUS_SPACE; } if (bytesRequired <= getTotalFreeSpace()) { return FrameOpSpaceStatus.SUFFICIENT_SPACE; } return FrameOpSpaceStatus.INSUFFICIENT_SPACE; }
@Override public void writeMaxTuple(ITupleReference tuple) { binaryFilter.reset(); max.reset(); max.setSize(tupleWriter.bytesRequired(tuple)); tupleWriter.writeTuple(tuple, max.getByteArray(), 0); }
@Override public void writeMinTuple(ITupleReference tuple) { binaryFilter.reset(); min.reset(); min.setSize(tupleWriter.bytesRequired(tuple)); tupleWriter.writeTuple(tuple, min.getByteArray(), 0); }
boolean logged = false; if (minTuple == null) { int numBytes = tupleWriter.bytesRequired(tuple); minTupleBytes = new byte[numBytes]; opCallback.after(tuple); opCallback.after(tuple); logged = true; int numBytes = tupleWriter.bytesRequired(tuple); if (minTupleBytes.length < numBytes) { minTupleBytes = new byte[numBytes]; int numBytes = tupleWriter.bytesRequired(tuple); maxTupleBytes = new byte[numBytes]; if (!logged) { opCallback.after(tuple); int numBytes = tupleWriter.bytesRequired(tuple); if (maxTupleBytes.length < numBytes) { maxTupleBytes = new byte[numBytes];
@Override public FrameOpSpaceStatus hasSpaceUpdate(ITupleReference newTuple, int oldTupleIndex) { frameTuple.resetByTupleIndex(this, oldTupleIndex); int oldTupleBytes = frameTuple.getTupleSize(); int newTupleBytes = tupleWriter.bytesRequired(newTuple); FrameOpSpaceStatus status = hasSpaceUpdate(oldTupleBytes, newTupleBytes); if (status == FrameOpSpaceStatus.INSUFFICIENT_SPACE && (getLargeFlag() || getTupleCount() == 1) && isLargeTuple(newTupleBytes)) { return FrameOpSpaceStatus.EXPAND; } return status; }
int tupleBytes = tupleWriter.bytesRequired(tuple, 0, cmp.getKeyFieldCount()); int spaceNeeded = tupleBytes + slotSize + 4; if (tupleBytes > interiorFrame.getMaxTupleSize(BTree.this.bufferCache.getPageSize())) { int splitKeySize = tupleWriter.bytesRequired(frontier.lastTuple, 0, cmp.getKeyFieldCount()); splitKey.initData(splitKeySize); tupleWriter.writeTupleFields(frontier.lastTuple, 0, cmp.getKeyFieldCount(),
interiorFrame.getBytesRequiredToWriteTuple(tuple)); NodeFrontier leafFrontier = nodeFrontiers.get(0); int spaceNeeded = tupleWriter.bytesRequired(tuple) + slotSize; int spaceUsed = leafFrame.getBuffer().capacity() - leafFrame.getTotalFreeSpace(); verifyInputTuple(tuple, leafFrontier.lastTuple); int splitKeySize = tupleWriter.bytesRequired(leafFrontier.lastTuple, 0, cmp.getKeyFieldCount()); splitKey.initData(splitKeySize); tupleWriter.writeTupleFields(leafFrontier.lastTuple, 0, cmp.getKeyFieldCount(),