use crate::spec::stats::BinaryTableStats;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)]
pub struct ManifestFileMeta {
#[serde(rename = "_VERSION")]
version: i32,
#[serde(rename = "_FILE_NAME")]
file_name: String,
#[serde(rename = "_FILE_SIZE")]
file_size: i64,
#[serde(rename = "_NUM_ADDED_FILES")]
num_added_files: i64,
#[serde(rename = "_NUM_DELETED_FILES")]
num_deleted_files: i64,
#[serde(rename = "_PARTITION_STATS")]
partition_stats: BinaryTableStats,
#[serde(rename = "_SCHEMA_ID")]
schema_id: i64,
}
impl ManifestFileMeta {
#[inline]
pub fn file_name(&self) -> &str {
self.file_name.as_str()
}
#[inline]
pub fn file_size(&self) -> i64 {
self.file_size
}
#[inline]
pub fn num_added_files(&self) -> i64 {
self.num_added_files
}
#[inline]
pub fn num_deleted_files(&self) -> i64 {
self.num_deleted_files
}
pub fn partition_stats(&self) -> &BinaryTableStats {
&self.partition_stats
}
#[inline]
pub fn schema_id(&self) -> i64 {
self.schema_id
}
#[inline]
pub fn version(&self) -> i32 {
self.version
}
#[inline]
pub fn new(
file_name: String,
file_size: i64,
num_added_files: i64,
num_deleted_files: i64,
partition_stats: BinaryTableStats,
schema_id: i64,
) -> ManifestFileMeta {
Self {
version: 2,
file_name,
file_size,
num_added_files,
num_deleted_files,
partition_stats,
schema_id,
}
}
}
pub const MANIFEST_FILE_META_SCHEMA: &str = r#"["null", {
"type": "record",
"name": "record",
"namespace": "org.apache.paimon.avro.generated",
"fields": [
{"name": "_VERSION", "type": "int"},
{"name": "_FILE_NAME", "type": "string"},
{"name": "_FILE_SIZE", "type": "long"},
{"name": "_NUM_ADDED_FILES", "type": "long"},
{"name": "_NUM_DELETED_FILES", "type": "long"},
{"name": "_PARTITION_STATS", "type": ["null", {
"type": "record",
"name": "record__PARTITION_STATS",
"fields": [
{"name": "_MIN_VALUES", "type": "bytes"},
{"name": "_MAX_VALUES", "type": "bytes"},
{"name": "_NULL_COUNTS", "type": ["null", {"type": "array", "items": ["null", "long"]}], "default": null}
]
}], "default": null},
{"name": "_SCHEMA_ID", "type": "long"}
]
}]"#;
impl Display for ManifestFileMeta {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{{{}, {}, {}, {}, {:?}, {}}}",
self.file_name,
self.file_size,
self.num_added_files,
self.num_deleted_files,
self.partition_stats,
self.schema_id
)
}
}