@Override protected boolean modifierFunction(ImmutableBytesWritable ptr, int length, int offset, byte[] arrayBytes, PDataType baseType, int arrayLength, Integer maxLength, Expression arrayExp) { SortOrder sortOrder = arrayExp.getSortOrder(); if (ptr.getLength() == 0 || arrayBytes.length == 0) { ptr.set(arrayBytes, offset, length); return true; } PArrayDataTypeEncoder arrayDataTypeEncoder = new PArrayDataTypeEncoder(baseType, sortOrder); if (getRHSBaseType().equals(PChar.INSTANCE)) { int unpaddedCharLength = StringUtil.getUnpaddedCharLength(ptr.get(), ptr.getOffset(), ptr.getLength(), sortOrder); ptr.set(ptr.get(), offset, unpaddedCharLength); } for (int arrayIndex = 0; arrayIndex < arrayLength; arrayIndex++) { ImmutableBytesWritable ptr2 = new ImmutableBytesWritable(arrayBytes, offset, length); PArrayDataTypeDecoder.positionAtArrayElement(ptr2, arrayIndex, baseType, maxLength); if (baseType.compareTo(ptr2, sortOrder, ptr, sortOrder, baseType) != 0) { arrayDataTypeEncoder.appendValue(ptr2.get(), ptr2.getOffset(), ptr2.getLength()); } } ptr.set(arrayDataTypeEncoder.encode()); return true; }
@Override protected boolean modifierFunction(ImmutableBytesWritable ptr, int length, int offset, byte[] arrayBytes, PDataType baseType, int arrayLength, Integer maxLength, Expression arrayExp) { SortOrder sortOrder = arrayExp.getSortOrder(); if (ptr.getLength() == 0 || arrayBytes.length == 0) { ptr.set(arrayBytes, offset, length); return true; } PArrayDataTypeEncoder arrayDataTypeEncoder = new PArrayDataTypeEncoder(baseType, sortOrder); if (getRHSBaseType().equals(PChar.INSTANCE)) { int unpaddedCharLength = StringUtil.getUnpaddedCharLength(ptr.get(), ptr.getOffset(), ptr.getLength(), sortOrder); ptr.set(ptr.get(), offset, unpaddedCharLength); } for (int arrayIndex = 0; arrayIndex < arrayLength; arrayIndex++) { ImmutableBytesWritable ptr2 = new ImmutableBytesWritable(arrayBytes, offset, length); PArrayDataTypeDecoder.positionAtArrayElement(ptr2, arrayIndex, baseType, maxLength); if (baseType.compareTo(ptr2, sortOrder, ptr, sortOrder, baseType) != 0) { arrayDataTypeEncoder.appendValue(ptr2.get(), ptr2.getOffset(), ptr2.getLength()); } } ptr.set(arrayDataTypeEncoder.encode()); return true; }
@Override protected boolean modifierFunction(ImmutableBytesWritable ptr, int length, int offset, byte[] arrayBytes, PDataType baseType, int arrayLength, Integer maxLength, Expression arrayExp) { SortOrder sortOrder = arrayExp.getSortOrder(); if (ptr.getLength() == 0 || arrayBytes.length == 0) { ptr.set(arrayBytes, offset, length); return true; } PArrayDataTypeEncoder arrayDataTypeEncoder = new PArrayDataTypeEncoder(baseType, sortOrder); if (getRHSBaseType().equals(PChar.INSTANCE)) { int unpaddedCharLength = StringUtil.getUnpaddedCharLength(ptr.get(), ptr.getOffset(), ptr.getLength(), sortOrder); ptr.set(ptr.get(), offset, unpaddedCharLength); } for (int arrayIndex = 0; arrayIndex < arrayLength; arrayIndex++) { ImmutableBytesWritable ptr2 = new ImmutableBytesWritable(arrayBytes, offset, length); PArrayDataTypeDecoder.positionAtArrayElement(ptr2, arrayIndex, baseType, maxLength); if (baseType.compareTo(ptr2, sortOrder, ptr, sortOrder, baseType) != 0) { arrayDataTypeEncoder.appendValue(ptr2.get(), ptr2.getOffset(), ptr2.getLength()); } } ptr.set(arrayDataTypeEncoder.encode()); return true; }