From ca1bbf84fb5c54ab6265f8b8dd2688615c07099a Mon Sep 17 00:00:00 2001 From: Priec Date: Sun, 12 Jul 2026 22:29:22 +0200 Subject: [PATCH] money without backwards compatibility2 --- common/build.rs | 4 --- common/proto/table_definition.proto | 20 +++++++------- common/src/proto/descriptor.bin | Bin 89722 -> 89391 bytes common/src/proto/komp_ac.table_definition.rs | 26 +++++++------------ 4 files changed, 18 insertions(+), 32 deletions(-) diff --git a/common/build.rs b/common/build.rs index 323746b..1d71c08 100644 --- a/common/build.rs +++ b/common/build.rs @@ -169,10 +169,6 @@ fn main() -> Result<(), Box> { ".komp_ac.table_definition.AddTableColumnsRequest", "#[derive(serde::Serialize, serde::Deserialize)]", ) - .type_attribute( - ".komp_ac.table_definition.MoneyColumnOptions", - "#[derive(serde::Serialize, serde::Deserialize)]", - ) .type_attribute( ".komp_ac.table_definition.TableDefinitionResponse", "#[derive(serde::Serialize, serde::Deserialize)]" diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index fd0110a..6ebc2ea 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -78,9 +78,8 @@ message PostTableDefinitionRequest { // like "public", "information_schema", or ones starting with "pg_". string profile_name = 5; + // ISO-4217 base currency used by every MONEY column in this table. string base_currency = 6; - repeated MoneyColumnOptions money_columns = 7; - } // Defines append-only column additions for an existing table. @@ -97,8 +96,8 @@ message AddTableColumnsRequest { // Optional indexes for the new columns only. repeated string indexes = 4; - repeated MoneyColumnOptions money_columns = 5; - string base_currency = 6; + // Required when adding the first MONEY column to a table. + string base_currency = 5; } @@ -107,12 +106,6 @@ enum MoneyRounding { MONEY_ROUNDING_HALF_UP = 1; } -message MoneyColumnOptions { - string column_name = 1; - bool immutable = 2; - MoneyRounding rounding = 3; -} - // Describes one user-defined column for a table. message ColumnDefinition { // Column name that follows the same validation rules as table_name. @@ -132,6 +125,12 @@ message ColumnDefinition { // DECIMAL args must be integers (no sign, no dot, no leading zeros); // s ≤ p and p ≥ 1. string field_type = 2; + + // Once initially stored, this column can never be changed. + bool immutable = 3; + + // MONEY rounding applied before an immutable value is initially stored. + MoneyRounding rounding = 4; } // Response after table creation (success + DDL preview). @@ -229,7 +228,6 @@ message TableDetail { repeated ColumnDefinition columns = 3; repeated ScriptInfo scripts = 4; string base_currency = 5; - repeated MoneyColumnOptions money_columns = 6; } // A script that targets a specific column in a table. diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index c1e613ab5eba961057dacc5f62947fbf3c6dcc8c..f13befb152ef8a5c4c750a136d9fbf876bcf925d 100644 GIT binary patch delta 4614 zcmZWsYiv}<6~1To?)BZfUa$8q7_%6-xDX(rsDKl25lsn?1QKvbLTEvz7_-5f+6Mec zKp>WK1qhMCBNe1-zcX{ktEm6> zyXSo0oO9;Pnb`*)MBh6a{c~i2*xx3j3wGPT7hXmlY)JPUS`ed1BO$Q;1&5%vUc{YY`p8z^F2-NW25;R&$dZK{m2|KAoEl(56Rok$RN8I(R<2qCMAw`o7kXZ4T;|EXg%5MM<;4%ej`; zwjUO|ZCOzFgGviwNBumMOr2~jSs#`fMl4y6QhT0=TE4y1dWG;i66I!nlFpw<4BMr2<0SD@s$|387f9t?hYaT{Y#oyCQ-> zUE53LK-PwP4I8LyvDeQiCfaK~iN2Yi1~tv~Su|^|EmzmrxGHFETZWpC(!CqDa(!KM z(9A6!EJp7))HN^7Et$6#XVqEZ7R4AXtQxoTaYO(X_po(}h~Wm$W( z+St0~%Nuiin6fV;fB-A@9_irKy2f_I*!q8A_6G4p#8JY@a8*y(xosFuYhOvfhJ zzO#j_?L?Uga&}jlJh*;%8r@-UA$PFqK^wbacgmaVpBjgsNUzgm2MEVbDk@RJfDrDa zl<)ll+1WS~_BOd_!*f;m3EnosUT~EF*+j8o1Hs!y$x?4B0*d<1F0%e4uWWd-EDFC} z$Jr&9Z=5<&0j$_Xb`16+ZH0Rmp>uja zVAU>OwL0X(VUPS~<2c3Vi1(1~^}2J+dnlePd;otB`DyRPkdH3fD{D8+p2h168;I<} za@-kvDUt5wbA9$wpFxEW5Zp^cD!q{^Tk@TENc>U$ds8K{<>lWYFXcU}RwK@KpB%G! z8lnY&_`X84_yG5Pg=p~s;`=z-DIp&Y`{lvSlV&oX5bgd#wD^Dy+D{2T3=SXIpVIvc zA0W7&FsRhta5&v^LdWnaQDH%>n=tHnvjHL1O>y5q2z66>fPs+dra^H9LKr;o4u+^+cYWtDSs%!mTb|6ja6C*d4_MoFIlLnzhA0&vga@d@ z1BCApid7gZG>_2WAf&>0v_R!X1~gRO$D;)*hjWyvbM><5;bSH>S2Z!9P7M%J#|ZZp zrveD6W8@Ds5K_lDvoR=q%y&K{>#wr*jZyg+{66GU%uB>Lv*RSviUkBsKs_%3;d|Un z6hLSm=ZT`JFrL7i4yl|Opw29&I`jm^^r!^{^#qSv+y=ZXGCOJZ8wgy$qEL!cIZ3Wj z7T}&V`yFHS5eeO~K%fE|Di7C>$kqD|t8&I=`Vy+(`OYaEy^rM^opWY;a6Cosqbe7V z%W&Gn0|Ze(oeLm*Pn-S&gy?CGXAV;FIM_3C#GA9G;3t~zjM*VT$ef|Lt^pu>QfjEm z5)d+HX!r=VLvi2vgsi{G!*7nt$Km%0xx-XwaSrV)34MD2K@(8t3kct{ z!uLXfiq|YdL*>isLV+3u^+JJ)p?J|mToo4%xWIG5JN?`0B?t11AYDu8;E0TJzG zijOc>l6;Ou*sH|Z)fS}&wa8!LuxW2c{ zxdj3j&~RD#7R7XZVFmY=IkzQ@z9!K}pOXN*Ytc6e&6ydgGG~E!8_&v0YMW`YXZXe zjyXVp(7a;~P?Gb!YYsFJsDOsb6})TCGpwNA<@2m6nB)rHGjjw8TtLHR<$Gq1zzXg? zGe?q)?iZ+BK|n+03f?bJxq|nZT8%1{`pyH~P5+T)vMOH+#|P$ZRLW&|Xs&1=hyv;> z8W6q@%@qv@(TC=WF6CgqH&-+esDL^iKxGZDXh2ZE=PNq?a|D#~opr)`U7nW{%TsV% zC-4}Wifu`8JR5|_WS;o#)yY&QC%rYS3Ll}3uUZ=rlno-hTmYfHLEv)P#D6JM99M_j z{nk1VIjD{Tk%Q_G;q?G3h#dlZGa51ZzSAkJopNT^$g~f?PJtWfmk{(hrmeE0>&0>S z3Bj$HB&rnw;kZ?V|B3)1xK-c{!w*@X1KA-HyT=d1Pw;k_Kmge!!s-Bmx1%SwJ9YYh D?GQrs delta 4853 zcmai&eTdWp#gU>UAdQvB282lWxN`zRqV@ zMYO7qHv2?EON?7mLRIbX64RFPgv=$Q$LLhJjh5xU<)(_X8_SA*!{l|Ue&bsMz z97JM&X@si^g!BH9ZLZ?HF2{iP6aklt1sEo*Xcv|ia!_y^RZkn=0 z)m+}}+-nTla@^0veUuhfd_87;KG+HA=pS^RsoZrCr6=?yCK+d2`V5?@3?yV8_>cw~|r13h*J!rSw zbzz02jn+wVJb@@GU?y5`|9;n3r|}cP^m})HMc(;Cg9EldBz%;0AmB-IsS2 zoRJN|2v9>(s?T_QGr*?iWHv_PG~Oh+pWDCOeL-tX-XCv&gas2vzQ;-u2rXx z1QFaUNmFuJ5^GR>Zm|QaX3uZ{r&}Z{5wG)6(zghW8y;ZREjsJ;j8DQ=dt%iz$Jf?v zl_(ibSI=9e+*BKYzg5yoa$Uyfe0j(&xaZ0%bbda-=pl(})A2De&`=rXvo9DJF|Ia% z;6pN@GdasuD{1_&n4j8{_jFRNPXDkZEy)}=n`pJ$?76Ei!Yu&tZ8f(HkiM2Y4 zgZAS!=XLRuVh6)!0wOploYy)X5Wzv=B)J^HVj2%g?iaT2-b<=Q@`j{1fh`b4MHPHP zIE<79LKEn}6d<`z1Wh2CPpGD+5`0ojXGYcD0e!he*SRO9+!~@TdF0rn-A|-@{YmMV z;P!ecjh~X-uk5AwT~IBN_>^#d=^Q1sw^Pgnrvkzr(Axu&yHiSILKMxNGQK0D65Lgz z>P7|zs;=X%8ddG=QtH?IwCv&Cp|q0Q#6Vvf5UJh5^`oT#k=iZk*Z`5*t(ASA#wTg~ zwB&wk7p$FJO~`v%zha#t(aN3?;}0Panm~V|0LgtOoG3svpV1S=Qwi=7j%S@eafb@f zR|a&^Qgetx-6I^(RnMieXTy3Yt`uNhmaL^bE5)G9Aq~vdJ5lr-;nCu!%Ou~;&W0w+tpImHtY?4K!^f;EkJVjhW!Ubbg%m9 zrh{cQyU$L%|B6}sWb^F{D+EMlpOk$MfSM^Sr#t6BWcJC#Np6Me(|Et+{$zi7|Kw^t zdHbb!hO<_$)(!~wm(~kH6X@#&l6ydkeop|=JRl8?8I|C{P*uIN1N2n^T{Qbrflv=> zRc?jq4J&j=Oh-1YZZ=?;R*OEQo5-8eH94fmhAwWsqQk-q!3TAPfMHr)p~I40d*r%g zu02nsfz{`QyW4ZQ2qR$NaxVi*L0KOh&kNVL=aTzEjmrB-VW8?Q`a+G$3kf((s}Wg*WQKhy4Qs> z#Z$>WF1+o1uz(UUxG3P_xbV6sdM16;U3gr0-)GrK9Ty(>vskL8G=4*J@7nqYzg%r1 z?+q#XleS5h>P<1;0Ej7pzTZG{-;|=i2Y_h4DI@eHA4N^t!M8$XAgDlJ8PG+u%79Sc z(#qUYHR)2F2uA=2E--La`Gl1GQW1rFA{+rtiryA8!qo|a3Jg>|0^XLAKhlW0WFAA_ zF&&)wj_}ul_Nd7%1~71SG2RjWUdW9a1^4`-2i;6aD z2j36hA_zY~uL&gg{qQXU(R@FAi_Kc+2jOf0K?Me?cJPC6G!TXQfgTO6gU#B(li^4L z!374cDxVBT5>dD(!;#di=))RSI|vL^?cj$ss&?>0rB0^{EouA_*W4%e_Zz#aEhK&v zo>?v0hEw6T2O$ddw>^;DQ{lD;B6=#^_AP4m<8a%9paQ)gpo?a=JrL^0dfS)3f}u2x zSDD;8yKd8rwv@zGhIiF$mL*j`tBq-I|Kbk^FOgRJk4Gd5p0jh_f^;81d#4M^e!ll_4OL~w)QIizpmiW=Ey_iR4z41U7f7>oclWU}r6 N;cXlm_k)(_{sY2OO@IIZ diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index c7de2fa..705a952 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -42,10 +42,9 @@ pub struct PostTableDefinitionRequest { /// like "public", "information_schema", or ones starting with "pg\_". #[prost(string, tag = "5")] pub profile_name: ::prost::alloc::string::String, + /// ISO-4217 base currency used by every MONEY column in this table. #[prost(string, tag = "6")] pub base_currency: ::prost::alloc::string::String, - #[prost(message, repeated, tag = "7")] - pub money_columns: ::prost::alloc::vec::Vec, } /// Defines append-only column additions for an existing table. #[derive(serde::Serialize, serde::Deserialize)] @@ -63,21 +62,10 @@ pub struct AddTableColumnsRequest { /// Optional indexes for the new columns only. #[prost(string, repeated, tag = "4")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - #[prost(message, repeated, tag = "5")] - pub money_columns: ::prost::alloc::vec::Vec, - #[prost(string, tag = "6")] + /// Required when adding the first MONEY column to a table. + #[prost(string, tag = "5")] pub base_currency: ::prost::alloc::string::String, } -#[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] -pub struct MoneyColumnOptions { - #[prost(string, tag = "1")] - pub column_name: ::prost::alloc::string::String, - #[prost(bool, tag = "2")] - pub immutable: bool, - #[prost(enumeration = "MoneyRounding", tag = "3")] - pub rounding: i32, -} /// Describes one user-defined column for a table. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -100,6 +88,12 @@ pub struct ColumnDefinition { /// s ≤ p and p ≥ 1. #[prost(string, tag = "2")] pub field_type: ::prost::alloc::string::String, + /// Once initially stored, this column can never be changed. + #[prost(bool, tag = "3")] + pub immutable: bool, + /// MONEY rounding applied before an immutable value is initially stored. + #[prost(enumeration = "MoneyRounding", tag = "4")] + pub rounding: i32, } /// Response after table creation (success + DDL preview). #[derive(serde::Serialize, serde::Deserialize)] @@ -235,8 +229,6 @@ pub struct TableDetail { pub scripts: ::prost::alloc::vec::Vec, #[prost(string, tag = "5")] pub base_currency: ::prost::alloc::string::String, - #[prost(message, repeated, tag = "6")] - pub money_columns: ::prost::alloc::vec::Vec, } /// A script that targets a specific column in a table. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]