Search in sources :

Example 26 with MergePhase

use of io.crate.planner.node.dql.MergePhase in project crate by crate.

the class GroupByPlannerTest method testGroupByWithHavingAndNoLimit.

@Test
public void testGroupByWithHavingAndNoLimit() throws Exception {
    Merge planNode = e.plan("select count(*), name from users group by name having count(*) > 1");
    DistributedGroupBy distributedGroupBy = (DistributedGroupBy) planNode.subPlan();
    // reducer
    MergePhase mergePhase = distributedGroupBy.reducerMergeNode();
    // group projection
    //      outputs: name, count(*)
    Projection projection = mergePhase.projections().get(1);
    assertThat(projection, instanceOf(FilterProjection.class));
    FilterProjection filterProjection = (FilterProjection) projection;
    Symbol countArgument = ((Function) filterProjection.query()).arguments().get(0);
    assertThat(countArgument, instanceOf(InputColumn.class));
    // pointing to second output from group projection
    assertThat(((InputColumn) countArgument).index(), is(1));
    assertThat(mergePhase.outputTypes().get(0), equalTo(DataTypes.LONG));
    assertThat(mergePhase.outputTypes().get(1), equalTo(DataTypes.STRING));
    mergePhase = planNode.mergePhase();
    assertThat(mergePhase.outputTypes().get(0), equalTo(DataTypes.LONG));
    assertThat(mergePhase.outputTypes().get(1), equalTo(DataTypes.STRING));
}
Also used : MergePhase(io.crate.planner.node.dql.MergePhase) Merge(io.crate.planner.Merge) DistributedGroupBy(io.crate.planner.node.dql.DistributedGroupBy) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 27 with MergePhase

use of io.crate.planner.node.dql.MergePhase in project crate by crate.

the class InsertPlannerTest method testInsertFromSubQueryDistributedGroupByPartitioned.

@Test
public void testInsertFromSubQueryDistributedGroupByPartitioned() throws Exception {
    Merge planNode = e.plan("insert into parted_pks (id, date) (select id, date from users group by id, date)");
    DistributedGroupBy groupBy = (DistributedGroupBy) planNode.subPlan();
    MergePhase mergePhase = groupBy.reducerMergeNode();
    assertThat(mergePhase.projections(), contains(instanceOf(GroupProjection.class), instanceOf(EvalProjection.class), instanceOf(ColumnIndexWriterProjection.class)));
    ColumnIndexWriterProjection projection = (ColumnIndexWriterProjection) mergePhase.projections().get(2);
    assertThat(projection.primaryKeys().size(), is(2));
    assertThat(projection.primaryKeys().get(0).fqn(), is("id"));
    assertThat(projection.primaryKeys().get(1).fqn(), is("date"));
    assertThat(projection.columnReferences().size(), is(1));
    assertThat(projection.columnReferences().get(0).ident().columnIdent().fqn(), is("id"));
    assertThat(projection.partitionedBySymbols().size(), is(1));
    assertThat(((InputColumn) projection.partitionedBySymbols().get(0)).index(), is(1));
    assertNotNull(projection.clusteredByIdent());
    assertThat(projection.clusteredByIdent().fqn(), is("id"));
    assertThat(projection.tableIdent().fqn(), is("doc.parted_pks"));
    MergePhase localMergeNode = planNode.mergePhase();
    assertThat(localMergeNode.projections().size(), is(1));
    assertThat(localMergeNode.projections().get(0), instanceOf(MergeCountProjection.class));
    assertThat(localMergeNode.finalProjection().get().outputs().size(), is(1));
}
Also used : MergePhase(io.crate.planner.node.dql.MergePhase) DistributedGroupBy(io.crate.planner.node.dql.DistributedGroupBy) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 28 with MergePhase

use of io.crate.planner.node.dql.MergePhase in project crate by crate.

the class InsertPlannerTest method testInsertFromSubQueryReduceOnCollectorGroupBy.

@Test
public void testInsertFromSubQueryReduceOnCollectorGroupBy() throws Exception {
    Merge merge = e.plan("insert into users (id, name) (select id, arbitrary(name) from users group by id)");
    Collect collect = (Collect) merge.subPlan();
    RoutedCollectPhase collectPhase = ((RoutedCollectPhase) collect.collectPhase());
    assertThat(collectPhase.projections(), contains(instanceOf(GroupProjection.class), instanceOf(EvalProjection.class), instanceOf(ColumnIndexWriterProjection.class)));
    ColumnIndexWriterProjection columnIndexWriterProjection = (ColumnIndexWriterProjection) collectPhase.projections().get(2);
    assertThat(columnIndexWriterProjection.columnReferences(), contains(isReference("id"), isReference("name")));
    MergePhase mergePhase = merge.mergePhase();
    assertThat(mergePhase.projections(), contains(instanceOf(MergeCountProjection.class)));
}
Also used : MergePhase(io.crate.planner.node.dql.MergePhase) Collect(io.crate.planner.node.dql.Collect) RoutedCollectPhase(io.crate.planner.node.dql.RoutedCollectPhase) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 29 with MergePhase

