Search in sources :

Example 1 with RIGHT

use of io.trino.sql.planner.plan.CorrelatedJoinNode.Type.RIGHT in project trino by trinodb.

the class TestTransformUncorrelatedSubqueryToJoin method testRewriteRightCorrelatedJoin.

@Test
public void testRewriteRightCorrelatedJoin() {
    tester().assertThat(new TransformUncorrelatedSubqueryToJoin()).on(p -> {
        Symbol a = p.symbol("a");
        Symbol b = p.symbol("b");
        return p.correlatedJoin(emptyList(), p.values(a), RIGHT, TRUE_LITERAL, p.values(b));
    }).matches(join(JoinNode.Type.INNER, ImmutableList.of(), Optional.empty(), values("a"), values("b")));
    tester().assertThat(new TransformUncorrelatedSubqueryToJoin()).on(p -> {
        Symbol a = p.symbol("a");
        Symbol b = p.symbol("b");
        return p.correlatedJoin(emptyList(), p.values(a), RIGHT, new ComparisonExpression(GREATER_THAN, b.toSymbolReference(), a.toSymbolReference()), p.values(b));
    }).matches(project(ImmutableMap.of("a", new ExpressionMatcher("if(b > a, a, null)"), "b", new ExpressionMatcher("b")), join(JoinNode.Type.INNER, ImmutableList.of(), Optional.empty(), values("a"), values("b"))));
}
Also used : ExpressionMatcher(io.trino.sql.planner.assertions.ExpressionMatcher) Symbol(io.trino.sql.planner.Symbol) INNER(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.INNER) LEFT(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT) ImmutableMap(com.google.common.collect.ImmutableMap) BaseRuleTest(io.trino.sql.planner.iterative.rule.test.BaseRuleTest) RIGHT(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.RIGHT) Collections.emptyList(java.util.Collections.emptyList) Test(org.testng.annotations.Test) PlanMatchPattern.values(io.trino.sql.planner.assertions.PlanMatchPattern.values) TRUE_LITERAL(io.trino.sql.tree.BooleanLiteral.TRUE_LITERAL) ComparisonExpression(io.trino.sql.tree.ComparisonExpression) FULL(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.FULL) ImmutableList(com.google.common.collect.ImmutableList) PlanMatchPattern.project(io.trino.sql.planner.assertions.PlanMatchPattern.project) GREATER_THAN(io.trino.sql.tree.ComparisonExpression.Operator.GREATER_THAN) Optional(java.util.Optional) JoinNode(io.trino.sql.planner.plan.JoinNode) PlanMatchPattern.join(io.trino.sql.planner.assertions.PlanMatchPattern.join) ExpressionMatcher(io.trino.sql.planner.assertions.ExpressionMatcher) ComparisonExpression(io.trino.sql.tree.ComparisonExpression) Symbol(io.trino.sql.planner.Symbol) BaseRuleTest(io.trino.sql.planner.iterative.rule.test.BaseRuleTest) Test(org.testng.annotations.Test)

Example 2 with RIGHT

use of io.trino.sql.planner.plan.CorrelatedJoinNode.Type.RIGHT 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")));
}
Also used : Symbol(io.trino.sql.planner.Symbol) PlanMatchPattern.correlatedJoin(io.trino.sql.planner.assertions.PlanMatchPattern.correlatedJoin) LEFT(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT) ImmutableMap(com.google.common.collect.ImmutableMap) BaseRuleTest(io.trino.sql.planner.iterative.rule.test.BaseRuleTest) RIGHT(io.trino.sql.planner.plan.CorrelatedJoinNode.Type.RIGHT) Assignments(io.trino.sql.planner.plan.Assignments) PlanMatchPattern(io.trino.sql.planner.assertions.PlanMatchPattern) Test(org.testng.annotations.Test) PlanMatchPattern.values(io.trino.sql.planner.assertions.PlanMatchPattern.values) TRUE_LITERAL(io.trino.sql.tree.BooleanLiteral.TRUE_LITERAL) FilterNode(io.trino.sql.planner.plan.FilterNode) ComparisonExpression(io.trino.sql.tree.ComparisonExpression) PlanMatchPattern.node(io.trino.sql.planner.assertions.PlanMatchPattern.node) ImmutableList(com.google.common.collect.ImmutableList) PlanMatchPattern.project(io.trino.sql.planner.assertions.PlanMatchPattern.project) GREATER_THAN(io.trino.sql.tree.ComparisonExpression.Operator.GREATER_THAN) GREATER_THAN_OR_EQUAL(io.trino.sql.tree.ComparisonExpression.Operator.GREATER_THAN_OR_EQUAL) ComparisonExpression(io.trino.sql.tree.ComparisonExpression) Symbol(io.trino.sql.planner.Symbol) BaseRuleTest(io.trino.sql.planner.iterative.rule.test.BaseRuleTest) Test(org.testng.annotations.Test)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableMap (com.google.common.collect.ImmutableMap)2 Symbol (io.trino.sql.planner.Symbol)2 PlanMatchPattern.project (io.trino.sql.planner.assertions.PlanMatchPattern.project)2 PlanMatchPattern.values (io.trino.sql.planner.assertions.PlanMatchPattern.values)2 BaseRuleTest (io.trino.sql.planner.iterative.rule.test.BaseRuleTest)2 LEFT (io.trino.sql.planner.plan.CorrelatedJoinNode.Type.LEFT)2 RIGHT (io.trino.sql.planner.plan.CorrelatedJoinNode.Type.RIGHT)2 TRUE_LITERAL (io.trino.sql.tree.BooleanLiteral.TRUE_LITERAL)2 ComparisonExpression (io.trino.sql.tree.ComparisonExpression)2 GREATER_THAN (io.trino.sql.tree.ComparisonExpression.Operator.GREATER_THAN)2 Test (org.testng.annotations.Test)2 ExpressionMatcher (io.trino.sql.planner.assertions.ExpressionMatcher)1 PlanMatchPattern (io.trino.sql.planner.assertions.PlanMatchPattern)1 PlanMatchPattern.correlatedJoin (io.trino.sql.planner.assertions.PlanMatchPattern.correlatedJoin)1 PlanMatchPattern.join (io.trino.sql.planner.assertions.PlanMatchPattern.join)1 PlanMatchPattern.node (io.trino.sql.planner.assertions.PlanMatchPattern.node)1 Assignments (io.trino.sql.planner.plan.Assignments)1 FULL (io.trino.sql.planner.plan.CorrelatedJoinNode.Type.FULL)1 INNER (io.trino.sql.planner.plan.CorrelatedJoinNode.Type.INNER)1