# description: Tests for printout of various aggregation operators.
#     Plan around these operators may change in whatever way,
#     the only thing that must be held is an invariant described
#     in comments to every test case.
# group: [explain]

# simple group colocated hash aggregate
explain plan
SELECT sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [SUM(C2)]
      est: (rows=20)
    Project
        fieldNames: [C1, C2]
        projection: [X, X]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)

# simple group colocated sort aggregate
explain plan
SELECT /*+ DISABLE_RULE('ColocatedHashAggregateConverterRule',
           'MapReduceHashAggregateConverterRule') */ sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedSortAggregate
      fieldNames: [C1, EXPR$0]
      collation: [C1 ASC]
      group: [C1]
      aggregation: [SUM(C2)]
      est: (rows=20)
    Project
        fieldNames: [C1, C2]
        projection: [X, X]
        est: (rows=100)
      Sort
          collation: [X ASC]
          est: (rows=100)
        TableFunctionScan
            fieldNames: [X]
            invocation: SYSTEM_RANGE(1, 10)
            est: (rows=100)

# simple group map-reduce hash aggregate
explain plan
SELECT /*+ DISABLE_RULE('ColocatedHashAggregateConverterRule') */ sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ReduceHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [SUM(_ACC0)]
      est: (rows=20)
    MapHashAggregate
        fieldNames: [C1, _ACC0, _GROUP_ID]
        group: [C1]
        aggregation: [SUM(C2)]
        est: (rows=20)
      Project
          fieldNames: [C1, C2]
          projection: [X, X]
          est: (rows=100)
        TableFunctionScan
            fieldNames: [X]
            invocation: SYSTEM_RANGE(1, 10)
            est: (rows=100)

# simple group map-reduce sort aggregate
explain plan
SELECT /*+ DISABLE_RULE('ColocatedHashAggregateConverterRule', 
           'ColocatedHashAggregateConverterRule',
           'ColocatedSortAggregateConverterRule',
           'MapReduceHashAggregateConverterRule') */ sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ReduceSortAggregate
      fieldNames: [C1, EXPR$0]
      collation: [C1 ASC]
      group: [C1]
      aggregation: [SUM(_ACC0)]
      est: (rows=20)
    MapSortAggregate
        fieldNames: [C1, _ACC0]
        collation: [C1 ASC]
        group: [C1]
        aggregation: [SUM(C2)]
        est: (rows=20)
      Project
          fieldNames: [C1, C2]
          projection: [X, X]
          est: (rows=100)
        Sort
            collation: [X ASC]
            est: (rows=100)
          TableFunctionScan
              fieldNames: [X]
              invocation: SYSTEM_RANGE(1, 10)
              est: (rows=100)

# aggregation by group set colocated hash aggregate
explain plan
SELECT sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY ROLLUP (c1, c3);
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=36)
  ColocatedHashAggregate
      fieldNames: [C1, C3, EXPR$0]
      group: [C1, C3]
      groupSets: [[C1, C3], [C1], []]
      aggregation: [SUM(C2)]
      est: (rows=36)
    Project
        fieldNames: [C1, C3, C2]
        projection: [X, X, X]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)

# aggregation by group set map-reduce hash aggregate
explain plan
SELECT /*+ DISABLE_RULE('ColocatedHashAggregateConverterRule') */ sum(c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY ROLLUP (c1, c3);
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=36)
  ReduceHashAggregate
      fieldNames: [C1, C3, EXPR$0]
      group: [C1, C3]
      groupSets: [[C1, C3], [C1], []]
      aggregation: [SUM(_ACC0)]
      est: (rows=36)
    MapHashAggregate
        fieldNames: [C1, C3, _ACC0, _GROUP_ID]
        group: [C1, C3]
        groupSets: [[C1, C3], [C1], []]
        aggregation: [SUM(C2)]
        est: (rows=36)
      Project
          fieldNames: [C1, C3, C2]
          projection: [X, X, X]
          est: (rows=100)
        TableFunctionScan
            fieldNames: [X]
            invocation: SYSTEM_RANGE(1, 10)
            est: (rows=100)

# distinct aggregate
explain plan
SELECT sum(DISTINCT c2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [SUM(DISTINCT C2)]
      est: (rows=20)
    Project
        fieldNames: [C1, C2]
        projection: [X, X]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)

# aggregate within distinct
explain plan
SELECT sum(c2) WITHIN DISTINCT (c2 / 2)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [SUM(C2) WITHIN DISTINCT ($f2)]
      est: (rows=20)
    Project
        fieldNames: [C1, C2, $f2]
        projection: [X, X, /(X, 2)]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)

# aggregate with additional filtration
explain plan
SELECT sum(c2) FILTER (WHERE c2 % 2 = 1)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [SUM(C2) FILTER $f2]
      est: (rows=20)
    Project
        fieldNames: [C1, C2, $f2]
        projection: [X, X, =(MOD(X, 2), 1)]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)

# aggregate with all modification
explain plan
SELECT count(DISTINCT c2) WITHIN DISTINCT (c2 / 2) FILTER (WHERE c2 % 2 = 1)
  FROM (SELECT x AS c1, x AS c2, x AS c3 FROM system_range(1, 10))
 GROUP BY c1;
----
Project
    fieldNames: [EXPR$0]
    projection: [EXPR$0]
    est: (rows=20)
  ColocatedHashAggregate
      fieldNames: [C1, EXPR$0]
      group: [C1]
      aggregation: [COUNT(DISTINCT C2) WITHIN DISTINCT ($f3) FILTER $f2]
      est: (rows=20)
    Project
        fieldNames: [C1, C2, $f2, $f3]
        projection: [X, X, =(MOD(X, 2), 1), /(X, 2)]
        est: (rows=100)
      TableFunctionScan
          fieldNames: [X]
          invocation: SYSTEM_RANGE(1, 10)
          est: (rows=100)
