Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -735,14 +735,15 @@ private InternalRow readRow(RowCompactedSerializer serializer) {

private static class SliceComparator implements Comparator<MemorySlice> {

private final RowReader reader1;
private final RowReader reader2;
private final int headerSizeInBytes;
private final ThreadLocal<RowReader> reader1;
private final ThreadLocal<RowReader> reader2;
private final FieldReader[] fieldReaders;

public SliceComparator(RowType rowType) {
int bitSetInBytes = calculateBitSetInBytes(rowType.getFieldCount());
this.reader1 = new RowReader(bitSetInBytes);
this.reader2 = new RowReader(bitSetInBytes);
this.headerSizeInBytes = calculateBitSetInBytes(rowType.getFieldCount());
this.reader1 = ThreadLocal.withInitial(() -> new RowReader(headerSizeInBytes));
this.reader2 = ThreadLocal.withInitial(() -> new RowReader(headerSizeInBytes));
Comment on lines +738 to +746
this.fieldReaders = new FieldReader[rowType.getFieldCount()];
for (int i = 0; i < rowType.getFieldCount(); i++) {
fieldReaders[i] = createFieldReader(rowType.getTypeAt(i));
Expand All @@ -751,20 +752,22 @@ public SliceComparator(RowType rowType) {

@Override
public int compare(MemorySlice slice1, MemorySlice slice2) {
reader1.pointTo(slice1.segment(), slice1.offset());
reader2.pointTo(slice2.segment(), slice2.offset());
RowReader r1 = reader1.get();
RowReader r2 = reader2.get();
r1.pointTo(slice1.segment(), slice1.offset());
r2.pointTo(slice2.segment(), slice2.offset());
Comment on lines 754 to +758
for (int i = 0; i < fieldReaders.length; i++) {
boolean isNull1 = reader1.isNullAt(i);
boolean isNull2 = reader2.isNullAt(i);
boolean isNull1 = r1.isNullAt(i);
boolean isNull2 = r2.isNullAt(i);
if (!isNull1 || !isNull2) {
if (isNull1) {
return -1;
} else if (isNull2) {
return 1;
} else {
FieldReader fieldReader = fieldReaders[i];
Object o1 = fieldReader.readField(reader1, i);
Object o2 = fieldReader.readField(reader2, i);
Object o1 = fieldReader.readField(r1, i);
Object o2 = fieldReader.readField(r2, i);
int comp;
if (o1 instanceof byte[]) {
// BINARY / VARBINARY fields read back as byte[], which does not
Expand Down
Loading