//===----------------------------------------------------------------------===// // DuckDB // // duckdb/execution/operator/aggregate/grouped_aggregate_data.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/execution/expression_executor.hpp" #include "duckdb/function/aggregate_function.hpp" #include "duckdb/parser/group_by_node.hpp" #include "duckdb/planner/expression/bound_aggregate_expression.hpp" namespace duckdb { class GroupedAggregateData { public: GroupedAggregateData() { } //! The groups vector> groups; //! The set of GROUPING functions vector> grouping_functions; //! The group types vector group_types; //! The aggregates that have to be computed vector> aggregates; //! The payload types vector payload_types; //! The aggregate return types vector aggregate_return_types; //! Pointers to the aggregates vector bindings; idx_t filter_count; public: idx_t GroupCount() const; const vector> &GetGroupingFunctions() const; void InitializeGroupby(vector> groups, vector> expressions, vector> grouping_functions); //! Initialize a GroupedAggregateData object for use with distinct aggregates void InitializeDistinct(const unique_ptr &aggregate, const vector> *groups_p); private: void InitializeDistinctGroups(const vector> *groups); void InitializeGroupbyGroups(vector> groups); void SetGroupingFunctions(vector> &functions); }; } // namespace duckdb