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));
}
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)));
}
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)));
}
Aggregations