use of com.facebook.presto.common.block.DictionaryBlock in project urban-eureka by errir503.
the class TestLookupJoinPageBuilder method testPageBuilder.
@Test
public void testPageBuilder() {
int entries = 10_000;
BlockBuilder blockBuilder = BIGINT.createBlockBuilder(null, entries);
for (int i = 0; i < entries; i++) {
BIGINT.writeLong(blockBuilder, i);
}
Block block = blockBuilder.build();
Page page = new Page(block, block);
JoinProbeFactory joinProbeFactory = new JoinProbeFactory(new int[] { 0, 1 }, ImmutableList.of(0, 1), OptionalInt.empty());
JoinProbe probe = joinProbeFactory.createJoinProbe(page);
LookupSource lookupSource = new TestLookupSource(ImmutableList.of(BIGINT, BIGINT), page);
LookupJoinPageBuilder lookupJoinPageBuilder = new LookupJoinPageBuilder(ImmutableList.of(BIGINT, BIGINT));
int joinPosition = 0;
while (!lookupJoinPageBuilder.isFull() && probe.advanceNextPosition()) {
lookupJoinPageBuilder.appendRow(probe, lookupSource, joinPosition++);
lookupJoinPageBuilder.appendNullForBuild(probe);
}
assertFalse(lookupJoinPageBuilder.isEmpty());
Page output = lookupJoinPageBuilder.build(probe);
assertEquals(output.getChannelCount(), 4);
assertTrue(output.getBlock(0) instanceof DictionaryBlock);
assertTrue(output.getBlock(1) instanceof DictionaryBlock);
for (int i = 0; i < output.getPositionCount(); i++) {
assertFalse(output.getBlock(0).isNull(i));
assertFalse(output.getBlock(1).isNull(i));
assertEquals(output.getBlock(0).getLong(i), i / 2);
assertEquals(output.getBlock(1).getLong(i), i / 2);
if (i % 2 == 0) {
assertFalse(output.getBlock(2).isNull(i));
assertFalse(output.getBlock(3).isNull(i));
assertEquals(output.getBlock(2).getLong(i), i / 2);
assertEquals(output.getBlock(3).getLong(i), i / 2);
} else {
assertTrue(output.getBlock(2).isNull(i));
assertTrue(output.getBlock(3).isNull(i));
}
}
assertTrue(lookupJoinPageBuilder.toString().contains("positionCount=" + output.getPositionCount()));
lookupJoinPageBuilder.reset();
assertTrue(lookupJoinPageBuilder.isEmpty());
}
use of com.facebook.presto.common.block.DictionaryBlock in project urban-eureka by errir503.
the class TestLookupJoinPageBuilder method testDifferentPositions.
@Test
public void testDifferentPositions() {
int entries = 100;
BlockBuilder blockBuilder = BIGINT.createFixedSizeBlockBuilder(entries);
for (int i = 0; i < entries; i++) {
BIGINT.writeLong(blockBuilder, i);
}
Block block = blockBuilder.build();
Page page = new Page(block);
JoinProbeFactory joinProbeFactory = new JoinProbeFactory(new int[] { 0 }, ImmutableList.of(0), OptionalInt.empty());
LookupSource lookupSource = new TestLookupSource(ImmutableList.of(BIGINT), page);
LookupJoinPageBuilder lookupJoinPageBuilder = new LookupJoinPageBuilder(ImmutableList.of(BIGINT));
// empty
JoinProbe probe = joinProbeFactory.createJoinProbe(page);
Page output = lookupJoinPageBuilder.build(probe);
assertEquals(output.getChannelCount(), 2);
assertTrue(output.getBlock(0) instanceof DictionaryBlock);
assertEquals(output.getPositionCount(), 0);
lookupJoinPageBuilder.reset();
// the probe covers non-sequential positions
probe = joinProbeFactory.createJoinProbe(page);
for (int joinPosition = 0; probe.advanceNextPosition(); joinPosition++) {
if (joinPosition % 2 == 1) {
continue;
}
lookupJoinPageBuilder.appendRow(probe, lookupSource, joinPosition);
}
output = lookupJoinPageBuilder.build(probe);
assertEquals(output.getChannelCount(), 2);
assertTrue(output.getBlock(0) instanceof DictionaryBlock);
assertEquals(output.getPositionCount(), entries / 2);
for (int i = 0; i < entries / 2; i++) {
assertEquals(output.getBlock(0).getLong(i), i * 2);
assertEquals(output.getBlock(1).getLong(i), i * 2);
}
lookupJoinPageBuilder.reset();
// the probe covers everything
probe = joinProbeFactory.createJoinProbe(page);
for (int joinPosition = 0; probe.advanceNextPosition(); joinPosition++) {
lookupJoinPageBuilder.appendRow(probe, lookupSource, joinPosition);
}
output = lookupJoinPageBuilder.build(probe);
assertEquals(output.getChannelCount(), 2);
assertFalse(output.getBlock(0) instanceof DictionaryBlock);
assertEquals(output.getPositionCount(), entries);
for (int i = 0; i < entries; i++) {
assertEquals(output.getBlock(0).getLong(i), i);
assertEquals(output.getBlock(1).getLong(i), i);
}
lookupJoinPageBuilder.reset();
// the probe covers some sequential positions
probe = joinProbeFactory.createJoinProbe(page);
for (int joinPosition = 0; probe.advanceNextPosition(); joinPosition++) {
if (joinPosition < 10 || joinPosition >= 50) {
continue;
}
lookupJoinPageBuilder.appendRow(probe, lookupSource, joinPosition);
}
output = lookupJoinPageBuilder.build(probe);
assertEquals(output.getChannelCount(), 2);
assertFalse(output.getBlock(0) instanceof DictionaryBlock);
assertEquals(output.getPositionCount(), 40);
for (int i = 10; i < 50; i++) {
assertEquals(output.getBlock(0).getLong(i - 10), i);
assertEquals(output.getBlock(1).getLong(i - 10), i);
}
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class Page method getRelatedDictionaryBlocks.
private Map<DictionaryId, DictionaryBlockIndexes> getRelatedDictionaryBlocks() {
Map<DictionaryId, DictionaryBlockIndexes> relatedDictionaryBlocks = new HashMap<>();
for (int i = 0; i < blocks.length; i++) {
Block block = blocks[i];
if (block instanceof DictionaryBlock) {
DictionaryBlock dictionaryBlock = (DictionaryBlock) block;
relatedDictionaryBlocks.computeIfAbsent(dictionaryBlock.getDictionarySourceId(), id -> new DictionaryBlockIndexes()).addBlock(dictionaryBlock, i);
}
}
return relatedDictionaryBlocks;
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestColumnarMap method assertDictionaryBlock.
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);
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestColumnarRow method assertDictionaryBlock.
private static <T> void assertDictionaryBlock(Block block, T[] expectedValues) {
DictionaryBlock dictionaryBlock = createTestDictionaryBlock(block);
T[] expectedDictionaryValues = createTestDictionaryExpectedValues(expectedValues);
assertBlock(dictionaryBlock, expectedDictionaryValues);
assertColumnarRow(dictionaryBlock, expectedDictionaryValues);
assertRunLengthEncodedBlock(dictionaryBlock, expectedDictionaryValues);
}
Aggregations