use of com.facebook.presto.common.block.BlockBuilder in project presto by prestodb.
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.BlockBuilder in project presto by prestodb.
the class TestLookupJoinPageBuilder method testCrossJoinWithEmptyBuild.
@Test
public void testCrossJoinWithEmptyBuild() {
BlockBuilder blockBuilder = BIGINT.createBlockBuilder(null, 1);
BIGINT.writeLong(blockBuilder, 0);
Page page = new Page(blockBuilder.build());
// nothing on the build side so we don't append anything
LookupSource lookupSource = new TestLookupSource(ImmutableList.of(), page);
JoinProbe probe = (new JoinProbeFactory(new int[] { 0 }, ImmutableList.of(0), OptionalInt.empty())).createJoinProbe(page);
LookupJoinPageBuilder lookupJoinPageBuilder = new LookupJoinPageBuilder(ImmutableList.of(BIGINT));
// append the same row many times should also flush in the end
probe.advanceNextPosition();
for (int i = 0; i < 300_000; i++) {
lookupJoinPageBuilder.appendRow(probe, lookupSource, 0);
}
assertTrue(lookupJoinPageBuilder.isFull());
}
use of com.facebook.presto.common.block.BlockBuilder in project presto by prestodb.
the class TestDynamicFilterSourceOperator method testCollectWithRealNaN.
@Test
public void testCollectWithRealNaN() {
BlockBuilder input = REAL.createBlockBuilder(null, 10);
REAL.writeLong(input, floatToRawIntBits(42.0f));
REAL.writeLong(input, floatToRawIntBits(Float.NaN));
OperatorFactory operatorFactory = createOperatorFactory(channel(0, REAL));
verifyPassthrough(createOperator(operatorFactory), ImmutableList.of(REAL), new Page(input.build()));
operatorFactory.noMoreOperators();
assertEquals(partitions.build(), ImmutableList.of(TupleDomain.withColumnDomains(ImmutableMap.of("0", Domain.multipleValues(REAL, ImmutableList.of((long) floatToRawIntBits(42.0f)))))));
}
use of com.facebook.presto.common.block.BlockBuilder in project presto by prestodb.
the class TestArrayOperators method assertArrayHashOperator.
private void assertArrayHashOperator(String inputArray, Type elementType, List<Object> elements) {
ArrayType arrayType = new ArrayType(elementType);
BlockBuilder arrayArrayBuilder = arrayType.createBlockBuilder(null, 1);
BlockBuilder arrayBuilder = elementType.createBlockBuilder(null, elements.size());
for (Object element : elements) {
appendToBlockBuilder(elementType, element, arrayBuilder);
}
arrayType.writeObject(arrayArrayBuilder, arrayBuilder.build());
assertOperator(HASH_CODE, inputArray, BIGINT, arrayType.hash(arrayArrayBuilder.build(), 0));
}
use of com.facebook.presto.common.block.BlockBuilder in project presto by prestodb.
the class TestIntegerArrayType method getGreaterValue.
@Override
protected Object getGreaterValue(Object value) {
Block block = (Block) value;
BlockBuilder blockBuilder = INTEGER.createBlockBuilder(null, block.getPositionCount() + 1);
for (int i = 0; i < block.getPositionCount(); i++) {
INTEGER.appendTo(block, i, blockBuilder);
}
INTEGER.writeLong(blockBuilder, 1L);
return blockBuilder.build();
}
Aggregations