From fac1ada024f9e4ab66977c5f20ac6128b2e298b1 Mon Sep 17 00:00:00 2001 From: Priec Date: Thu, 16 Jul 2026 00:46:47 +0200 Subject: [PATCH] auto recomputation fields are now available --- client | 2 +- common/build.rs | 4 ++++ common/proto/table_definition.proto | 4 ++++ common/proto/table_script.proto | 3 --- common/proto/table_structure.proto | 4 ++++ common/src/proto/descriptor.bin | Bin 94454 -> 94734 bytes common/src/proto/komp_ac.table_definition.rs | 5 +++++ common/src/proto/komp_ac.table_script.rs | 4 ---- common/src/proto/komp_ac.table_structure.rs | 4 ++++ server | 2 +- 10 files changed, 23 insertions(+), 9 deletions(-) diff --git a/client b/client index cf925ae..405182e 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit cf925ae05b44c9588067de5375a5204687fbf042 +Subproject commit 405182ec8d2b7a54e1ecb0bba2041d9e0a482155 diff --git a/common/build.rs b/common/build.rs index 9885bfc..a58bd0d 100644 --- a/common/build.rs +++ b/common/build.rs @@ -157,6 +157,10 @@ fn main() -> Result<(), Box> { ".komp_ac.table_definition.ColumnDefinition", "#[derive(serde::Serialize, serde::Deserialize)]", ) + .field_attribute( + ".komp_ac.table_definition.ColumnDefinition.recompute_on_dependency_change", + "#[serde(default)]", + ) .type_attribute( ".komp_ac.table_definition.TableLink", "#[derive(serde::Serialize, serde::Deserialize)]" diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 94d0875..a731c5b 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -130,6 +130,10 @@ message ColumnDefinition { // MONEY rounding applied before a value is stored. MoneyRounding rounding = 4; + + // When true, the submitted script result is validated normally and the + // stored value is also refreshed when one of its dependencies later changes. + bool recompute_on_dependency_change = 5; } // Response after table creation (success + DDL preview). diff --git a/common/proto/table_script.proto b/common/proto/table_script.proto index 0c00dfe..0bf8c3c 100644 --- a/common/proto/table_script.proto +++ b/common/proto/table_script.proto @@ -90,9 +90,6 @@ message PostTableScriptRequest { // Optional. Free-text description stored alongside the script (no functional effect). string description = 4; - // When true, changing any referenced field recomputes the target column. - // When false, the script only validates direct writes to its own table. - bool recompute_on_dependency_change = 5; } // Response after creating or updating a script. diff --git a/common/proto/table_structure.proto b/common/proto/table_structure.proto index 6cf493e..dd03a78 100644 --- a/common/proto/table_structure.proto +++ b/common/proto/table_structure.proto @@ -71,4 +71,8 @@ message TableColumn { // True if the column is part of the table's PRIMARY KEY. // Typically true for the "id" column created by the system. bool is_primary_key = 4; + + // True for a user-defined column whose logic should be recomputed whenever + // one of its dependencies changes. False for system and foreign-key columns. + bool recompute_on_dependency_change = 5; } diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 469951902a5daad0dc8b3207460538797f7a8d13..43579ec52fb225a18df2d1688d429ec2ab981292 100644 GIT binary patch delta 4926 zcmZu#eQ;D)6@TZxw=cVIlWg)50to?LXe$YjfP-3@4pyNsLZPJ=OWV=ugk(ulmn@S_ zfD~|{F;vP#K3)e<#wdt{Hr13yKFU{TprFDGjC_=U7IgS@rj$}GAC7>(bML$CKmNDB zd+zUd&pG$JbMM|;{|No;Qs}+DCD!p4r^qi`UDW%Qy(^GRyH&&B-Ph zFr_8VbE^}nB&f5&uE+R%UL@HV|Dl(h?KL!~yxREOcw=q6v8ExO@)8hj@@nd<8|&h! zD#yujLhNHmI%#W246`27P=-)m;Y@ObWx4hWGFGqIGBLJ-!b31-S(Y$dtHYnM<-3&~ zB$NuqpwdBExl#oXDjk&XI@2Ws##R2Gw|uW^6^U>#g?Nx6*&2eeieh=rQ&>0T+HaBZ zu0OeJg8LSQ2Rb7l6EY3gUQ6OverMP4{I%r7oGFgY!|c&||7_RPZ>}dRg7GXhiWSzA zlbspB8tZwDu>lVgHjq_VQsJ*UHP~Ocb-)-v=iz*IaRWtTnE?oFAh*Do5eNv^>huq9 zePLoJS($YNGTccy1rK=wLY-7NI5PmDPAVJfRLH={wKtL2>Q}#Ap1+BleCKJYPaN20 z{}*ph8?!m%7e*nsIpY@wAh((Qnh@|Xq029MXX5y-j9(n5SfCnOArbW_xo`vwS!ZYmh4Aq2W<@DS%&Y@_YkJ!HJ^N4uXX z?4hvdJb`F!R^3LTq@;4)^p~i}Z|fdf1+3}%@r)Yk#EEnf~a#dKc zLTW!p^;IN1;@Stu_@jULccaq>_(SBZML4R1BnqSe5cB|5D*%MvLEQ=fp?8p5fuh3r z5ec=s5y4Rbs;B^^HIf$yb5tKuL7}9kBOKKsz0W}40%ir1IgCRT*2)~lA-&HLMu$nL zDg^=+P*Y7%4^vp}GpurQaf$N+GT^xO5i*Vw`Tzd?^HYvcc)0Y&;T#;*&HzCXPz3@A z#iP3D0HJu4op}!FbJ){k{_39R#~ss~f-wjjqo@iUkmpeTqcS)^2ppqf<#JP^u6=@x zbAH)-qthoS{Frno$_||*5t9rc=mDw_0ik!2!m0!Sp?8vUasw)ir*te)=?b8V1yEXp z4-yd6Q#!HfC~wMX5?-(@ZwjDZmP0+wb;Cyw=7M{gy93ukl+ni|1_Val6hOT!Z_39M zQALKia&l4sfQpJfLt;=m;Nrw!thpArXDFhTEpX4!z|w$=xqaXU)R2Oj8UnR1Lk)r2 zm!YEfoy~Y`hek`Rxi+|GGcMcUo+Y@A#rz<3s<3I=tP=y7Eu&z*4)e|73u2AVCffrm*SLiFl0xy8B z>L!>YOeg_rB@;?lDXQ89tWdg2MKe`Z0828uAXjP*dvQ&-4=k_`Y#Q=gHph^%R^sZA_^=ClnU8ll+(v@5e z`7`Yb5U7C46+meXTmc02Gj@feNau2HZ|H9o2wXtTW#t z|M)kyPf35t7YG)NarSQMj|K>OfJzS#dbjjP0|>oa`lE?)jJNd%3+cs< zP;c}1E3+5l?A_6Q0|;C|&1K~~x^KV=?j7AXVvO!)sGL1OP37#}%}_aecbPgC8OU?( zdt@vTbXCIdP+jlLiTArcs(#u8A@i7IIAx8$PIvbqE|NFG9xU zl~?+|{ov)wm1qsJzAy%vl_K~n0tlIv0{0KTe7d~w8h_;Oag}TI!WiR05yT7##u`yj zILn^flx$9paaND@*X|xcUH*aHTYG!<95W-AN2x!7%X*i6__r|qptt5vhr(Dva5cYT z)cgPa%M-b;1a9&*-mLZ~o_KjgH9qoe9EI`@Z&srT2FSz=9LGNwa1!@&*R1P3a$+Ej zuR}uB6gX+tMYzK<9X^_M=m`#%L|wjW%q9FbEvCL29_);Qj^K3@>z&2esxIKUV62i}86W9xgfNVmucF2)xC3EyzY4;9vU^GL{iR#kBY$ zwS>Y0V8VZQY?ifD_iP|E9YED|)St+ux@QBTqL#{@ot9iEy{@}wNH#1$&E=2xb=^H- z1^0E`cthN?+w`#ogk=FWm777EKDJ;5wT=Hpe_yT&)b8&-GqbWi!{AokPLcky)r90h z*G?q^A9jkKvfq5GPtXzn$#cu}vyp%3+`7nt5(gI!GN$#$|2jEL(|UU@dRD2kSv?zJ zo2KH`Xf1g&@L=T4PBwYf{`4dL((~(+skoO&)-}|4srqC~qSl)g$NNuBa?acqelg+) zp!mFalf$n-|Mw9{KmT}>@OGrMQ?04y_#FAjgr(vQb&Zujinn?-$wbSXMt&&by*06+ bW$c&QctC9Y)L`R*u<=vND|(M#9k%>`K?aG2 delta 4734 zcmYLNYitzP6`pfvc04m{d%a`F81q_aS{{xaB4{FnP*aGbLP*<`CPWc!YVZQ4#*5ZA zh({PBY$q1P&Dsye^ zhYH>IXLtpEjEr?XzcFb3hGF3>epj7kYnHvzCMtO(7m6w@^bc)>5Lx zdkG82e0x0^Tf?`vPVv{1GsvrgOw2TV`vVex4EJmull*|Zgg4Ezd6+%g5dL@T^l=-= zaxq?@MzO*M@(S|mk3?`*p+Kxh+{4b2ZgXcG+|;f-P4->Y8W4F~#-jer=1lbs-B0q8i13ZsP2j&ML zw1ox_QF-R&d&9lkswef5@Z|o)gaMIWiu)QuqL)esX$XN{8amAT1$NK&?QLXy5)R+~ z^TalCQr<*FYqRQ(aOL(%H9K?>U<@)l$bCx6077O5RSfi|L#DvDcagCtyuSUFU>7;V zv5}Tlz%si@R7wUAat^493J`j`wH_e!cC((M!k8m5BBGKdp$f1-W+_MUa&4892Mm$0 z9A-%6C^cNxr{mju$=Dx$xnoMOmz+we@33q8NDP-0Ah-soTmyvQK5_?ZEA;l!uvA2a zu`f?0PyscS_p2{YWmoz%^)*MJ8vAuvKnM#^g#`$yeu^ifWw|8#$yZ^)3aNgM>NzCb z_3h8d_A}Q5~exGD!_wj_Q!!XCQC^3!=#!#vyXFGKXC`>5a!ZIINukf+C;_1Q3dcb?Rx7!?&qR2aY3vBae-fGQS1X^jpfAgEvK#0GKR zl;b2)(XzZLfO=UD^*GlJw*<@u_c-4PTnlkVCrDI8M&1-ay)19a3364DVXmB9J|Lo^ zqEC_-5=30I2gaIffqRl%t!#mNk_HWqxR`qi+=v=eP*Y=|p2|~Wpq|Q8apRrNdu+$X zO02myxTo_j+u)uixXg{S(6_%K<9t|_s|~&(r%L)#$eVUnXC4T?04hB|=$+M71PHye zI`f5`+H)j+EW-doMgY|Y1H#jD6d$Fna`Nc05|+aZsdF@LJldtOihTP58UGHy%S{a~ zkW(sMD`M9!l2Erh5L^RPt^q>uBDqCU5DjMb60MxnQYP(9Vx;|h9^(x`|n1b9E`}Q?5 zz6;m>ZE|pp9CZs8b8fGbPz)gG0jdN6Lhm{`>V5`<-gPQ_O1e_aA%Ck~0Rk0JxdJGy zkt=|pe#@?K6hSfP_J%&IK;QyuE-T+4SLGH~aBt|dTFmGsi87gKAW#7{m9uw~Ty^)r zDktL+!pjzO@@|nBI3eP4_JB2)vv-SJt<2fGMFT4E@DWzRw{Mg2AdKyu7To4%0}CcN zdw2Aq0fHW&(gTFv9erp3p?60gngqvqS07*?PyscSvv*gYUsyrC%jZ{SFTvTnr|%6Q zZ~--!mG9|$16FYF>3bu==zgBc*#p#6&ffhzm9uxBsS}Wa65sxwjQ^qiyt?oC;Cub% zDd8ME)GZhYih!yG148kkZoz<1e5hM+348iTw_qSp0hKd=(i*j3Ku{lX3w{yK6eNB7 zF&Ukq+xL^Q$Nb273Hy;`UsefGS^0cV_be(8vwc-Hz)BHTD6SGw{{V#IDuG_uPLd33 zNBC7=XH7?*!cKIE= z;r9JibTd4&e{1-7b#1Qg)1#)l=Q;Jw)Rmig@VrBB=f;2e4=4B&$7jG{^S5G5Bf2t%*iZV)Y_76PPNQW zr&{W=^U^J;Ihn@Rg-tb{(wSS=*bE`IH_yp7ENV$*ni`j;7S}a4)Ymcd_4)?rw4|0~ z8>CPs)zH$M$}E8kb+a4OH6F@3#{R|FL0cmND&QxDw3$GoMk8T@kLhgV_n~=WV)5)K z>-<$>)`!ziyj4|?+lx8!lfbijHy60v zI+%`>n+tH+c~}w$ZlTdk_-$HDUFZz;o`sI!bu&F}vuNaaW&tCJOr!{exfv8(WP@S` z_4a~f!j$c~FpHiIk8SpX>=O=qkwwKR4ttSB!Lb*pfmUOQ@&ZTIY{ge^99kxOu~>|j z6aZ}WVzd_)0J4GN{Nj)Zw8cZ7)(GN@@s^8w0e?`(mKv)_$s@_;QfHu)=Z|W08Qya& z0e}dXMM;+5*5j_wfI%m5JGLGgrduE0A^ z*>Jl7sVzc&!CQgO5ZSQY3OwQz4d5O01!cm`2Bc}6t#{BBA{);{Q&2QyYo!SIGmN9- zB3$`|$7xuJju6?vTZx9Cc$gT7>c|v>N)YAT5;5dFz}rC4@Q^cu!J{;SNKo|*5T^*e zzm3EgFHrwf*ti0L^&c1fjB6ttg2;*jXd|40LKFl3hFDET7xpWTqU6WoYH}*1EIx>R zt6ldcAgBVWYY-4~+jU<8glc=B8&iyLqYm96fWQURT)vh%bccWy+z#DbV%(QHb!!F! z6;M-IxKp=gSV8UN{|8=2B4ROy?}eZKYi9L(c?$QV_sAU}