From 90f8aedc3be89f93cfe8a4834a2e2c309fe6552a Mon Sep 17 00:00:00 2001 From: Priec Date: Sat, 2 May 2026 13:56:45 +0200 Subject: [PATCH] better new functionality of column aliases --- client | 2 +- common/build.rs | 12 ++ common/proto/table_definition.proto | 28 ++++ common/src/proto/descriptor.bin | Bin 59171 -> 61043 bytes common/src/proto/komp_ac.table_definition.rs | 130 +++++++++++++++++++ server | 2 +- 6 files changed, 172 insertions(+), 2 deletions(-) diff --git a/client b/client index ab990ac..cdce1fc 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit ab990ac128b09274a8ac32cad186b5c12875a9ec +Subproject commit cdce1fc5f4bb7aa8404d3147cea333405a80174e diff --git a/common/build.rs b/common/build.rs index 1fdbd33..41b5b4b 100644 --- a/common/build.rs +++ b/common/build.rs @@ -61,6 +61,18 @@ fn main() -> Result<(), Box> { ".komp_ac.table_definition.TableDefinitionResponse", "#[derive(serde::Serialize, serde::Deserialize)]" ) + .type_attribute( + ".komp_ac.table_definition.GetColumnAliasRenameHistoryRequest", + "#[derive(serde::Serialize, serde::Deserialize)]" + ) + .type_attribute( + ".komp_ac.table_definition.ColumnAliasRenameHistoryEntry", + "#[derive(serde::Serialize, serde::Deserialize)]" + ) + .type_attribute( + ".komp_ac.table_definition.GetColumnAliasRenameHistoryResponse", + "#[derive(serde::Serialize, serde::Deserialize)]" + ) .type_attribute( ".komp_ac.table_definition.RenameColumnAliasRequest", "#[derive(serde::Serialize, serde::Deserialize)]" diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 103009f..aeab0de 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -22,6 +22,9 @@ service TableDefinition { // Pure data retrieval - no business logic. rpc GetProfileDetails(GetProfileDetailsRequest) returns (GetProfileDetailsResponse); + // Returns the stored rename history for column aliases in one profile. + rpc GetColumnAliasRenameHistory(GetColumnAliasRenameHistoryRequest) returns (GetColumnAliasRenameHistoryResponse); + // Renames a user-visible column alias while keeping the physical column unchanged. rpc RenameColumnAlias(RenameColumnAliasRequest) returns (RenameColumnAliasResponse); @@ -138,6 +141,31 @@ message GetProfileDetailsResponse { repeated TableDetail tables = 2; } +// Request to fetch recorded column alias rename history for one profile. +message GetColumnAliasRenameHistoryRequest { + string profile_name = 1; + + // Optional filter. When omitted, returns all tables in the profile. + optional int64 table_definition_id = 2; +} + +// One recorded column alias rename. +message ColumnAliasRenameHistoryEntry { + int64 id = 1; + string profile_name = 2; + int64 table_definition_id = 3; + string table_name = 4; + string old_column_name = 5; + string new_column_name = 6; + string created_at = 7; +} + +// Response with stored column alias rename history rows. +message GetColumnAliasRenameHistoryResponse { + string profile_name = 1; + repeated ColumnAliasRenameHistoryEntry entries = 2; +} + // Describes a table with its columns and associated scripts. message TableDetail { string name = 1; diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 67da21527bb98b2bcea901119cbda7a743dd808e..8be89c34a7a130f1524e0725a5f9cefe2cca4b48 100644 GIT binary patch delta 4422 zcmaJ^Yiv}<72Y#@_xkRv?X|BRV;h674a9(n>y)R#;bDvo7;Ir)Q9}dx;HggEj*eZ-5BXF4~(68+or*v5Oq|^ z%DvBFHJ%W1*8hvPVKkebbW5dxI|hERaB4x|cz+`N){9SW%kxu= zs;_rft3}>y^{Zu-6jQgCHN9p-INo0}>QCr20{$#152XEptUtJSAX{A&xWvOR>#~jK zNY0t2O8tIjd~7u1s~fM*b+^ePAL~f@86+B=pZNZA_07xP?EkH8u-bm@JoR`hW= zW$Mt%2J)tUzVc`^w_RFxL`2!suS51qVMSbP zPUI!EVoh&yj#DnbBxzX@5pknU>b*68YHkt^llT(^o8q+wL858aYrA#fjq)!nK^$_adbIAZ%}c|O_ymci@rpnK z2og)HX2_puf7sg87agZpw27d!kRTi15|yDpC(!nSP8c?@+mLWi5DevLSHD@mwXHo* z79h7LW`<+|a(mqzgFtS7u}MA<0UM}es-?4&+B)*|C@SBP2A4=z^LGW ze!Mtz=YW2)Os+>j%Z;TXZ;`saxuY!Q%#;ftVMWoJZ-}gNdKQ$uA(L{GwD}_^GNRV? z^t6sxaak&h^haoqKsk@0J_7X>AqnPjb+>0_>$oNJPMpwqB3Zy7jiX7oha_}KM!mRY z=h}=_P!`zeOi4wa#I?;-&MshxWEvV}Q?Lf~`h@tAy0fLJY(kdH&4F^z?33yrTeh@L z=F`#bKABHPH~b{h=?F;(bXbjU?Oby>pN{VN!zFGQ9+zv-vT|`wcn=5Pt~lxp4{8y@cn36 zHtW3uy?_A}3!v5mgx)(w4-k6qu%4#Ec$`FINF}TkP_NYHs{$}lWvqeoj9CH9!3?S6 zQIUh6iLsR%u2og%TIcD>g(&QFzrVGmD- ztetsD$q!3se}-nw9|q6;PKEFtCO#2ngy~(=v|0WqXc9&I{w92rBoVBW!Rl6jHXq zy}&7VVT0qYeUT!+#s;sziO}yrZz7c)GOwfQ4nuluA`|X<95F7E(;TcN&YOM-JC_Tp z1c;1)^uKqPd@Y+ao9<}!(;A(eXzq;fO@5X@V!ZRXL5Rg(7Z{N{O+*;VVokNmjVPTpsp`qV2vALF47d$ z)aoK7_~_mup-(OlxPXSs%C{(Pl=j<)tCKUxnlTz%rlfli@Ab# z%moGnO+c*)2;V#A6aYf=jyVOzyw1DkNCSZiXsBGlyXHj03hG@x(LtLPa|Q32n*<14 zK*MF_d*&vA72JE~CMjlgzd+>*0vak;@P2{H6}->XHdLX+wIAT2^9NPGV@a+Ajt|V} zFX1vgB%!ZNAcz9mL8SrV`;hSV P76%Z#XH)6jH{Sg>kc*1y delta 2778 zcmYM0T})I*6vy|>9q!&c3oKla&qaaKS};;dExHP7aq)`<)Y>W*B*DZOQc{{25}HzK zFj3q1IT1hFh#!gC#1P9ShQ>Bce78;0rb(lzY5LZeKJ=+i?f=}lv%KwZ=KTM2=FFM7 z`_FUd&JWJRr)^@PFZW{`$z0X?3P=1Tb8Q=sk$$uDFZInv6%Pt1_ATl6b%WmB^*Yt% zKJGf{s1YUIm~aB8TAz7qxYZ&2aw}D#D&S!Os%o>uQJeOwp->_NC#B1~54B22Qf_G! zBq2!!O_m@@z1FSzm5{MO*2h}(m)-rzdaqRdMoP+YD=O8TiN{=r?%aNLLx)gN1i2VXlw0D66((U41a$`z?hO}1 zInugtM_)Rf7Ym5fiP}gkAWo-VvIKGZmDTEr2-To1xl21Tl-`n;I|Ud_g!RT|_`tRV z)sfs`L8?wYH<{y%GCH~I_m)h4r+iu&e?=585ud55R-Gu82;|P#AzitiNFCEu+zb zj^G7H{lX}m7aUENsBSDM19>#|iLUMME;;Jes%AJy2c3CLe5l9!n@f(Vq}rui9^^d6 z^xgj6wlV3eVih-oupWbPo?$))^9_**)8o2fU}M|3RQVvzXFQQyW{Aeoqi;tdG|7bi zeBhm}6LQ&E;G8Fl%JL#E?L_&?WroQ_L!(+9?g6cSTzsVK_pB~Cu1eMJ&^he&Nqt~X zwrw(>j_LNvd^)DzCy`EfB*H>d`sY2F%~Sbw(AMbMsiGiS9?Vf?)ys@@rqFsVoDSD+ zTEDxuaT{N0AUbh6>R=G8rV~MUJRlfNmznDTg3a{GRXAHA3j+59#ZKz)_x2}GkXNrZ z!Mgz7a#pAIb+yhCPP_;UU<~`8CG>TKXslU6V`pLG2JR_}eWp+C>zz48UIW&Z(q)^| zBx*ths31h+2ZY~g>j#A2Y4$TxOr9ap7)c3D1ymMY#zck1Fu1ZV#0r<&AJg>>I3gkA zfqRx>mvrBOo|!lT&yvTFkd$#w?;MFBl!1^Q(4+@M>^Z_6AP7a(dQo@`UW+|u#SC}e+Lotf94Mp+-_cF!4&<_u8p7F5cW%9Upr1ZE* zb0kcuLD(tK>=cODIl`xg(*weDj>`GzV<{%DkT6>TK?*eW1%|V}HRdzBLe({pF?* zNQ>(sfmX{OyX)jzXMS3*Q)LxCLqht2dxK(kbn~I@Gd|*O@MU6CpDQ?TZvhCNK;sES z?7Y1NKzPpETj29PZ<44A(*Z#Wv{J6%O~Rwk#m6k9HwmwP*k(Rg@D>Sk+#qOyR?E(} z$hXd1!CO?DiZTY>UY2qNfmX^DyuB>tKDy1)G^(Hi_bwj0uk;7+t(#E@ylWo=#bvlh z!ek4ADbNj*2O{_$*49;CvQvEHxdvVPB=bGSsvVW3a}cu?9l1U=Iff>jgfX zll, } +/// Request to fetch recorded column alias rename history for one profile. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetColumnAliasRenameHistoryRequest { + #[prost(string, tag = "1")] + pub profile_name: ::prost::alloc::string::String, + /// Optional filter. When omitted, returns all tables in the profile. + #[prost(int64, optional, tag = "2")] + pub table_definition_id: ::core::option::Option, +} +/// One recorded column alias rename. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ColumnAliasRenameHistoryEntry { + #[prost(int64, tag = "1")] + pub id: i64, + #[prost(string, tag = "2")] + pub profile_name: ::prost::alloc::string::String, + #[prost(int64, tag = "3")] + pub table_definition_id: i64, + #[prost(string, tag = "4")] + pub table_name: ::prost::alloc::string::String, + #[prost(string, tag = "5")] + pub old_column_name: ::prost::alloc::string::String, + #[prost(string, tag = "6")] + pub new_column_name: ::prost::alloc::string::String, + #[prost(string, tag = "7")] + pub created_at: ::prost::alloc::string::String, +} +/// Response with stored column alias rename history rows. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetColumnAliasRenameHistoryResponse { + #[prost(string, tag = "1")] + pub profile_name: ::prost::alloc::string::String, + #[prost(message, repeated, tag = "2")] + pub entries: ::prost::alloc::vec::Vec, +} /// Describes a table with its columns and associated scripts. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TableDetail { @@ -383,6 +421,36 @@ pub mod table_definition_client { ); self.inner.unary(req, path, codec).await } + /// Returns the stored rename history for column aliases in one profile. + pub async fn get_column_alias_rename_history( + &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::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/komp_ac.table_definition.TableDefinition/GetColumnAliasRenameHistory", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "komp_ac.table_definition.TableDefinition", + "GetColumnAliasRenameHistory", + ), + ); + self.inner.unary(req, path, codec).await + } /// Renames a user-visible column alias while keeping the physical column unchanged. pub async fn rename_column_alias( &mut self, @@ -486,6 +554,14 @@ pub mod table_definition_server { tonic::Response, tonic::Status, >; + /// Returns the stored rename history for column aliases in one profile. + async fn get_column_alias_rename_history( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Renames a user-visible column alias while keeping the physical column unchanged. async fn rename_column_alias( &self, @@ -724,6 +800,60 @@ pub mod table_definition_server { }; Box::pin(fut) } + "/komp_ac.table_definition.TableDefinition/GetColumnAliasRenameHistory" => { + #[allow(non_camel_case_types)] + struct GetColumnAliasRenameHistorySvc( + pub Arc, + ); + impl< + T: TableDefinition, + > tonic::server::UnaryService< + super::GetColumnAliasRenameHistoryRequest, + > for GetColumnAliasRenameHistorySvc { + type Response = super::GetColumnAliasRenameHistoryResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::GetColumnAliasRenameHistoryRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::get_column_alias_rename_history( + &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 = GetColumnAliasRenameHistorySvc(inner); + let codec = tonic::codec::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/RenameColumnAlias" => { #[allow(non_camel_case_types)] struct RenameColumnAliasSvc(pub Arc); diff --git a/server b/server index 4037851..8dbe9cc 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 403785118a5acbcbb38492ff3aff245d140a9c2f +Subproject commit 8dbe9cc14c6834ff12195c5a7958f2a593f8cc81