//   Copyright 2011-2015 Quickstep Technologies LLC.
//   Copyright 2015-2016 Pivotal Software, Inc.
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

syntax = "proto2";

package quickstep.serialization;

import "expressions/Expressions.proto";
import "expressions/aggregation/AggregateFunction.proto";
import "storage/HashTable.proto";

message Aggregate {
  required AggregateFunction function = 1;
  repeated Scalar argument = 2;
  required bool is_distinct = 3;
}

message AggregationOperationState {
  required int32 relation_id = 1;
  repeated Aggregate aggregates = 2;
  repeated Scalar group_by_expressions = 3;
  optional Predicate predicate = 4;
  required uint64 estimated_num_entries = 5;

  // NOTE(chasseur): 'hash_table_impl_type' is marked optional, but it is
  // needed if 'group_by_expressions' is non-empty, and ignored otherwise.
  optional HashTableImplType hash_table_impl_type = 6;
}
