diff --git a/common/build.rs b/common/build.rs index 5cf09342..48f9ef4c 100644 --- a/common/build.rs +++ b/common/build.rs @@ -43,6 +43,10 @@ fn main() -> Result<(), Box> { .type_attribute(".komp_ac.tables_data.GetAdjacentTableDataResponse", serde) .type_attribute(".komp_ac.tables_data.ResolvedTableLinkStatus", serde) .type_attribute(".komp_ac.tables_data.RowNavigationMode", serde) + .field_attribute( + ".komp_ac.table_definition.TableDetail.catalog_features", + "#[serde(default)]", + ) .field_attribute( ".komp_ac.table_validation.FieldValidation.locked", "#[serde(default)]", diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index be2cd259..7bd7b452 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -651,6 +651,29 @@ message TableDetail { // True when module-owned storage supports catalog-managed rows and settings. bool catalog_managed = 14; + + // Supported catalog operations, not user permissions or a guarantee that a + // particular request is valid. Column restrictions, locks, existing data and + // optimistic concurrency checks still apply. Unknown values must be ignored. + repeated CatalogFeature catalog_features = 15; +} + +enum CatalogFeature { + CATALOG_FEATURE_UNSPECIFIED = 0; + CATALOG_FEATURE_WRITE_ROWS = 1; + CATALOG_FEATURE_DELETE_ROWS = 2; + CATALOG_FEATURE_ARCHIVE_ROWS = 3; + CATALOG_FEATURE_COLUMN_PRESENTATION = 4; + CATALOG_FEATURE_COLUMN_REQUIRED = 5; + CATALOG_FEATURE_COLUMN_FORM_VISIBILITY = 6; + CATALOG_FEATURE_COLUMN_OPTION_ALIASES = 7; + CATALOG_FEATURE_ROW_DISPLAY_COLUMNS = 8; + CATALOG_FEATURE_VALIDATION = 9; + CATALOG_FEATURE_SCRIPTS = 10; + CATALOG_FEATURE_ADD_COLUMNS = 11; + CATALOG_FEATURE_REPLACE_DEFINITION = 12; + CATALOG_FEATURE_INDEXES = 13; + CATALOG_FEATURE_DELETE_TABLE = 14; } // Server-owned behavior for one logical column returned in table details. diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 9e90e777..e50d4b00 100644 Binary files a/common/src/proto/descriptor.bin and b/common/src/proto/descriptor.bin differ diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index c14720dc..6c166b4c 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -693,6 +693,12 @@ pub struct TableDetail { /// True when module-owned storage supports catalog-managed rows and settings. #[prost(bool, tag = "14")] pub catalog_managed: bool, + /// Supported catalog operations, not user permissions or a guarantee that a + /// particular request is valid. Column restrictions, locks, existing data and + /// optimistic concurrency checks still apply. Unknown values must be ignored. + #[prost(enumeration = "CatalogFeature", repeated, tag = "15")] + #[serde(default)] + pub catalog_features: ::prost::alloc::vec::Vec, } /// Server-owned behavior for one logical column returned in table details. #[derive(serde::Serialize, serde::Deserialize)] @@ -1234,6 +1240,72 @@ impl ManagedTableKind { } } } +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum CatalogFeature { + Unspecified = 0, + WriteRows = 1, + DeleteRows = 2, + ArchiveRows = 3, + ColumnPresentation = 4, + ColumnRequired = 5, + ColumnFormVisibility = 6, + ColumnOptionAliases = 7, + RowDisplayColumns = 8, + Validation = 9, + Scripts = 10, + AddColumns = 11, + ReplaceDefinition = 12, + Indexes = 13, + DeleteTable = 14, +} +impl CatalogFeature { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::Unspecified => "CATALOG_FEATURE_UNSPECIFIED", + Self::WriteRows => "CATALOG_FEATURE_WRITE_ROWS", + Self::DeleteRows => "CATALOG_FEATURE_DELETE_ROWS", + Self::ArchiveRows => "CATALOG_FEATURE_ARCHIVE_ROWS", + Self::ColumnPresentation => "CATALOG_FEATURE_COLUMN_PRESENTATION", + Self::ColumnRequired => "CATALOG_FEATURE_COLUMN_REQUIRED", + Self::ColumnFormVisibility => "CATALOG_FEATURE_COLUMN_FORM_VISIBILITY", + Self::ColumnOptionAliases => "CATALOG_FEATURE_COLUMN_OPTION_ALIASES", + Self::RowDisplayColumns => "CATALOG_FEATURE_ROW_DISPLAY_COLUMNS", + Self::Validation => "CATALOG_FEATURE_VALIDATION", + Self::Scripts => "CATALOG_FEATURE_SCRIPTS", + Self::AddColumns => "CATALOG_FEATURE_ADD_COLUMNS", + Self::ReplaceDefinition => "CATALOG_FEATURE_REPLACE_DEFINITION", + Self::Indexes => "CATALOG_FEATURE_INDEXES", + Self::DeleteTable => "CATALOG_FEATURE_DELETE_TABLE", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "CATALOG_FEATURE_UNSPECIFIED" => Some(Self::Unspecified), + "CATALOG_FEATURE_WRITE_ROWS" => Some(Self::WriteRows), + "CATALOG_FEATURE_DELETE_ROWS" => Some(Self::DeleteRows), + "CATALOG_FEATURE_ARCHIVE_ROWS" => Some(Self::ArchiveRows), + "CATALOG_FEATURE_COLUMN_PRESENTATION" => Some(Self::ColumnPresentation), + "CATALOG_FEATURE_COLUMN_REQUIRED" => Some(Self::ColumnRequired), + "CATALOG_FEATURE_COLUMN_FORM_VISIBILITY" => Some(Self::ColumnFormVisibility), + "CATALOG_FEATURE_COLUMN_OPTION_ALIASES" => Some(Self::ColumnOptionAliases), + "CATALOG_FEATURE_ROW_DISPLAY_COLUMNS" => Some(Self::RowDisplayColumns), + "CATALOG_FEATURE_VALIDATION" => Some(Self::Validation), + "CATALOG_FEATURE_SCRIPTS" => Some(Self::Scripts), + "CATALOG_FEATURE_ADD_COLUMNS" => Some(Self::AddColumns), + "CATALOG_FEATURE_REPLACE_DEFINITION" => Some(Self::ReplaceDefinition), + "CATALOG_FEATURE_INDEXES" => Some(Self::Indexes), + "CATALOG_FEATURE_DELETE_TABLE" => Some(Self::DeleteTable), + _ => None, + } + } +} /// How a column type is spelled in ColumnDefinition.field_type. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] diff --git a/server b/server index 5c98e443..8d7fba32 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 5c98e443a2685b2e2b128129f30896121809fab7 +Subproject commit 8d7fba32ddc2aee4d164931708cbf026b47514b0 diff --git a/tui-pages b/tui-pages index ce4bc49f..2e784b63 160000 --- a/tui-pages +++ b/tui-pages @@ -1 +1 @@ -Subproject commit ce4bc49fa64225c8cc3ded9ce9c2e8e68cc32254 +Subproject commit 2e784b636e3df885b31dab802c046f525f22b512