@Override public void patch(SerializedField.Builder field, ByteBuf[] buffers, int bufferStart, int buffersLength, String parentName, String indent) { DataMode mode = field.getMajorType().getMode(); MinorType minor = field.getMajorType().getMinorType(); String name = field.getNamePart().getName(); boolean changed = false; SerializedField.Builder decimalField = children.get(decimalBufferIndex); final ArrowBuf decimalBuffer = (ArrowBuf)buffers[bufferStart + decimalBufferIndex]; if (decimalField.getMajorType().getMinorType() != DECIMAL || decimalField.getMajorType().getMode() != REQUIRED) { throw new IllegalStateException("Found incorrect decimal field: " + field.build());
@Override public void patch(SerializedField.Builder field, ByteBuf[] buffers, int bufferStart, int buffersLength, String parentName, String indent) { DataMode mode = field.getMajorType().getMode(); MinorType minor = field.getMajorType().getMinorType(); String name = field.getNamePart().getName(); boolean changed = false; ArrowBuf bitsBuffer = (ArrowBuf) buffers[bufferStart + bitsIndex]; if (bitsField.getMajorType().getMinorType() != BIT || !"$bits$".equals(bitsField.getNamePart().getName()) || bitsField.getMajorType().getMode() != REQUIRED) { throw new IllegalStateException("bit vector should be called $bits$ and have type REQUIRED BIT." + " Found field: " + field.build()); SerializedField.Builder decimalField = children.get(decimalBufferIndex); final ArrowBuf decimalBuffer = (ArrowBuf)buffers[bufferStart + decimalBufferIndex]; if (decimalField.getMajorType().getMinorType() != DECIMAL || decimalField.getMajorType().getMode() != REQUIRED) { throw new IllegalStateException("Found incorrect decimal field: " + field.build());
int length = 0; for (int i = startPoint; i < startPoint + dataBuffer.readableBytes() - 1; i+=decimalLength) { final BigDecimal arrowDecimal = DecimalUtility.getBigDecimalFromArrowBuf(dataBuffer, i/16, decimalField.getMajorType().getScale()); final int startIndex = (i == startPoint) ? i : i + length; DecimalHelper.getSparseFromBigDecimal(arrowDecimal, drillBuffer, startIndex, decimalField.getMajorType().getScale(), NUMBER_DECIMAL_DIGITS); length += 8; .setMinorType(MinorType.DECIMAL38SPARSE) .setMode(DataMode.OPTIONAL) .setPrecision(decimalField.getMajorType().getPrecision()) .setScale(decimalField.getMajorType().getScale());