@Test public void testLimitOnTopOfValues() { PlanBuilder planBuilder = new PlanBuilder(new PlanNodeIdAllocator(), dummyMetadata()); assertEquals( extractCardinality(planBuilder.limit(3, planBuilder.values(emptyList(), ImmutableList.of(emptyList())))), Range.singleton(1L)); assertEquals( extractCardinality(planBuilder.limit(3, planBuilder.values(emptyList(), ImmutableList.of(emptyList(), emptyList(), emptyList(), emptyList())))), Range.singleton(3L)); } }
private ProjectNode buildProjectedLimit(PlanBuilder planBuilder, Predicate<Symbol> projectionFilter) { Symbol a = planBuilder.symbol("a"); Symbol b = planBuilder.symbol("b"); return planBuilder.project( Assignments.identity(Stream.of(a, b).filter(projectionFilter).collect(toImmutableSet())), planBuilder.limit(1, planBuilder.values(a, b))); } }
@Test public void testDoesNotFire() { tester().assertThat(new EvaluateZeroLimit()) .on(p -> p.limit( 1, p.values(p.symbol("a")))) .doesNotFire(); }
@Test public void testDoesNotFire() { tester().assertThat(new PushLimitThroughMarkDistinct()) .on(p -> p.markDistinct( p.symbol("foo"), ImmutableList.of(p.symbol("bar")), p.limit( 1, p.values()))) .doesNotFire(); } }
@Test public void test() { tester().assertThat(new EvaluateZeroLimit()) .on(p -> p.limit( 0, p.filter( expression("b > 5"), p.values( ImmutableList.of(p.symbol("a"), p.symbol("b")), ImmutableList.of( expressions("1", "10"), expressions("2", "11")))))) // TODO: verify contents .matches(values(ImmutableMap.of())); } }
@Test public void testDoesntPushdownLimitThroughIdentityProjection() { tester().assertThat(new PushLimitThroughProject()) .on(p -> { Symbol a = p.symbol("a"); return p.limit(1, p.project( Assignments.of(a, a.toSymbolReference()), p.values(a))); }).doesNotFire(); } }
@Test public void test() { tester().assertThat(new PushLimitThroughMarkDistinct()) .on(p -> p.limit( 1, p.markDistinct( p.symbol("foo"), ImmutableList.of(p.symbol("bar")), p.values()))) .matches( node(MarkDistinctNode.class, node(LimitNode.class, node(ValuesNode.class)))); }
@Test public void testPushdownLimitNonIdentityProjection() { tester().assertThat(new PushLimitThroughProject()) .on(p -> { Symbol a = p.symbol("a"); return p.limit(1, p.project( Assignments.of(a, TRUE_LITERAL), p.values())); }) .matches( strictProject( ImmutableMap.of("b", expression("true")), limit(1, values()))); }