use crate::metadata::{PhysicalTablePath, TablePath};
use crate::proto::{MetadataResponse, PbPhysicalTablePath, PbTablePath};
use crate::rpc::api_key::ApiKey;
use crate::rpc::api_version::ApiVersion;
use crate::rpc::frame::ReadError;
use crate::rpc::frame::WriteError;
use crate::rpc::message::{ReadVersionedType, RequestBody, WriteVersionedType};
use std::collections::HashSet;
use std::sync::Arc;
use crate::{impl_read_version_type, impl_write_version_type, proto};
use bytes::{Buf, BufMut};
use prost::Message;
pub struct UpdateMetadataRequest {
pub inner_request: proto::MetadataRequest,
}
impl UpdateMetadataRequest {
pub fn new(
table_paths: &HashSet<&TablePath>,
physical_table_paths: &HashSet<&Arc<PhysicalTablePath>>,
partition_ids: Vec<i64>,
) -> Self {
UpdateMetadataRequest {
inner_request: proto::MetadataRequest {
table_path: table_paths
.iter()
.map(|path| PbTablePath {
database_name: path.database().to_string(),
table_name: path.table().to_string(),
})
.collect(),
partitions_path: physical_table_paths
.iter()
.map(|path| PbPhysicalTablePath {
database_name: path.get_database_name().to_string(),
table_name: path.get_table_name().to_string(),
partition_name: path.get_partition_name().map(|pn| pn.to_string()),
})
.collect(),
partitions_id: partition_ids,
},
}
}
}
impl RequestBody for UpdateMetadataRequest {
type ResponseBody = MetadataResponse;
const API_KEY: ApiKey = ApiKey::MetaData;
const REQUEST_VERSION: ApiVersion = ApiVersion(0);
}
impl_write_version_type!(UpdateMetadataRequest);
impl_read_version_type!(MetadataResponse);