From 5e7300f3c94619b97f2ba39a17d6e775101ad195 Mon Sep 17 00:00:00 2001 From: Priec Date: Wed, 2 Sep 2026 17:34:34 +0200 Subject: [PATCH] row_display_columns can be changed anytime, whenever --- client-gui2 | 2 +- common/proto/table_definition.proto | 21 ++++ common/src/proto/descriptor.bin | Bin 232118 -> 234091 bytes common/src/proto/komp_ac.table_definition.rs | 115 +++++++++++++++++++ server | 2 +- 5 files changed, 138 insertions(+), 2 deletions(-) diff --git a/client-gui2 b/client-gui2 index c4d5a9d2..fbb19315 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit c4d5a9d22bb669d711971d1cbf84a3389ef61fbe +Subproject commit fbb193158022958de058f268cf425578fa6005b8 diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 87573a2c..a4df95ee 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -62,6 +62,10 @@ service TableDefinition { // Physical column names and identities remain unchanged. rpc SetColumnPresentation(SetColumnPresentationRequest) returns (SetColumnPresentationResponse); + // Replaces the columns whose values identify rows to users. This is + // presentation metadata and may be changed after rows have been stored. + rpc SetRowDisplayColumns(SetRowDisplayColumnsRequest) returns (SetRowDisplayColumnsResponse); + // 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); @@ -587,6 +591,23 @@ message SetColumnPresentationResponse { int64 row_version = 4; } +// Atomically replaces the columns whose values identify rows in pickers and +// link labels. Their order is the order in which their values are displayed. +message SetRowDisplayColumnsRequest { + string profile_name = 1; + string table_name = 2; + repeated string row_display_columns = 3; + // Row version returned by GetProfileDetails when this metadata was read. + int64 expected_row_version = 4; +} + +message SetRowDisplayColumnsResponse { + bool success = 1; + repeated string row_display_columns = 2; + // New row version after the update, or the current version for a no-op. + int64 row_version = 3; +} + // One public option name. `value` identifies the option by its current public // alias and `alias` is its desired public alias; stored values remain internal. message OptionValueAlias { diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 54a97cb0a0ca1f551e3de391de02d615d9330a7d..0ef56abb0164c4d1eb31ea9481f6b06370f4ffa1 100644 GIT binary patch delta 16909 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 delta 15279 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 diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index 5ae3147a..6cad1562 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -628,6 +628,32 @@ pub struct SetColumnPresentationResponse { #[prost(int64, tag = "4")] pub row_version: i64, } +/// Atomically replaces the columns whose values identify rows in pickers and +/// link labels. Their order is the order in which their values are displayed. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct SetRowDisplayColumnsRequest { + #[prost(string, tag = "1")] + pub profile_name: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub table_name: ::prost::alloc::string::String, + #[prost(string, repeated, tag = "3")] + pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Row version returned by GetProfileDetails when this metadata was read. + #[prost(int64, tag = "4")] + pub expected_row_version: i64, +} +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct SetRowDisplayColumnsResponse { + #[prost(bool, tag = "1")] + pub success: bool, + #[prost(string, repeated, tag = "2")] + pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// New row version after the update, or the current version for a no-op. + #[prost(int64, tag = "3")] + pub row_version: i64, +} /// One public option name. `value` identifies the option by its current public /// alias and `alias` is its desired public alias; stored values remain internal. #[derive(serde::Serialize, serde::Deserialize)] @@ -1494,6 +1520,37 @@ pub mod table_definition_client { ); self.inner.unary(req, path, codec).await } + /// Replaces the columns whose values identify rows to users. This is + /// presentation metadata and may be changed after rows have been stored. + pub async fn set_row_display_columns( + &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/SetRowDisplayColumns", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "komp_ac.table_definition.TableDefinition", + "SetRowDisplayColumns", + ), + ); + 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( @@ -1720,6 +1777,15 @@ pub mod table_definition_server { tonic::Response, tonic::Status, >; + /// Replaces the columns whose values identify rows to users. This is + /// presentation metadata and may be changed after rows have been stored. + async fn set_row_display_columns( + &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( @@ -2457,6 +2523,55 @@ pub mod table_definition_server { }; Box::pin(fut) } + "/komp_ac.table_definition.TableDefinition/SetRowDisplayColumns" => { + #[allow(non_camel_case_types)] + struct SetRowDisplayColumnsSvc(pub Arc); + impl< + T: TableDefinition, + > tonic::server::UnaryService + for SetRowDisplayColumnsSvc { + type Response = super::SetRowDisplayColumnsResponse; + 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 { + ::set_row_display_columns( + &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 = SetRowDisplayColumnsSvc(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 466aa31d..6b63dde5 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 466aa31dabc9cb46c53849c64ee36f804a346715 +Subproject commit 6b63dde568b71c9e651168336660b73b12d3db41