diff --git a/client-gui2 b/client-gui2 index 251a1386..7e56fbea 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit 251a1386ba8d00afe59857754218fdcfb6a458b8 +Subproject commit 7e56fbead71f70874ce3f0a9ca41024850288004 diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 7bd7b452..40f5bf67 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -88,6 +88,9 @@ service TableDefinition { // is rejected while an active row has no value for the column. rpc SetColumnRequired(SetColumnRequiredRequest) returns (SetColumnRequiredResponse); + // Clear selected profile overrides and apply the current module defaults atomically. + rpc ResetModuleDefaults(ResetModuleDefaultsRequest) returns (ResetModuleDefaultsResponse); + // Replaces the optional user-visible aliases for a fixed-option column. // Stored values remain stable machine values and scripts never depend on labels. rpc SetColumnOptionAliases(SetColumnOptionAliasesRequest) returns (SetColumnOptionAliasesResponse); @@ -674,6 +677,24 @@ enum CatalogFeature { CATALOG_FEATURE_REPLACE_DEFINITION = 12; CATALOG_FEATURE_INDEXES = 13; CATALOG_FEATURE_DELETE_TABLE = 14; + CATALOG_FEATURE_RESET_MODULE_DEFAULTS = 15; +} + +message ResetModuleDefaultsRequest { + string profile_name = 1; + string table_name = 2; + // Stable column IDs, not aliases. Only these label overrides are cleared. + repeated int64 column_alias_ids = 3; + // Only these required-setting overrides are cleared. + repeated int64 column_required_ids = 4; + bool reset_row_display_columns = 5; + int64 expected_row_version = 6; +} + +message ResetModuleDefaultsResponse { + bool success = 1; + // Reload table details to obtain the effective settings after the reset. + int64 row_version = 2; } // 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 e50d4b00..eb6c1214 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 6c166b4c..4b4b2f93 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -700,6 +700,33 @@ pub struct TableDetail { #[serde(default)] pub catalog_features: ::prost::alloc::vec::Vec, } +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct ResetModuleDefaultsRequest { + #[prost(string, tag = "1")] + pub profile_name: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub table_name: ::prost::alloc::string::String, + /// Stable column IDs, not aliases. Only these label overrides are cleared. + #[prost(int64, repeated, tag = "3")] + pub column_alias_ids: ::prost::alloc::vec::Vec, + /// Only these required-setting overrides are cleared. + #[prost(int64, repeated, tag = "4")] + pub column_required_ids: ::prost::alloc::vec::Vec, + #[prost(bool, tag = "5")] + pub reset_row_display_columns: bool, + #[prost(int64, tag = "6")] + pub expected_row_version: i64, +} +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] +pub struct ResetModuleDefaultsResponse { + #[prost(bool, tag = "1")] + pub success: bool, + /// Reload table details to obtain the effective settings after the reset. + #[prost(int64, tag = "2")] + pub row_version: i64, +} /// Server-owned behavior for one logical column returned in table details. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -1259,6 +1286,7 @@ pub enum CatalogFeature { ReplaceDefinition = 12, Indexes = 13, DeleteTable = 14, + ResetModuleDefaults = 15, } impl CatalogFeature { /// String value of the enum field names used in the ProtoBuf definition. @@ -1282,6 +1310,7 @@ impl CatalogFeature { Self::ReplaceDefinition => "CATALOG_FEATURE_REPLACE_DEFINITION", Self::Indexes => "CATALOG_FEATURE_INDEXES", Self::DeleteTable => "CATALOG_FEATURE_DELETE_TABLE", + Self::ResetModuleDefaults => "CATALOG_FEATURE_RESET_MODULE_DEFAULTS", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -1302,6 +1331,7 @@ impl CatalogFeature { "CATALOG_FEATURE_REPLACE_DEFINITION" => Some(Self::ReplaceDefinition), "CATALOG_FEATURE_INDEXES" => Some(Self::Indexes), "CATALOG_FEATURE_DELETE_TABLE" => Some(Self::DeleteTable), + "CATALOG_FEATURE_RESET_MODULE_DEFAULTS" => Some(Self::ResetModuleDefaults), _ => None, } } @@ -2083,6 +2113,36 @@ pub mod table_definition_client { ); self.inner.unary(req, path, codec).await } + /// Clear selected profile overrides and apply the current module defaults atomically. + pub async fn reset_module_defaults( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/komp_ac.table_definition.TableDefinition/ResetModuleDefaults", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "komp_ac.table_definition.TableDefinition", + "ResetModuleDefaults", + ), + ); + self.inner.unary(req, path, codec).await + } /// Replaces the optional user-visible aliases for a fixed-option column. /// Stored values remain stable machine values and scripts never depend on labels. pub async fn set_column_option_aliases( @@ -2407,6 +2467,14 @@ pub mod table_definition_server { tonic::Response, tonic::Status, >; + /// Clear selected profile overrides and apply the current module defaults atomically. + async fn reset_module_defaults( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Replaces the optional user-visible aliases for a fixed-option column. /// Stored values remain stable machine values and scripts never depend on labels. async fn set_column_option_aliases( @@ -3542,6 +3610,55 @@ pub mod table_definition_server { }; Box::pin(fut) } + "/komp_ac.table_definition.TableDefinition/ResetModuleDefaults" => { + #[allow(non_camel_case_types)] + struct ResetModuleDefaultsSvc(pub Arc); + impl< + T: TableDefinition, + > tonic::server::UnaryService + for ResetModuleDefaultsSvc { + type Response = super::ResetModuleDefaultsResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::reset_module_defaults( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ResetModuleDefaultsSvc(inner); + let codec = tonic_prost::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/komp_ac.table_definition.TableDefinition/SetColumnOptionAliases" => { #[allow(non_camel_case_types)] struct SetColumnOptionAliasesSvc(pub Arc); diff --git a/server b/server index 8d7fba32..43375b77 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 8d7fba32ddc2aee4d164931708cbf026b47514b0 +Subproject commit 43375b776d609cffe4f5d7752c4e839b8b862050 diff --git a/tui-pages b/tui-pages index 2e784b63..a135d67c 160000 --- a/tui-pages +++ b/tui-pages @@ -1 +1 @@ -Subproject commit 2e784b636e3df885b31dab802c046f525f22b512 +Subproject commit a135d67c79f3f4562c994612014450ac2f0fbbfa