/* */ /* * Copyright 2015-present ScyllaDB * * Modified by ScyllaDB */ /* * SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0) */ #pragma once #include "cql3/statements/schema_altering_statement.hh" #include "cql3/statements/cf_prop_defs.hh" #include "cql3/cql3_type.hh" #include "cql3/column_identifier.hh" #include "data_dictionary/data_dictionary.hh" namespace cql3 { class query_processor; namespace statements { class alter_table_statement : public schema_altering_statement { public: enum class type { add, alter, drop, opts, rename, }; using renames_type = std::vector, shared_ptr>>; struct column_change { shared_ptr name; shared_ptr validator = nullptr; bool is_static = false; }; private: const type _type; const std::vector _column_changes; const std::optional _properties; const renames_type _renames; public: alter_table_statement(cf_name name, type t, std::vector column_changes, std::optional properties, renames_type renames); virtual future<> check_access(query_processor& qp, const service::client_state& state) const override; virtual void validate(query_processor& qp, const service::client_state& state) const override; virtual std::unique_ptr prepare(data_dictionary::database db, cql_stats& stats) override; virtual future<::shared_ptr> execute(query_processor& qp, service::query_state& state, const query_options& options) const override; future, std::vector>> prepare_schema_mutations(query_processor& qp, api::timestamp_type) const override; private: void add_column(const schema& schema, data_dictionary::table cf, schema_builder& cfm, std::vector& view_updates, const column_identifier& column_name, const cql3_type validator, const column_definition* def, bool is_static) const; void alter_column(const schema& schema, data_dictionary::table cf, schema_builder& cfm, std::vector& view_updates, const column_identifier& column_name, const cql3_type validator, const column_definition* def, bool is_static) const; void drop_column(const schema& schema, data_dictionary::table cf, schema_builder& cfm, std::vector& view_updates, const column_identifier& column_name, const cql3_type validator, const column_definition* def, bool is_static) const; std::pair> prepare_schema_update(data_dictionary::database db) const; }; } }