Search in sources :

Example 6 with Plan

use of io.trino.sql.planner.Plan in project trino by trinodb.

the class TestPartialTopNWithPresortedInput method assertPlanWithValidation.

private void assertPlanWithValidation(@Language("SQL") String sql, PlanMatchPattern pattern) {
    LocalQueryRunner queryRunner = getQueryRunner();
    queryRunner.inTransaction(queryRunner.getDefaultSession(), transactionSession -> {
        Plan actualPlan = queryRunner.createPlan(transactionSession, sql, OPTIMIZED_AND_VALIDATED, false, WarningCollector.NOOP);
        PlanAssert.assertPlan(transactionSession, queryRunner.getMetadata(), queryRunner.getFunctionManager(), queryRunner.getStatsCalculator(), actualPlan, pattern);
        PlannerContext plannerContext = queryRunner.getPlannerContext();
        new ValidateLimitWithPresortedInput().validate(actualPlan.getRoot(), transactionSession, plannerContext, createTestingTypeAnalyzer(plannerContext), actualPlan.getTypes(), WarningCollector.NOOP);
        return null;
    });
}
Also used : PlannerContext(io.trino.sql.PlannerContext) ValidateLimitWithPresortedInput(io.trino.sql.planner.sanity.ValidateLimitWithPresortedInput) Plan(io.trino.sql.planner.Plan) LocalQueryRunner(io.trino.testing.LocalQueryRunner)

Example 7 with Plan

use of io.trino.sql.planner.Plan in project trino by trinodb.

the class TestRemoveUnsupportedDynamicFilters method assertPlan.

protected void assertPlan(PlanNode actual, PlanMatchPattern pattern) {
    getQueryRunner().inTransaction(session -> {
        // metadata.getCatalogHandle() registers the catalog for the transaction
        session.getCatalog().ifPresent(catalog -> metadata.getCatalogHandle(session, catalog));
        PlanAssert.assertPlan(session, metadata, getQueryRunner().getFunctionManager(), getQueryRunner().getStatsCalculator(), new Plan(actual, builder.getTypes(), StatsAndCosts.empty()), pattern);
        return null;
    });
}
Also used : Plan(io.trino.sql.planner.Plan)

Example 8 with Plan

use of io.trino.sql.planner.Plan in project trino by trinodb.

the class TestUnion method testPartialRollupAggregationsWithUnion.

@Test
public void testPartialRollupAggregationsWithUnion() {
    Plan plan = plan("SELECT orderstatus, sum(orderkey) FROM (SELECT orderkey, orderstatus FROM orders UNION ALL SELECT orderkey, orderstatus FROM orders) x GROUP BY ROLLUP (orderstatus)", OPTIMIZED_AND_VALIDATED, false);
    assertAtMostOneAggregationBetweenRemoteExchanges(plan);
    assertPlanIsFullyDistributed(plan);
}
Also used : Plan(io.trino.sql.planner.Plan) Test(org.testng.annotations.Test) BasePlanTest(io.trino.sql.planner.assertions.BasePlanTest)

Example 9 with Plan

use of io.trino.sql.planner.Plan in project trino by trinodb.

the class TestUnion method testPartialAggregationsWithUnion.

@Test
public void testPartialAggregationsWithUnion() {
    Plan plan = plan("SELECT orderstatus, sum(orderkey) FROM (SELECT orderkey, orderstatus FROM orders UNION ALL SELECT orderkey, orderstatus FROM orders) x GROUP BY (orderstatus)", OPTIMIZED_AND_VALIDATED, false);
    assertAtMostOneAggregationBetweenRemoteExchanges(plan);
    assertPlanIsFullyDistributed(plan);
}
Also used : Plan(io.trino.sql.planner.Plan) Test(org.testng.annotations.Test) BasePlanTest(io.trino.sql.planner.assertions.BasePlanTest)

Example 10 with Plan

use of io.trino.sql.planner.Plan in project trino by trinodb.

the class TestUnion method assertAtMostOneAggregationBetweenRemoteExchanges.

private static void assertAtMostOneAggregationBetweenRemoteExchanges(Plan plan) {
    List<PlanNode> fragments = searchFrom(plan.getRoot()).where(TestUnion::isRemoteExchange).findAll().stream().flatMap(exchangeNode -> exchangeNode.getSources().stream()).collect(toList());
    for (PlanNode fragment : fragments) {
        List<PlanNode> aggregations = searchFrom(fragment).where(AggregationNode.class::isInstance).recurseOnlyWhen(TestUnion::isNotRemoteExchange).findAll();
        assertFalse(aggregations.size() > 1, "More than a single AggregationNode between remote exchanges");
    }
}
Also used : Iterables(com.google.common.collect.Iterables) PlanNodeSearcher.searchFrom(io.trino.sql.planner.optimizations.PlanNodeSearcher.searchFrom) TopNNode(io.trino.sql.planner.plan.TopNNode) OPTIMIZED_AND_VALIDATED(io.trino.sql.planner.LogicalPlanner.Stage.OPTIMIZED_AND_VALIDATED) Assert.assertEquals(org.testng.Assert.assertEquals) Test(org.testng.annotations.Test) PlanNode(io.trino.sql.planner.plan.PlanNode) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) GATHER(io.trino.sql.planner.plan.ExchangeNode.Type.GATHER) REMOTE(io.trino.sql.planner.plan.ExchangeNode.Scope.REMOTE) Map(java.util.Map) AggregationNode(io.trino.sql.planner.plan.AggregationNode) REPARTITION(io.trino.sql.planner.plan.ExchangeNode.Type.REPARTITION) Assert.assertTrue(org.testng.Assert.assertTrue) ExchangeNode(io.trino.sql.planner.plan.ExchangeNode) Plan(io.trino.sql.planner.Plan) JoinNode(io.trino.sql.planner.plan.JoinNode) BasePlanTest(io.trino.sql.planner.assertions.BasePlanTest) Assert.assertFalse(org.testng.Assert.assertFalse) PlanNode(io.trino.sql.planner.plan.PlanNode) AggregationNode(io.trino.sql.planner.plan.AggregationNode)

Aggregations

Plan (io.trino.sql.planner.Plan)26 Test (org.testng.annotations.Test)9 BasePlanTest (io.trino.sql.planner.assertions.BasePlanTest)8 PlanNode (io.trino.sql.planner.plan.PlanNode)8 SubPlan (io.trino.sql.planner.SubPlan)7 PlanNodeIdAllocator (io.trino.sql.planner.PlanNodeIdAllocator)4 Duration (io.airlift.units.Duration)3 OPTIMIZED_AND_VALIDATED (io.trino.sql.planner.LogicalPlanner.Stage.OPTIMIZED_AND_VALIDATED)3 PlanAssert.assertPlan (io.trino.sql.planner.assertions.PlanAssert.assertPlan)3 PlanNodeSearcher.searchFrom (io.trino.sql.planner.optimizations.PlanNodeSearcher.searchFrom)3 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableMap (com.google.common.collect.ImmutableMap)2 Iterables (com.google.common.collect.Iterables)2 Session (io.trino.Session)2 PlannerContext (io.trino.sql.PlannerContext)2 LogicalPlanner (io.trino.sql.planner.LogicalPlanner)2 Symbol (io.trino.sql.planner.Symbol)2 TypeProvider (io.trino.sql.planner.TypeProvider)2 PlanBuilder (io.trino.sql.planner.iterative.rule.test.PlanBuilder)2 JoinNode (io.trino.sql.planner.plan.JoinNode)2