ClickHouse/dbms/include/DB/AggregateFunctions/IAggregateFunction.h
2011-09-19 03:40:05 +00:00

58 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <Poco/SharedPtr.h>
#include <DB/Core/Row.h>
#include <DB/DataTypes/IDataType.h>
namespace DB
{
/** Интерфейс для агрегатных функций.
* Агрегатные функции аккумулируют значения, которые в них передают, держа в себе некоторое состояние.
*/
class IAggregateFunction
{
public:
/// Получить основное имя функции.
virtual String getName() const = 0;
/// Создать новую агрегатную функцию того же типа.
virtual SharedPtr<IAggregateFunction> cloneEmpty() const = 0;
/** Указать типы аргументов. Если функция неприменима для данных аргументов - кинуть исключение.
* Необходимо вызывать перед остальными вызовами.
*/
virtual void setArguments(const DataTypes & arguments) = 0;
/// Получить тип результата.
virtual DataTypePtr getReturnType() const = 0;
/// Добавить значение.
virtual void add(const Row & row) = 0;
/// Объединить состояние с другой агрегатной функцией.
virtual void merge(const IAggregateFunction & rhs) = 0;
/// Сериализовать состояние (например, для передачи по сети).
virtual void serialize(WriteBuffer & buf) const = 0;
/// Десериализовать состояние и объединить своё состояние с ним.
virtual void deserializeMerge(ReadBuffer & buf) = 0;
/// Получить результат
virtual Field getResult() const = 0;
};
using Poco::SharedPtr;
typedef SharedPtr<IAggregateFunction> AggregateFunctionPtr;
typedef std::vector<AggregateFunctionPtr> AggregateFunctions;
template <> struct TypeName<AggregateFunctionPtr> { static std::string get() { return "AggregateFunctionPtr"; } };
template <> struct NearestFieldType<AggregateFunctionPtr> { typedef AggregateFunctionPtr Type; };
}