@Test public void testBinaryComparatorWhenSubtractionCanOverflowLongValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, Long.MIN_VALUE); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenSubtractionIsDivisibleByMaxIntValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, 11); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 11L + Integer.MAX_VALUE); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenSubtractionCanOverflowLongValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, Long.MIN_VALUE); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenSubtractionIsDivisibleByMaxIntValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, 11); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 11L + Integer.MAX_VALUE); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenSubtractionIsDivisibleByMaxIntValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, 11); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 11L + Integer.MAX_VALUE); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenSubtractionCanOverflowLongValue() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setLong(0, Long.MIN_VALUE); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setLong(0, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); }
@Test public void testBinaryComparatorWhenOnlyTheLastColumnDiffers() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, 0); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); } }
@Test public void testBinaryComparatorWhenOnlyTheLastColumnDiffers() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, 0); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); } }
@Test public void testBinaryComparatorWhenOnlyTheLastColumnDiffers() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; row1.pointTo(data1, computeSizeInBytes(numFields * 8)); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, 0); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; row2.pointTo(data2, computeSizeInBytes(numFields * 8)); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, 1); insertRow(row1); insertRow(row2); assert(compare(0, 1) < 0); } }
@Test public void testBinaryComparatorForArrayColumn() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UnsafeArrayData arrayData1 = UnsafeArrayData.fromPrimitiveArray(new int[]{11, 42, -1}); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + arrayData1.getSizeInBytes())); row1.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData1.getSizeInBytes()); Platform.copyMemory(arrayData1.getBaseObject(), arrayData1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), arrayData1.getSizeInBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UnsafeArrayData arrayData2 = UnsafeArrayData.fromPrimitiveArray(new int[]{22}); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + arrayData2.getSizeInBytes())); row2.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData2.getSizeInBytes()); Platform.copyMemory(arrayData2.getBaseObject(), arrayData2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), arrayData2.getSizeInBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }
@Test public void testBinaryComparatorForArrayColumn() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UnsafeArrayData arrayData1 = UnsafeArrayData.fromPrimitiveArray(new int[]{11, 42, -1}); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + arrayData1.getSizeInBytes())); row1.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData1.getSizeInBytes()); Platform.copyMemory(arrayData1.getBaseObject(), arrayData1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), arrayData1.getSizeInBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UnsafeArrayData arrayData2 = UnsafeArrayData.fromPrimitiveArray(new int[]{22}); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + arrayData2.getSizeInBytes())); row2.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData2.getSizeInBytes()); Platform.copyMemory(arrayData2.getBaseObject(), arrayData2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), arrayData2.getSizeInBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }
@Test public void testBinaryComparatorForArrayColumn() throws Exception { int numFields = 1; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UnsafeArrayData arrayData1 = UnsafeArrayData.fromPrimitiveArray(new int[]{11, 42, -1}); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + arrayData1.getSizeInBytes())); row1.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData1.getSizeInBytes()); Platform.copyMemory(arrayData1.getBaseObject(), arrayData1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), arrayData1.getSizeInBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UnsafeArrayData arrayData2 = UnsafeArrayData.fromPrimitiveArray(new int[]{22}); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + arrayData2.getSizeInBytes())); row2.setLong(0, (relativeOffset(numFields) << 32) | (long) arrayData2.getSizeInBytes()); Platform.copyMemory(arrayData2.getBaseObject(), arrayData2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), arrayData2.getSizeInBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }
@Test public void testBinaryComparatorForMixedColumns() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UTF8String str1 = UTF8String.fromString("Milk tea"); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + str1.numBytes())); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, (relativeOffset(numFields) << 32) | (long) str1.numBytes()); Platform.copyMemory(str1.getBaseObject(), str1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), str1.numBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UTF8String str2 = UTF8String.fromString("Java"); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + str2.numBytes())); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, (relativeOffset(numFields) << 32) | (long) str2.numBytes()); Platform.copyMemory(str2.getBaseObject(), str2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), str2.numBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }
@Test public void testBinaryComparatorForMixedColumns() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UTF8String str1 = UTF8String.fromString("Milk tea"); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + str1.numBytes())); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, (relativeOffset(numFields) << 32) | (long) str1.numBytes()); Platform.copyMemory(str1.getBaseObject(), str1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), str1.numBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UTF8String str2 = UTF8String.fromString("Java"); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + str2.numBytes())); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, (relativeOffset(numFields) << 32) | (long) str2.numBytes()); Platform.copyMemory(str2.getBaseObject(), str2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), str2.numBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }
@Test public void testBinaryComparatorForMixedColumns() throws Exception { int numFields = 4; UnsafeRow row1 = new UnsafeRow(numFields); byte[] data1 = new byte[100]; UTF8String str1 = UTF8String.fromString("Milk tea"); row1.pointTo(data1, computeSizeInBytes(numFields * 8 + str1.numBytes())); row1.setInt(0, 11); row1.setDouble(1, 3.14); row1.setInt(2, -1); row1.setLong(3, (relativeOffset(numFields) << 32) | (long) str1.numBytes()); Platform.copyMemory(str1.getBaseObject(), str1.getBaseOffset(), data1, row1.getBaseOffset() + relativeOffset(numFields), str1.numBytes()); UnsafeRow row2 = new UnsafeRow(numFields); byte[] data2 = new byte[100]; UTF8String str2 = UTF8String.fromString("Java"); row2.pointTo(data2, computeSizeInBytes(numFields * 8 + str2.numBytes())); row2.setInt(0, 11); row2.setDouble(1, 3.14); row2.setInt(2, -1); row2.setLong(3, (relativeOffset(numFields) << 32) | (long) str2.numBytes()); Platform.copyMemory(str2.getBaseObject(), str2.getBaseOffset(), data2, row2.getBaseOffset() + relativeOffset(numFields), str2.numBytes()); insertRow(row1); insertRow(row2); assert(compare(0, 0) == 0); assert(compare(0, 1) > 0); }