use of io.crate.planner.node.dql.MergePhase in project crate by crate.

the class InsertPlannerTest method testInsertFromSubQueryWithoutLimit.

@Test
public void testInsertFromSubQueryWithoutLimit() throws Exception {
    Merge planNode = e.plan("insert into users (id, name) (select id, name from users)");
    Collect collect = (Collect) planNode.subPlan();
    RoutedCollectPhase collectPhase = ((RoutedCollectPhase) collect.collectPhase());
    assertThat(collectPhase.projections().size(), is(1));
    assertThat(collectPhase.projections().get(0), instanceOf(ColumnIndexWriterProjection.class));
    MergePhase localMergeNode = planNode.mergePhase();
    assertThat(localMergeNode.projections().size(), is(1));
    assertThat(localMergeNode.projections().get(0), instanceOf(MergeCountProjection.class));
}
Also used : MergePhase(io.crate.planner.node.dql.MergePhase) Collect(io.crate.planner.node.dql.Collect) RoutedCollectPhase(io.crate.planner.node.dql.RoutedCollectPhase) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 30 with MergePhase

use of io.crate.planner.node.dql.MergePhase in project crate by crate.

the class InsertPlannerTest method testGroupByHavingInsertInto.

@Test
public void testGroupByHavingInsertInto() throws Exception {
    Merge planNode = e.plan("insert into users (id, name) (select name, count(*) from users group by name having count(*) > 3)");
    DistributedGroupBy groupByNode = (DistributedGroupBy) planNode.subPlan();
    MergePhase mergePhase = groupByNode.reducerMergeNode();
    assertThat(mergePhase.projections(), contains(instanceOf(GroupProjection.class), instanceOf(FilterProjection.class), instanceOf(EvalProjection.class), instanceOf(ColumnIndexWriterProjection.class)));
    FilterProjection filterProjection = (FilterProjection) mergePhase.projections().get(1);
    assertThat(filterProjection.outputs().size(), is(2));
    assertThat(filterProjection.outputs().get(0), instanceOf(InputColumn.class));
    assertThat(filterProjection.outputs().get(1), instanceOf(InputColumn.class));
    InputColumn inputColumn = (InputColumn) filterProjection.outputs().get(0);
    assertThat(inputColumn.index(), is(0));
    inputColumn = (InputColumn) filterProjection.outputs().get(1);
    assertThat(inputColumn.index(), is(1));
    MergePhase localMergeNode = planNode.mergePhase();
    assertThat(localMergeNode.projections().size(), is(1));
    assertThat(localMergeNode.projections().get(0), instanceOf(MergeCountProjection.class));
    assertThat(localMergeNode.finalProjection().get().outputs().size(), is(1));
}
Also used : MergePhase(io.crate.planner.node.dql.MergePhase) InputColumn(io.crate.analyze.symbol.InputColumn) DistributedGroupBy(io.crate.planner.node.dql.DistributedGroupBy) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Aggregations

MergePhase (io.crate.planner.node.dql.MergePhase)30 Test (org.junit.Test)27 CrateUnitTest (io.crate.test.integration.CrateUnitTest)26 Merge (io.crate.planner.Merge)15 RoutedCollectPhase (io.crate.planner.node.dql.RoutedCollectPhase)15 DistributedGroupBy (io.crate.planner.node.dql.DistributedGroupBy)13 Collect (io.crate.planner.node.dql.Collect)9 Reference (io.crate.metadata.Reference)3 Projection (io.crate.planner.projection.Projection)3 ImmutableList (com.google.common.collect.ImmutableList)2 InputColumn (io.crate.analyze.symbol.InputColumn)2 Symbol (io.crate.analyze.symbol.Symbol)2 Routing (io.crate.metadata.Routing)2 NodeOperation (io.crate.operation.NodeOperation)2 CountAggregation (io.crate.operation.aggregation.impl.CountAggregation)2 PositionalOrderBy (io.crate.planner.PositionalOrderBy)2 Aggregation (io.crate.analyze.symbol.Aggregation)1 FunctionIdent (io.crate.metadata.FunctionIdent)1 FunctionInfo (io.crate.metadata.FunctionInfo)1 ExecutionPhase (io.crate.planner.node.ExecutionPhase)1