public static PlanMatchPattern aggregation(
      Map<String, ExpectedValueProvider<AggregationFunction>> aggregations,
      AggregationNode.Step step,
      PlanMatchPattern source) {
    PlanMatchPattern result =
        node(AggregationNode.class, source).with(new AggregationStepMatcher(step));
    aggregations
        .entrySet()
        .forEach(
            aggregation ->
                result.withAlias(
                    aggregation.getKey(), new AggregationFunctionMatcher(aggregation.getValue())));
    return result;
  }
Matches to any tree of nodes with children matching to given source matchers.
anyTree(tableScan("nation")) - will match to any plan which all leafs contain any node
containing table scan from nation table.

<p>Note: anyTree does not match zero nodes. E.g. output(anyTree(tableScan)) will NOT match
TableScan node followed by OutputNode.
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/PlanMatchPattern.java