@Override public synchronized PartitioningSpillResult partitionAndSpill(Page page, IntPredicate spillPartitionMask) { requireNonNull(page, "page is null"); requireNonNull(spillPartitionMask, "spillPartitionMask is null"); checkArgument(page.getChannelCount() == types.size(), "Wrong page channel count, expected %s but got %s", types.size(), page.getChannelCount()); checkState(!readingStarted, "reading already started"); IntArrayList unspilledPositions = partitionPage(page, spillPartitionMask); ListenableFuture<?> future = flushFullBuilders(); return new PartitioningSpillResult(future, page.getPositions(unspilledPositions.elements(), 0, unspilledPositions.size())); }
private static Page filter(Page page, Block mask) { int[] ids = new int[mask.getPositionCount()]; int next = 0; for (int i = 0; i < page.getPositionCount(); ++i) { if (BOOLEAN.getBoolean(mask, i)) { ids[next++] = i; } } return page.getPositions(ids, 0, next); }
if (positions.length != dataPage.getPositionCount()) { verify(positions.length == counts[index]); pageForWriter = pageForWriter.getPositions(positions, 0, positions.length);
@Test public void testGetPositions() { int entries = 10; 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, block).getPositions(new int[] {0, 1, 1, 1, 2, 5, 5}, 1, 5); assertEquals(page.getPositionCount(), 5); for (int i = 0; i < 3; i++) { assertEquals(page.getBlock(i).getLong(0, 0), 1); assertEquals(page.getBlock(i).getLong(1, 0), 1); assertEquals(page.getBlock(i).getLong(2, 0), 1); assertEquals(page.getBlock(i).getLong(3, 0), 2); assertEquals(page.getBlock(i).getLong(4, 0), 5); } }