use ducklake_macros::ducklake_table;
use crate::db::{UtcDateTime, UuidText, sea_query_ext};
#[ducklake_table]
pub struct DucklakeColumn {
pub column_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub table_id: i64,
pub column_order: Option<i64>,
pub column_name: String,
pub column_type: String,
pub initial_default: Option<String>,
pub default_value: Option<String>,
pub nulls_allowed: bool,
pub parent_column: Option<i64>,
pub default_value_type: Option<String>,
pub default_value_dialect: Option<String>,
}
#[ducklake_table]
pub struct DucklakeColumnMapping {
pub mapping_id: i64,
pub table_id: i64,
pub r#type: Option<String>,
}
#[ducklake_table]
pub struct DucklakeColumnTag {
pub table_id: i64,
pub column_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub key: String,
pub value: String,
}
#[ducklake_table]
pub struct DucklakeDataFile {
#[primary_key]
pub data_file_id: i64,
pub table_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub file_order: Option<i64>,
pub path: String,
pub path_is_relative: bool,
pub file_format: String,
pub record_count: i64,
pub file_size_bytes: Option<i64>,
pub footer_size: Option<i64>,
pub row_id_start: Option<i64>,
pub partition_id: Option<i64>,
pub encryption_key: Option<String>,
pub mapping_id: Option<i64>,
pub partial_max: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeDeleteFile {
#[primary_key]
pub delete_file_id: i64,
pub table_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub data_file_id: i64,
pub path: String,
pub path_is_relative: bool,
pub format: String,
pub delete_count: Option<i64>,
pub file_size_bytes: Option<i64>,
pub footer_size: Option<i64>,
pub encryption_key: Option<String>,
pub partial_max: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeFileColumnStats {
pub data_file_id: i64,
pub table_id: i64,
pub column_id: i64,
pub column_size_bytes: Option<i64>,
pub value_count: Option<i64>,
pub null_count: Option<i64>,
pub min_value: Option<String>,
pub max_value: Option<String>,
pub contains_nan: Option<bool>,
pub extra_stats: Option<String>,
}
#[ducklake_table]
pub struct DucklakeFilesScheduledForDeletion {
pub data_file_id: i64,
pub path: String,
pub path_is_relative: bool,
pub schedule_start: Option<UtcDateTime>,
}
#[ducklake_table]
pub struct DucklakeFilePartitionValue {
pub data_file_id: i64,
pub table_id: i64,
pub partition_key_index: i64,
pub partition_value: Option<String>,
}
#[ducklake_table]
pub struct DucklakeInlinedDataTables {
pub table_id: i64,
pub table_name: String,
pub schema_version: i64,
}
#[ducklake_table]
pub struct DucklakeMetadata {
#[not_null]
pub key: String,
#[not_null]
pub value: String,
pub scope: Option<String>,
pub scope_id: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeNameMapping {
pub mapping_id: i64,
pub column_id: i64,
pub source_name: Option<String>,
pub target_field_id: Option<i64>,
pub parent_column: Option<i64>,
pub is_partition: Option<bool>,
}
#[ducklake_table]
pub struct DucklakePartitionColumn {
pub partition_id: i64,
pub table_id: i64,
pub partition_key_index: i64,
pub column_id: i64,
pub transform: String,
}
#[ducklake_table]
pub struct DucklakePartitionInfo {
pub partition_id: i64,
pub table_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeSchema {
#[primary_key]
pub schema_id: i64,
pub schema_uuid: Option<UuidText>,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub schema_name: String,
pub path: String,
pub path_is_relative: bool,
}
#[ducklake_table]
pub struct DucklakeSchemaVersions {
pub begin_snapshot: i64,
pub schema_version: i64,
pub table_id: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeSnapshot {
#[primary_key]
pub snapshot_id: i64,
pub snapshot_time: UtcDateTime,
pub schema_version: i64,
pub next_catalog_id: i64,
pub next_file_id: i64,
}
#[ducklake_table]
pub struct DucklakeSnapshotChanges {
#[primary_key]
pub snapshot_id: i64,
pub changes_made: String,
pub author: Option<String>,
pub commit_message: Option<String>,
pub commit_extra_info: Option<String>,
}
#[ducklake_table]
pub struct DucklakeTable {
pub table_id: i64,
pub table_uuid: Option<UuidText>,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub schema_id: i64,
pub table_name: String,
pub path: String,
pub path_is_relative: bool,
}
#[ducklake_table]
pub struct DucklakeTableColumnStats {
pub table_id: i64,
pub column_id: i64,
pub contains_null: Option<bool>,
pub contains_nan: Option<bool>,
pub min_value: Option<String>,
pub max_value: Option<String>,
pub extra_stats: Option<String>,
}
#[ducklake_table]
pub struct DucklakeTableStats {
pub table_id: i64,
pub record_count: Option<i64>,
pub next_row_id: i64,
pub file_size_bytes: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeTag {
pub object_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub key: String,
pub value: String,
}
#[ducklake_table]
pub struct DucklakeMacro {
pub schema_id: i64,
pub macro_id: i64,
pub macro_name: String,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeMacroImpl {
pub macro_id: i64,
pub impl_id: i64,
pub dialect: Option<String>,
pub sql: Option<String>,
pub r#type: Option<String>,
}
#[ducklake_table]
pub struct DucklakeMacroParameters {
pub macro_id: i64,
pub impl_id: i64,
pub column_id: i64,
pub parameter_name: Option<String>,
pub parameter_type: Option<String>,
pub default_value: Option<String>,
pub default_value_type: Option<String>,
}
#[ducklake_table]
pub struct DucklakeSortInfo {
pub sort_id: i64,
pub table_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
}
#[ducklake_table]
pub struct DucklakeSortExpression {
pub sort_id: i64,
pub table_id: i64,
pub sort_key_index: i64,
pub expression: Option<String>,
pub dialect: Option<String>,
pub sort_direction: Option<String>,
pub null_order: Option<String>,
}
#[ducklake_table]
pub struct DucklakeFileVariantStats {
pub data_file_id: i64,
pub table_id: i64,
pub column_id: i64,
pub variant_path: Option<String>,
pub shredded_type: Option<String>,
pub column_size_bytes: Option<i64>,
pub value_count: Option<i64>,
pub null_count: Option<i64>,
pub min_value: Option<String>,
pub max_value: Option<String>,
pub contains_nan: Option<bool>,
pub extra_stats: Option<String>,
}
#[ducklake_table]
pub struct DucklakeView {
pub view_id: i64,
pub view_uuid: Option<UuidText>,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
pub schema_id: i64,
pub view_name: String,
pub dialect: Option<String>,
pub sql: Option<String>,
pub column_aliases: Option<String>,
}
#[ducklake_table]
pub struct DucklakeInlinedDelete {
pub file_id: i64,
pub row_id: i64,
pub begin_snapshot: i64,
}
impl DucklakeInlinedDelete {
pub fn table_name(table_id: i64) -> String {
format!("ducklake_inlined_delete_{}", table_id)
}
}
#[ducklake_table]
pub struct DucklakeInlinedData {
pub row_id: i64,
pub begin_snapshot: i64,
pub end_snapshot: Option<i64>,
}
impl DucklakeInlinedData {
pub fn table_name(table_id: i64, schema_version: i64) -> String {
format!("ducklake_inlined_data_{}_{}", table_id, schema_version)
}
}