private void buffer(Page page) { pageBuilder.declarePositions(page.getPositionCount()); for (int channel = 0; channel < types.size(); channel++) { Type type = types.get(channel); for (int position = 0; position < page.getPositionCount(); position++) { type.appendTo(page.getBlock(channel), position, pageBuilder.getBlockBuilder(channel)); } } if (pageBuilder.isFull()) { flush(); } }
private Block computeResultBlock(Type type, Block block, int arrayLength) { if (pageBuilder.isFull()) { pageBuilder.reset(); } BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(0); for (int i = 0; i < arrayLength; ++i) { type.appendTo(block, positions.get(i), blockBuilder); } pageBuilder.declarePositions(arrayLength); return blockBuilder.getRegion(blockBuilder.getPositionCount() - arrayLength, arrayLength); }
pageBuilder.declarePositions(positions.size()); return blockBuilder.getRegion(blockBuilder.getPositionCount() - positions.size(), positions.size());
type.appendTo(block, positions.get(i), blockBuilder); pageBuilder.declarePositions(arrayLength);
type.appendTo(block, positions[i], blockBuilder); pageBuilder.declarePositions(length);
@TypeParameter("E") @SqlType("array(E)") public Block reverse( @TypeParameter("E") Type type, @SqlType("array(E)") Block block) { int arrayLength = block.getPositionCount(); if (arrayLength < 2) { return block; } if (pageBuilder.isFull()) { pageBuilder.reset(); } BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(0); for (int i = arrayLength - 1; i >= 0; i--) { type.appendTo(block, i, blockBuilder); } pageBuilder.declarePositions(arrayLength); return blockBuilder.getRegion(blockBuilder.getPositionCount() - arrayLength, arrayLength); } }
BIGINT.writeLong(firstBlockBuilder, i); pageBuilder.declarePositions(elementCount);
pageBuilder.declarePositions(resultPositionCount); return blockBuilder.getRegion(blockBuilder.getPositionCount() - resultPositionCount, resultPositionCount);
private Page createPage() { List<Object>[] testRows = generateTestRows(ImmutableList.of(VARCHAR, VARCHAR, VARCHAR, VARCHAR), ENTRIES_PER_PAGE); PageBuilder pageBuilder = new PageBuilder(TYPES); BlockBuilder bigintBlockBuilder = pageBuilder.getBlockBuilder(0); BlockBuilder rowBlockBuilder = pageBuilder.getBlockBuilder(1); BlockBuilder rowBlockBuilder2 = pageBuilder.getBlockBuilder(2); BlockBuilder rowBlockBuilder3 = pageBuilder.getBlockBuilder(3); for (int i = 0; i < ENTRIES_PER_PAGE; i++) { BIGINT.writeLong(bigintBlockBuilder, i); writeRow(testRows[i], rowBlockBuilder); writeRow(testRows[i], rowBlockBuilder2); writeRow(testRows[i], rowBlockBuilder3); } pageBuilder.declarePositions(ENTRIES_PER_PAGE); return pageBuilder.build(); }
pageBuilder.declarePositions(distinctCount);
pageBuilder.declarePositions(distinctCount);
pageBuilder.declarePositions(intersectTypedSet.size());
pageBuilder.declarePositions(groupCount); Block target = blockBuilder.getRegion(blockBuilder.getPositionCount() - groupCount, groupCount);
pageBuilder.declarePositions(groupCount); Block target = blockBuilder.getRegion(blockBuilder.getPositionCount() - groupCount, groupCount);
@Override public Page processColumnar(ConnectorSession session, Page page, List<? extends Type> types) { int[] selectedPositions = filterPage(page); if (selectedPositions.length == 0) { return null; } if (projections.isEmpty()) { return new Page(selectedPositions.length); } PageBuilder pageBuilder = new PageBuilder(types); Block[] inputBlocks = page.getBlocks(); for (int projectionIndex = 0; projectionIndex < projections.size(); projectionIndex++) { ProjectionFunction projection = projections.get(projectionIndex); projectColumnar(selectedPositions, pageBuilder.getBlockBuilder(projectionIndex), inputBlocks, projection); } pageBuilder.declarePositions(selectedPositions.length); return pageBuilder.build(); }
@Override public Page processColumnar(ConnectorSession session, Page page, List<? extends Type> types) { PageBuilder pageBuilder = new PageBuilder(types); int positionCount = page.getPositionCount(); int[] selectedPositions = new int[positionCount]; int selectedCount = 0; for (int i = 0; i < positionCount; i++) { if (matches(i, page)) { selectedPositions[selectedCount++] = i; } } for (int i = 0; i < outputTypes.size(); i++) { Type type = outputTypes.get(i); Block block = page.getBlock(i); BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(i); for (int position : selectedPositions) { type.appendTo(block, position, blockBuilder); } } pageBuilder.declarePositions(selectedCount); return pageBuilder.build(); }
@TypeParameter("E") @SqlType("array(E)") public Block concat(@TypeParameter("E") Type elementType, @SqlType("array(E)") Block leftBlock, @SqlType("array(E)") Block rightBlock) { if (leftBlock.getPositionCount() == 0) { return rightBlock; } if (rightBlock.getPositionCount() == 0) { return leftBlock; } if (pageBuilder.isFull()) { pageBuilder.reset(); } BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(0); for (int i = 0; i < leftBlock.getPositionCount(); i++) { elementType.appendTo(leftBlock, i, blockBuilder); } for (int i = 0; i < rightBlock.getPositionCount(); i++) { elementType.appendTo(rightBlock, i, blockBuilder); } int total = leftBlock.getPositionCount() + rightBlock.getPositionCount(); pageBuilder.declarePositions(total); return blockBuilder.getRegion(blockBuilder.getPositionCount() - total, total); } }