Search in sources :

Example 6 with Join

use of io.crate.planner.node.dql.join.Join in project crate by crate.

the class InsertPlannerTest method testInsertFromSubQueryJoin.

@Test
public void testInsertFromSubQueryJoin() {
    Join join = e.plan("insert into users (id, name) (select u1.id, u2.name from users u1 CROSS JOIN users u2)");
    assertThat(join.joinPhase().projections(), contains(instanceOf(EvalProjection.class), instanceOf(ColumnIndexWriterProjection.class)));
    ColumnIndexWriterProjection projection = (ColumnIndexWriterProjection) join.joinPhase().projections().get(1);
    assertThat(projection.columnReferencesExclPartition().size(), is(2));
    assertThat(projection.columnReferencesExclPartition().get(0).column().fqn(), is("id"));
    assertThat(projection.columnReferencesExclPartition().get(1).column().fqn(), is("name"));
    assertThat(((InputColumn) projection.ids().get(0)).index(), is(0));
    assertThat(((InputColumn) projection.clusteredBy()).index(), is(0));
    assertThat(projection.partitionedBySymbols().isEmpty(), is(true));
}
Also used : Join(io.crate.planner.node.dql.join.Join) ColumnIndexWriterProjection(io.crate.execution.dsl.projection.ColumnIndexWriterProjection) CrateDummyClusterServiceUnitTest(io.crate.test.integration.CrateDummyClusterServiceUnitTest) Test(org.junit.Test)

Example 7 with Join

use of io.crate.planner.node.dql.join.Join in project crate by crate.

the class SubQueryPlannerTest method testJoinWithAggregationOnSubSelectsWithAggregations.

@Test
public void testJoinWithAggregationOnSubSelectsWithAggregations() throws Exception {
    Join nl = e.plan("select t1.a, count(*) from " + " (select a, count(*) as cnt from t1 group by a) t1 " + "join" + " (select distinct i from t2) t2 " + "on t1.cnt = t2.i::long " + "group by t1.a");
    assertThat(nl.joinPhase().projections(), contains(instanceOf(EvalProjection.class), instanceOf(GroupProjection.class)));
    assertThat(nl.left(), instanceOf(Collect.class));
    Collect leftPlan = (Collect) nl.left();
    CollectPhase leftCollectPhase = leftPlan.collectPhase();
    assertThat(leftCollectPhase.projections(), contains(instanceOf(GroupProjection.class), instanceOf(GroupProjection.class), instanceOf(EvalProjection.class)));
    Collect rightPlan = (Collect) nl.right();
    assertThat(rightPlan.collectPhase().projections(), contains(instanceOf(GroupProjection.class), instanceOf(GroupProjection.class)));
}
Also used : Collect(io.crate.planner.node.dql.Collect) Join(io.crate.planner.node.dql.join.Join) CollectPhase(io.crate.execution.dsl.phases.CollectPhase) RoutedCollectPhase(io.crate.execution.dsl.phases.RoutedCollectPhase) CrateDummyClusterServiceUnitTest(io.crate.test.integration.CrateDummyClusterServiceUnitTest) Test(org.junit.Test)

Example 8 with Join

use of io.crate.planner.node.dql.join.Join in project crate by crate.

the class SubQueryPlannerTest method testJoinWithAggregationOnSubSelectsWithLimitAndOffset.

@Test
public void testJoinWithAggregationOnSubSelectsWithLimitAndOffset() throws Exception {
    Join join = e.plan("select t1.a, count(*) from " + " (select i, a from t1 order by a limit 10 offset 2) t1 " + "join" + " (select i from t2 order by i desc limit 5 offset 5) t2 " + "on t1.i = t2.i " + "group by t1.a");
    QueryThenFetch qtf = (QueryThenFetch) join.left();
    Collect left = (Collect) qtf.subPlan();
    assertThat("1 node, otherwise mergePhases would be required", left.nodeIds().size(), is(1));
    assertThat(((RoutedCollectPhase) left.collectPhase()).orderBy(), isSQL("doc.t1.a"));
    assertThat(left.collectPhase().projections(), contains(isTopN(10, 2), instanceOf(FetchProjection.class)));
    assertThat(left.collectPhase().toCollect(), isSQL("doc.t1._fetchid, doc.t1.a"));
    Collect right = (Collect) join.right();
    assertThat("1 node, otherwise mergePhases would be required", right.nodeIds().size(), is(1));
    assertThat(((RoutedCollectPhase) right.collectPhase()).orderBy(), isSQL("doc.t2.i DESC"));
    assertThat(right.collectPhase().projections(), contains(isTopN(5, 5)));
    List<Projection> nlProjections = join.joinPhase().projections();
    assertThat(nlProjections, contains(instanceOf(EvalProjection.class), instanceOf(GroupProjection.class)));
}
Also used : QueryThenFetch(io.crate.planner.node.dql.QueryThenFetch) Collect(io.crate.planner.node.dql.Collect) Join(io.crate.planner.node.dql.join.Join) OrderedTopNProjection(io.crate.execution.dsl.projection.OrderedTopNProjection) GroupProjection(io.crate.execution.dsl.projection.GroupProjection) FilterProjection(io.crate.execution.dsl.projection.FilterProjection) AggregationProjection(io.crate.execution.dsl.projection.AggregationProjection) Projection(io.crate.execution.dsl.projection.Projection) TopNProjection(io.crate.execution.dsl.projection.TopNProjection) FetchProjection(io.crate.execution.dsl.projection.FetchProjection) EvalProjection(io.crate.execution.dsl.projection.EvalProjection) CrateDummyClusterServiceUnitTest(io.crate.test.integration.CrateDummyClusterServiceUnitTest) Test(org.junit.Test)

Aggregations

Join (io.crate.planner.node.dql.join.Join)8 CrateDummyClusterServiceUnitTest (io.crate.test.integration.CrateDummyClusterServiceUnitTest)6 Test (org.junit.Test)6 EvalProjection (io.crate.execution.dsl.projection.EvalProjection)4 Collect (io.crate.planner.node.dql.Collect)4 AggregationProjection (io.crate.execution.dsl.projection.AggregationProjection)3 FetchProjection (io.crate.execution.dsl.projection.FetchProjection)3 FilterProjection (io.crate.execution.dsl.projection.FilterProjection)3 GroupProjection (io.crate.execution.dsl.projection.GroupProjection)3 OrderedTopNProjection (io.crate.execution.dsl.projection.OrderedTopNProjection)3 Projection (io.crate.execution.dsl.projection.Projection)3 TopNProjection (io.crate.execution.dsl.projection.TopNProjection)3 QueryThenFetch (io.crate.planner.node.dql.QueryThenFetch)3 SelectSymbol (io.crate.expression.symbol.SelectSymbol)2 Symbol (io.crate.expression.symbol.Symbol)2 ExecutionPlan (io.crate.planner.ExecutionPlan)2 List (java.util.List)2 DocTableRelation (io.crate.analyze.relations.DocTableRelation)1 CollectPhase (io.crate.execution.dsl.phases.CollectPhase)1 HashJoinPhase (io.crate.execution.dsl.phases.HashJoinPhase)1