/* * Copyright (C) 2021-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include "cql3/statements/function_statement.hh" #include "cql3/cql3_type.hh" #include "cql3/expr/expression.hh" #include namespace cql3 { class query_processor; namespace functions { class user_aggregate; } namespace statements { class create_aggregate_statement final : public create_function_statement_base { virtual std::unique_ptr prepare(data_dictionary::database db, cql_stats& stats) override; future, utils::chunked_vector, cql3::cql_warnings_vec>> prepare_schema_mutations(query_processor& qp, const query_options& options, api::timestamp_type) const override; virtual future<> check_access(query_processor& qp, const service::client_state& state) const override; virtual seastar::future> create(query_processor& qp, db::functions::function* old) const override; sstring _sfunc; shared_ptr _stype; std::optional _rfunc; std::optional _ffunc; std::optional _ival; protected: virtual audit::audit_info_ptr audit_info() const override; virtual audit::statement_category category() const override; public: create_aggregate_statement(functions::function_name name, std::vector> arg_types, sstring sfunc, shared_ptr stype, std::optional rfunc, std::optional ffunc, std::optional ival, bool or_replace, bool if_not_exists); }; } }