use crate::metadata::{AddColumn, AlterConfig, DropColumn, ModifyColumn, RenameColumn, TablePath};
use crate::rpc::api_key::ApiKey;
use crate::rpc::convert::to_table_path;
use crate::rpc::frame::{ReadError, WriteError};
use crate::rpc::message::{ReadType, RequestBody, WriteType};
use crate::{impl_read_type, impl_write_type, proto};
use bytes::{Buf, BufMut};
use prost::Message;
#[derive(Debug)]
pub struct AlterTableRequest {
pub(crate) inner_request: proto::AlterTableRequest,
}
impl AlterTableRequest {
pub fn new(
table_path: &TablePath,
ignore_if_not_exists: bool,
config_changes: Vec<AlterConfig>,
add_columns: Vec<AddColumn>,
drop_columns: Vec<DropColumn>,
rename_columns: Vec<RenameColumn>,
modify_columns: Vec<ModifyColumn>,
) -> Self {
AlterTableRequest {
inner_request: proto::AlterTableRequest {
table_path: to_table_path(table_path),
ignore_if_not_exists,
config_changes: config_changes.iter().map(AlterConfig::to_pb).collect(),
add_columns: add_columns.iter().map(AddColumn::to_pb).collect(),
drop_columns: drop_columns.iter().map(DropColumn::to_pb).collect(),
rename_columns: rename_columns.iter().map(RenameColumn::to_pb).collect(),
modify_columns: modify_columns.iter().map(ModifyColumn::to_pb).collect(),
modify_bucket_count: None,
},
}
}
}
impl RequestBody for AlterTableRequest {
type ResponseBody = proto::AlterTableResponse;
const API_KEY: ApiKey = ApiKey::AlterTable;
}
impl_write_type!(AlterTableRequest);
impl_read_type!(proto::AlterTableResponse);