use of io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT in project trino by trinodb.
the class TestRemoveUnreferencedScalarSubqueries method testDoNotRemoveInputOfLeftOrFullJoinWhenSubqueryPotentiallyEmpty.
@Test
public void testDoNotRemoveInputOfLeftOrFullJoinWhenSubqueryPotentiallyEmpty() {
tester().assertThat(new RemoveUnreferencedScalarSubqueries()).on(p -> {
Symbol b = p.symbol("b");
return p.correlatedJoin(emptyList(), p.values(emptyList(), ImmutableList.of(emptyList())), LEFT, TRUE_LITERAL, p.filter(new ComparisonExpression(LESS_THAN, b.toSymbolReference(), new LongLiteral("3")), p.values(2, b)));
}).doesNotFire();
tester().assertThat(new RemoveUnreferencedScalarSubqueries()).on(p -> {
Symbol b = p.symbol("b");
return p.correlatedJoin(emptyList(), p.values(emptyList(), ImmutableList.of(emptyList())), FULL, TRUE_LITERAL, p.filter(new ComparisonExpression(LESS_THAN, b.toSymbolReference(), new LongLiteral("3")), p.values(2, b)));
}).doesNotFire();
}
use of io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT in project trino by trinodb.
the class TestTransformCorrelatedJoinToJoin method testRewriteLeftCorrelatedJoin.
@Test
public void testRewriteLeftCorrelatedJoin() {
tester().assertThat(new TransformCorrelatedJoinToJoin(tester().getPlannerContext())).on(p -> {
Symbol a = p.symbol("a");
Symbol b = p.symbol("b");
return p.correlatedJoin(ImmutableList.of(a), p.values(a), LEFT, TRUE_LITERAL, p.filter(new ComparisonExpression(GREATER_THAN, b.toSymbolReference(), a.toSymbolReference()), p.values(b)));
}).matches(join(JoinNode.Type.LEFT, ImmutableList.of(), Optional.of("b > a"), values("a"), filter(TRUE_LITERAL, values("b"))));
tester().assertThat(new TransformCorrelatedJoinToJoin(tester().getPlannerContext())).on(p -> {
Symbol a = p.symbol("a");
Symbol b = p.symbol("b");
return p.correlatedJoin(ImmutableList.of(a), p.values(a), LEFT, new ComparisonExpression(LESS_THAN, b.toSymbolReference(), new LongLiteral("3")), p.filter(new ComparisonExpression(GREATER_THAN, b.toSymbolReference(), a.toSymbolReference()), p.values(b)));
}).matches(join(JoinNode.Type.LEFT, ImmutableList.of(), Optional.of("b > a AND b < 3"), values("a"), filter(TRUE_LITERAL, values("b"))));
}
use of io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT in project trino by trinodb.
the class TestPruneCorrelatedJoinColumns method testRemoveUnusedCorrelatedJoinNode.
@Test
public void testRemoveUnusedCorrelatedJoinNode() {
// retain input of INNER join
tester().assertThat(new PruneCorrelatedJoinColumns()).on(p -> {
Symbol a = p.symbol("a");
Symbol correlationSymbol = p.symbol("correlation_symbol");
Symbol b = p.symbol("b");
return p.project(Assignments.identity(a), p.correlatedJoin(ImmutableList.of(correlationSymbol), p.values(a, correlationSymbol), p.values(1, b)));
}).matches(project(ImmutableMap.of("a", PlanMatchPattern.expression("a")), values("a", "correlationSymbol")));
// retain input of LEFT join
tester().assertThat(new PruneCorrelatedJoinColumns()).on(p -> {
Symbol a = p.symbol("a");
Symbol correlationSymbol = p.symbol("correlation_symbol");
Symbol b = p.symbol("b");
return p.project(Assignments.identity(a), p.correlatedJoin(ImmutableList.of(correlationSymbol), p.values(a, correlationSymbol), LEFT, new ComparisonExpression(GREATER_THAN, b.toSymbolReference(), correlationSymbol.toSymbolReference()), p.values(1, b)));
}).matches(project(ImmutableMap.of("a", PlanMatchPattern.expression("a")), values("a", "correlationSymbol")));
// retain subquery of INNER join
tester().assertThat(new PruneCorrelatedJoinColumns()).on(p -> {
Symbol a = p.symbol("a");
Symbol b = p.symbol("b");
return p.project(Assignments.identity(b), p.correlatedJoin(ImmutableList.of(), p.values(1, a), p.values(b)));
}).matches(project(ImmutableMap.of("b", PlanMatchPattern.expression("b")), values("b")));
// retain subquery of RIGHT join
tester().assertThat(new PruneCorrelatedJoinColumns()).on(p -> {
Symbol a = p.symbol("a");
Symbol b = p.symbol("b");
return p.project(Assignments.identity(b), p.correlatedJoin(ImmutableList.of(), p.values(1, a), RIGHT, new ComparisonExpression(GREATER_THAN, b.toSymbolReference(), a.toSymbolReference()), p.values(b)));
}).matches(project(ImmutableMap.of("b", PlanMatchPattern.expression("b")), values("b")));
}
Aggregations