@Override protected List<? extends OperatorFactory> createOperatorFactories() { List<Type> tableScanTypes = getColumnTypes("orders", "totalprice", "clerk"); OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice", "clerk"); LimitOperatorFactory limitOperator = new LimitOperatorFactory(1, new PlanNodeId("test"), ROWS); OrderByOperatorFactory orderByOperator = new OrderByOperatorFactory( 2, new PlanNodeId("test"), tableScanTypes, ImmutableList.of(1), ROWS, ImmutableList.of(0), ImmutableList.of(ASC_NULLS_LAST), new PagesIndex.TestingFactory(false)); return ImmutableList.of(tableScanOperator, limitOperator, orderByOperator); }
@Test public void testLimitWithPageAlignment() { List<Page> input = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(2, 6) .build(); OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), 5); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT) .page(createSequencePage(ImmutableList.of(BIGINT), 3, 1)) .page(createSequencePage(ImmutableList.of(BIGINT), 2, 4)) .build(); OperatorAssertion.assertOperatorEquals(operatorFactory, driverContext, input, expected); }
@Test public void testLimitWithBlockView() { List<Page> input = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(2, 6) .build(); OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), 6); List<Page> expected = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(1, 6) .build(); OperatorAssertion.assertOperatorEquals(operatorFactory, ImmutableList.of(BIGINT), driverContext, input, expected); } }
@Test public void testLimitWithPageAlignment() throws Exception { List<Page> input = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(2, 6) .build(); OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 5); Operator operator = operatorFactory.createOperator(driverContext); List<Page> expected = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .build(); OperatorAssertion.assertOperatorEquals(operator, input, expected); }
@Test public void testLimitWithBlockView() throws Exception { List<Page> input = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(2, 6) .build(); OperatorFactory operatorFactory = new LimitOperatorFactory(0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 6); Operator operator = operatorFactory.createOperator(driverContext); List<Page> expected = rowPagesBuilder(BIGINT) .addSequencePage(3, 1) .addSequencePage(2, 4) .addSequencePage(1, 6) .build(); OperatorAssertion.assertOperatorEquals(operator, input, expected); } }
@Override protected List<? extends OperatorFactory> createOperatorFactories() { List<Type> tableScanTypes = getColumnTypes("orders", "totalprice", "clerk"); OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice", "clerk"); LimitOperatorFactory limitOperator = new LimitOperatorFactory(1, new PlanNodeId("test"), ROWS); OrderByOperatorFactory orderByOperator = new OrderByOperatorFactory( 2, new PlanNodeId("test"), tableScanTypes, ImmutableList.of(1), ROWS, ImmutableList.of(0), ImmutableList.of(ASC_NULLS_LAST), new PagesIndex.TestingFactory(false)); return ImmutableList.of(tableScanOperator, limitOperator, orderByOperator); }
@Override protected List<? extends OperatorFactory> createOperatorFactories() { OperatorFactory tableScanOperator = createTableScanOperator(0, new PlanNodeId("test"), "orders", "totalprice", "clerk"); LimitOperatorFactory limitOperator = new LimitOperatorFactory(1, new PlanNodeId("test"), tableScanOperator.getTypes(), ROWS); OrderByOperatorFactory orderByOperator = new OrderByOperatorFactory( 2, new PlanNodeId("test"), limitOperator.getTypes(), ImmutableList.of(1), ROWS, ImmutableList.of(0), ImmutableList.of(ASC_NULLS_LAST)); return ImmutableList.of(tableScanOperator, limitOperator, orderByOperator); }
@Override public OperatorFactory duplicate() { return new LimitOperatorFactory(operatorId, planNodeId, types, limit); } }
@Override public PhysicalOperation visitLimit(LimitNode node, LocalExecutionPlanContext context) { PhysicalOperation source = node.getSource().accept(this, context); OperatorFactory operatorFactory = new LimitOperatorFactory(context.getNextOperatorId(), node.getId(), source.getTypes(), node.getCount()); return new PhysicalOperation(operatorFactory, source.getLayout(), source); }
@Override public PhysicalOperation visitLimit(LimitNode node, LocalExecutionPlanContext context) { PhysicalOperation source = node.getSource().accept(this, context); OperatorFactory operatorFactory = new LimitOperatorFactory(context.getNextOperatorId(), node.getId(), node.getCount()); return new PhysicalOperation(operatorFactory, source.getLayout(), context, source); }
@Override public OperatorFactory duplicate() { return new LimitOperatorFactory(operatorId, planNodeId, limit); } }