presto-main/src/main/java/io/prestosql/sql/planner/plan/GroupIdNode.java/GroupIdNode/GroupIdNode
class GroupIdNode:    @JsonCreator
    public GroupIdNode(
            @JsonProperty("id") PlanNodeId id,
            @JsonProperty("source") PlanNode source,
            @JsonProperty("groupingSets") List<List<Symbol>> groupingSets,
            @JsonProperty("groupingColumns") Map<Symbol, Symbol> groupingColumns,
            @JsonProperty("aggregationArguments") List<Symbol> aggregationArguments,
            @JsonProperty("groupIdSymbol") Symbol groupIdSymbol)
    {
        super(id);
        this.source = requireNonNull(source);
        this.groupingSets = listOfListsCopy(requireNonNull(groupingSets, "groupingSets is null"));
        this.groupingColumns = ImmutableMap.copyOf(requireNonNull(groupingColumns));
        this.aggregationArguments = ImmutableList.copyOf(aggregationArguments);
        this.groupIdSymbol = requireNonNull(groupIdSymbol);

        checkArgument(Sets.intersection(groupingColumns.keySet(), ImmutableSet.copyOf(aggregationArguments)).isEmpty(), "aggregation columns and grouping set columns must be a disjoint set");
    }