private static void verifyBlock(Block block, Slice[][][] expectedValues) { assertBlock(block, expectedValues); assertColumnarMap(block, expectedValues); assertDictionaryBlock(block, expectedValues); assertRunLengthEncodedBlock(block, expectedValues); int offset = 1; int length = expectedValues.length - 2; Block blockRegion = block.getRegion(offset, length); Slice[][][] expectedValuesRegion = Arrays.copyOfRange(expectedValues, offset, offset + length); assertBlock(blockRegion, expectedValuesRegion); assertColumnarMap(blockRegion, expectedValuesRegion); assertDictionaryBlock(blockRegion, expectedValuesRegion); assertRunLengthEncodedBlock(blockRegion, expectedValuesRegion); }
@Test public void test() { Slice[][][] expectedValues = new Slice[MAP_SIZES.length][][]; for (int mapIndex = 0; mapIndex < MAP_SIZES.length; mapIndex++) { expectedValues[mapIndex] = new Slice[MAP_SIZES[mapIndex]][]; for (int entryIndex = 0; entryIndex < MAP_SIZES[mapIndex]; entryIndex++) { Slice[] entry = new Slice[2]; entry[0] = Slices.utf8Slice(String.format("key.%d.%d", mapIndex, entryIndex)); if (entryIndex % 3 != 1) { entry[1] = Slices.utf8Slice(String.format("value.%d.%d", mapIndex, entryIndex)); } expectedValues[mapIndex][entryIndex] = entry; } } BlockBuilder blockBuilder = createBlockBuilderWithValues(expectedValues); verifyBlock(blockBuilder, expectedValues); verifyBlock(blockBuilder.build(), expectedValues); Slice[][][] expectedValuesWithNull = alternatingNullValues(expectedValues); BlockBuilder blockBuilderWithNull = createBlockBuilderWithValues(expectedValuesWithNull); verifyBlock(blockBuilderWithNull, expectedValuesWithNull); verifyBlock(blockBuilderWithNull.build(), expectedValuesWithNull); }
private static void assertDictionaryBlock(Block block, Slice[][][] expectedValues) { DictionaryBlock dictionaryBlock = createTestDictionaryBlock(block); Slice[][][] expectedDictionaryValues = createTestDictionaryExpectedValues(expectedValues); assertBlock(dictionaryBlock, expectedDictionaryValues); assertColumnarMap(dictionaryBlock, expectedDictionaryValues); assertRunLengthEncodedBlock(dictionaryBlock, expectedDictionaryValues); }
private static void assertRunLengthEncodedBlock(Block block, Slice[][][] expectedValues) { for (int position = 0; position < block.getPositionCount(); position++) { RunLengthEncodedBlock runLengthEncodedBlock = createTestRleBlock(block, position); Slice[][][] expectedDictionaryValues = createTestRleExpectedValues(expectedValues, position); assertBlock(runLengthEncodedBlock, expectedDictionaryValues); assertColumnarMap(runLengthEncodedBlock, expectedDictionaryValues); } }
public static BlockBuilder createBlockBuilderWithValues(Slice[][][] expectedValues) { BlockBuilder blockBuilder = createMapBuilder(100); for (Slice[][] expectedMap : expectedValues) { if (expectedMap == null) { blockBuilder.appendNull(); } else { BlockBuilder entryBuilder = blockBuilder.beginBlockEntry(); VARCHAR.createBlockBuilder(null, expectedMap.length); for (Slice[] entry : expectedMap) { Slice key = entry[0]; assertNotNull(key); VARCHAR.writeSlice(entryBuilder, key); Slice value = entry[1]; if (value == null) { entryBuilder.appendNull(); } else { VARCHAR.writeSlice(entryBuilder, value); } } blockBuilder.closeEntry(); } } return blockBuilder; }