public int fieldRangeCompare(ITupleReference tupleA, ITupleReference tupleB, int startFieldIndex, int numFields) throws HyracksDataException { for (int i = startFieldIndex; i < startFieldIndex + numFields; i++) { int cmp = cmps[i].compare(tupleA.getFieldData(i), tupleA.getFieldStart(i), tupleA.getFieldLength(i), tupleB.getFieldData(i), tupleB.getFieldStart(i), tupleB.getFieldLength(i)); if (cmp != 0) { return cmp; } } return 0; }
private void writeTupleToOutput(ITupleReference tuple) throws IOException { try { for (int i = 0; i < tuple.getFieldCount(); i++) { dos.write(tuple.getFieldData(i), tuple.getFieldStart(i), tuple.getFieldLength(i)); tb.addFieldEndOffset(); } } catch (Exception e) { throw e; } }
private static void readPKValueIntoByteArray(ITupleReference pkValue, int pkSize, byte[] byteArrayPKValue) { int readOffset = pkValue.getFieldStart(0); byte[] readBuffer = pkValue.getFieldData(0); for (int i = 0; i < pkSize; i++) { byteArrayPKValue[i] = readBuffer[readOffset + i]; } }
private int getLeftChildPageOff(ITupleReference tuple) { return tuple.getFieldStart(tuple.getFieldCount() - 1) + tuple.getFieldLength(tuple.getFieldCount() - 1); }
@Override public byte[] getFieldData(int fIdx) { return tuple.getFieldData(fIdx); }
@Override public int getFieldLength(int fIdx) { return sourceTuple.getFieldLength(fieldPermutation[fIdx]); } }
@Override public void insert(ITupleReference tuple, int tupleIndex) { frameTuple.setFieldCount(tuple.getFieldCount()); slotManager.insertSlot(AbstractSlotManager.GREATEST_KEY_INDICATOR, buf.getInt(Constants.FREE_SPACE_OFFSET)); int freeSpace = buf.getInt(Constants.FREE_SPACE_OFFSET); int bytesWritten = tupleWriter.writeTupleFields(tuple, 0, tuple.getFieldCount(), buf.array(), freeSpace); System.arraycopy(tuple.getFieldData(tuple.getFieldCount() - 1), getChildPointerOff(tuple), buf.array(), freeSpace + bytesWritten, childPtrSize); int tupleSize = bytesWritten + childPtrSize; buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) + 1); buf.putInt(Constants.FREE_SPACE_OFFSET, buf.getInt(Constants.FREE_SPACE_OFFSET) + tupleSize); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) - tupleSize - slotManager.getSlotSize()); }
@Override public void setOldValue(ITupleReference oldValue) { this.oldValue = oldValue; this.oldValueFieldCount = oldValue.getFieldCount(); }
@Override public int bytesRequired(ITupleReference tuple) { int bytes = getNullFlagsBytes(tuple) + getFieldSlotsBytes(tuple); for (int i = 0; i < tuple.getFieldCount(); i++) { bytes += tuple.getFieldLength(i); } return bytes; }
@Override public int getFieldStart(int fIdx) { return tuple.getFieldStart(fIdx); }
private static boolean isEqual(byte[] a, ITupleReference b, int size) { int readOffset = b.getFieldStart(0); byte[] readBuffer = b.getFieldData(0); for (int i = 0; i < size; i++) { if (a[i] != readBuffer[readOffset + i]) { return false; } } return true; }
private int getChildPointerOff(ITupleReference tuple) { return tuple.getFieldStart(tuple.getFieldCount() - 1) + tuple.getFieldLength(tuple.getFieldCount() - 1); }
@Override public byte[] getFieldData(int fIdx) { return sourceTuple.getFieldData(fieldPermutation[fIdx]); }
/** * Returns whether the doc field is missing (only with a type tag) * * @param tuple * @return */ private boolean isDocFieldMissing(ITupleReference tuple) { return tuple.getFieldLength(docField) <= 1; } }
@Override public void insertSorted(ITupleReference tuple) { int freeSpace = buf.getInt(Constants.FREE_SPACE_OFFSET); slotManager.insertSlot(slotManager.getGreatestKeyIndicator(), freeSpace); int bytesWritten = tupleWriter.writeTuple(tuple, buf, freeSpace); System.arraycopy(tuple.getFieldData(tuple.getFieldCount() - 1), getLeftChildPageOff(tuple), buf.array(), freeSpace + bytesWritten, CHILD_PTR_SIZE); int tupleSize = bytesWritten + CHILD_PTR_SIZE; buf.putInt(Constants.TUPLE_COUNT_OFFSET, buf.getInt(Constants.TUPLE_COUNT_OFFSET) + 1); buf.putInt(Constants.FREE_SPACE_OFFSET, buf.getInt(Constants.FREE_SPACE_OFFSET) + tupleSize); buf.putInt(TOTAL_FREE_SPACE_OFFSET, buf.getInt(TOTAL_FREE_SPACE_OFFSET) - tupleSize - slotManager.getSlotSize()); System.arraycopy(tuple.getFieldData(0), getLeftChildPageOff(tuple) + CHILD_PTR_SIZE, buf.array(), RIGHT_LEAF_OFFSET, CHILD_PTR_SIZE); }
@Override public void setNewValue(ITupleReference newValue) { this.newValue = newValue; this.newValueFieldCount = newValue.getFieldCount(); }
@Override public int bytesRequired(ITupleReference tuple) { int bytes = getNullFlagsBytes(tuple) + getFieldSlotsBytes(tuple); for (int i = 0; i < tuple.getFieldCount(); i++) { bytes += tuple.getFieldLength(i); } return bytes; }
@Override public int getFieldStart(int fIdx) { return sourceTuple.getFieldStart(fieldPermutation[fIdx]); }
@Override public int compare(ITupleReference tupleA, ITupleReference tupleB) throws HyracksDataException { return cmp.compare(tupleA.getFieldData(0), tupleA.getFieldStart(0), tupleA.getFieldLength(0), tupleB.getFieldData(0), tupleB.getFieldStart(0), tupleB.getFieldLength(0)); } }
public static Object[] deserializeTuple(ITupleReference tuple, ISerializerDeserializer[] fields) throws HyracksDataException { int numFields = Math.min(tuple.getFieldCount(), fields.length); Object[] objs = new Object[numFields]; for (int i = 0; i < numFields; i++) { ByteArrayInputStream inStream = new ByteArrayInputStream(tuple.getFieldData(i), tuple.getFieldStart(i), tuple.getFieldLength(i)); DataInput dataIn = new DataInputStream(inStream); objs[i] = fields[i].deserialize(dataIn); } return objs; }