protected static String sizesString(List<SerializedField.Builder> fields) { StringBuilder fieldsString = new StringBuilder(" "); for (SerializedField.Builder field : fields) { fieldsString.append(field.getBufferLength()).append(" "); } return fieldsString.toString(); }
protected static String sizeTreeString(List<SerializedField.Builder> fields) { StringBuilder fieldsString = new StringBuilder("("); boolean first = true; for (SerializedField.Builder field : fields) { if (first) { first = false; } else { fieldsString.append(", "); } fieldsString.append(field.getBufferLength()); if (field.getChildCount() > 0) { fieldsString.append(sizeTreeString(field.getChildBuilderList())); } } fieldsString.append(")"); return fieldsString.toString(); }
if (logger.isDebugEnabled()) { logger.debug(format("%sBEFORE PATCH: buffers %s for field %s.%s: %s %s expecting %s", indent, sizesString(buffers, bufferStart, buffersLength), parentName, name, mode, minor, field.getBufferLength())); if (field.getBufferLength() != bufferLength) { throw new IllegalStateException("Length of data in buffer should not have changed"); sizesString(buffers, bufferStart, buffersLength), parentName, name, mode, minor, field.getBufferLength()));
if (logger.isDebugEnabled()) { logger.debug(format("%sBEFORE PATCH: buffers %s for field %s.%s: %s %s expecting %s", indent, sizesString(buffers, bufferStart, buffersLength), parentName, name, mode, minor, field.getBufferLength())); int childrenBufferLength = 0; for (SerializedField.Builder child : children) { childrenBufferLength += child.getBufferLength(); if (childrenBufferLength == field.getBufferLength()) { newBuffersLength = buffersLength; } else { newBuffersLength = buffersLength - 1; if (childrenBufferLength + buffers[bufferStart + newBuffersLength].readableBytes() != field.getBufferLength()) { throw new IllegalStateException("bufferLength mismatch for field " + field.build() + " children: " + sizesString(buffers, bufferStart, buffersLength)); if (field.getBufferLength() != bufferLength) { field.setBufferLength(bufferLength); changed = true; sizesString(buffers, bufferStart, buffersLength), parentName, name, mode, minor, field.getBufferLength()));
decimalField.setBufferLength(decimalField.getBufferLength() + 8*valueCount); drillBuffer.writerIndex(dataBuffer.readableBytes() + 8*valueCount); childDecimalField.setMajorType(com.dremio.common.types.Types.required(MinorType.DECIMAL38SPARSE)); childDecimalField.setBufferLength(childDecimalField.getBufferLength() + 8*valueCount); dataBuffer.release();
/** * finds the buffers belonging to the current field starting at buffersStart * their total size is equal to field.bufferLength * * @param field current field * @param buffers record batch buffers * @param buffersStart current position * @param buffersLength current buffer count for the parent * @return buffer count for this field starting at buffersStart */ static int fieldBuffersCount(SerializedField.Builder field, ByteBuf[] buffers, final int buffersStart, final int buffersLength) { int totalBufferWidth = 0; int lastIndex = buffersStart; while (totalBufferWidth < field.getBufferLength() && lastIndex < buffersStart + buffersLength) { ByteBuf buf = buffers[lastIndex]; totalBufferWidth += buf.readableBytes(); ++lastIndex; } if (totalBufferWidth != field.getBufferLength()) { throw new IllegalStateException("not enough buffers for field " + field.build() + " in " + sizesString(buffers, buffersStart, buffersLength) + " lastIndex = " + lastIndex + " bs=" + buffersStart + " bl = " + buffersLength + " " + totalBufferWidth + " != " + field.getBufferLength()); } return lastIndex - buffersStart; }