From 5a96a8596d316363315e5639bf9e63e3dbd5b669 Mon Sep 17 00:00:00 2001 From: grayTerminal-sh Date: Sun, 19 Jul 2026 18:05:22 +0200 Subject: [PATCH] feat: expose database transaction state --- include/database/transaction.h | 14 +++ labfy-investigation | Bin 402824 -> 402968 bytes src/database/transaction.c | 14 +++ tests/test_database | Bin 58728 -> 58784 bytes tests/test_error | Bin 37248 -> 37304 bytes tests/test_evidence_dao | Bin 83832 -> 83888 bytes tests/test_investigation_dao | Bin 46840 -> 46896 bytes tests/test_investigation_project | Bin 60272 -> 60320 bytes tests/test_investigation_session | Bin 57336 -> 57392 bytes tests/test_statement | Bin 42008 -> 42064 bytes tests/test_transaction | Bin 33216 -> 37520 bytes tests/test_transaction.c | 147 +++++++++++++++++++++++++++++++ 12 files changed, 175 insertions(+) diff --git a/include/database/transaction.h b/include/database/transaction.h index 8b46b02..716b319 100644 --- a/include/database/transaction.h +++ b/include/database/transaction.h @@ -10,6 +10,20 @@ #include +/** + * @brief Indique si une transaction est actuellement active. + * + * Cette fonction ne modifie ni la connexion ni son erreur courante. + * + * @param database Connexion à inspecter. + * + * @return true lorsqu’une transaction est active, sinon false. + * Une connexion NULL retourne false. + */ +bool database_transaction_is_active( + const Database *database +); + /** * @brief Démarre une transaction d'écriture immédiate. * diff --git a/labfy-investigation b/labfy-investigation index 5fe153d6c76ae67d5c5e372b56584ba7b68bfc35..52c223db43b8cd2dc8f2318902251f830f5360ac 100755 GIT binary patch delta 30082 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 diff --git a/src/database/transaction.c b/src/database/transaction.c index 33d2c6f..ac1516e 100644 --- a/src/database/transaction.c +++ b/src/database/transaction.c @@ -88,6 +88,20 @@ static bool database_transaction_execute( return true; } +bool database_transaction_is_active( + const Database *database +) +{ + if (database == NULL) + { + return false; + } + + return database_get_transaction_active( + database + ); +} + bool database_transaction_begin( Database *database ) diff --git a/tests/test_database b/tests/test_database index a93ca32ca819d41983e216a0f7bb3be11ced9c05..7599e291d2d0b7c5c07aae493f9af581b3644603 100755 GIT binary patch delta 3639 zcmZ`+3s_U<8P0zIH5HH`Aqk)nocBwLWm8c)F9pM+R;fgVSx^B5Dwjxbx|IhNokd0` zez?cA-q%eF0*yhX74cSuK$)^KwO&@RTBD$YiUQX5>^gM))#q7C#*ZO$Y>{C1~oVIG(f}IAZHp@|`i?6eI zT01L=J-6JN6(VPq7N2=<_h)Uieo+9crw4C!ndnG9oCE$uU?eas4(Y|B|woIcNRMc`FAK|&z!rYi>Z zxNK=S5W_X%u#0_ol{BDsx%GYzVo9LrQZ-7G7vyxBrBzBzUM-O8mlp3vLPibHD zSQcZkMjvuwf2K7tKFV${tiO$IIh$#M9h=}@p`;IE4D1lK$LP3z{VV~ojm~ba4znk| zkB(|v zcLfbu?Z;+N@an`tZ$YDH_0KxVym}nlO}AJ3a_b(`!epglgx!COdtPWO*e*0I(bprn zQ!q5YEibeYyYWph9ZXiKW?`ySDPH2v<%wI$XhY&k_f5fl@|>mzi2>Z03i|hIA8yVg zA&=*?3TdAld9GHFf1;1av}b)2`H6|tgFpSbME`t7n-Y{%m873oHMLK+olhNSdP3N5 z;Y{;p49GJyN+o>ggkXaWqXo&{o|jL)?4sZgLVfyi%c|OlA zf|rh*tPYuJ2`1R|(iyrwBt?o+dFnXo=#{+C4%pt0YtXwU3v_3OJk-8ONtJ7+X|n#0 zN-TM#cq`rehH;RTTYOBIbYYRAVyOrI~^O|#1! zW#BArn4v3PKhA5!XdI2n#kPfv#^t}*dl!UUY-diEO?n9Az9yDpO;3TC>8Wus`wPum zJ7Q11*HEjrg*>9OajGHvOL^XU!JyB*r_X8i(C21#;dtjxg3WxlC|a8_ ze84=Zv5fX+jOH?1sU$8pT2z?cuf2ZsI?d|+BJ_`t)!awl1~Onwvs=;#D?054$CUbrEzV5LDor%xaNi~*W} zS-?WzUSK)!EU*!%L_K!^?*qN?1E3OB8w6Z{qK^b_#*@GV+=a(dA#g07gXJ#SGFdn- z8qtvi>;N_Zz52;y{VO2=Ja`%cKr7G$jIM$J@G-C)xb6)2K;1d;fobQ#?=O?>y8u4$ z;^*K4J1&9`Ja`Fw;G5OpN8#cIE*gQIH4p$6Ss{S8j$bVVfGg`D0Gv|~0pMC-A#g9S z9C#Ag2y6g$0AB#TBN>lqak~{D){+@<4mBXorgp?CQhcn% z%^ir?NfC%+$%x2N0iu=6h+k3zVhgn+P9Q~**8lq>JpTo%M>f;l;}6_yw|-o;Ykyeq zL)Uav!(oaj(y~G_A|9p!#5-h0Y^DY=wjfCxef2>r;tR3wy&1Vj)@wJv*5 z6Ln-p`zjTb`nudgyP4Y2zDW&e`{Bs{C5#Bk%6{$t$8=u&2)|BV!Pn6~i~YoJXxVg2 ze%UEENGaj5!|Voa zs@8GdsdTJ5jO9>wwT^A4F*UIqdxy5yJk~^-B(5Xggjr8$;4rLnG*j%OzV_j%ur7>_ zrFN@|m6E(RmK9SH;%j8B{VnGbPqXUQX^tgG^FOs4yN(JGXkSr7or=9m59(ssw-o-x zHT+ceuUBzyCJL_qI~+CFKN{>RyB#Od#UsRJ0x2%5P{_^yP_bIX_G zZm*HJB@)Q~L&nQ07bjPYlE2g7z(K;5U}dp1VYq#s&fZ@fA$3f#_Xkk}atB);Tz-2X z6*Ma4Ng1&#;!H{F5-g!N<2cLV+szz{queH)+_9CBbgpR|N+rBmr%)e}bR4*ha+`JX z-oIGqnkOrI|H4UgXOPi(F!|l_llT0Kv&_7+jbrbT_3mW3`ieAdDar3m#wpLdH|oFO Cw$B0p delta 3556 zcmZu!3se->8J;^pUMjVY7JMN10t6x`8mOiLBMB;cFq#TUj?-^uc5(GM=j{K@{r~y?$G!i( zGy6rOP0uBpkH@l=+k?JUguTm2R~WgmU`6EX@+gvKvor3UW%B45k~bgd=66I^4~Hh!w2jmZzUQ7iA|HqY#F5NUwl=aE>lckG0bG10*XniI}nD2^Ci*0t1Ru(>dm zMbO&mN$iU0=JY8F_KC@R&inSPp8h;Pfc=wp%~z@Xy*MtfpU-2R! zlc;&ViZ#*?^OINzMZa6lD#<1$oeiVRm>_n5_QnkN*1K`s=9v3!~so66sIq<_SYX4!Np*2g{0S;}M3U#F|&Z$Ej*jb}wPH_neKDK##b zHPha>S6PUuA?|<;OQn=}Z)K|o>hEKlYqBztPLG)V9S_0vsa0MD3LA z&^+_){-W<~KU=B^M`+dazP}}XqMBdukXn7(Vri(O6$ zf8BJ73YWzE!6`D<=RaoV1iZw@#AV zBo&QY;V@1(Aqe-JK<*P)%)iPqKR%MGAf{cXcNJra)|Iq$#Y&fTlTndnM%4Y(vEntp zrivCNd$YadztYovE?i=M`tA)ai0TDx+zHy3>^*hI6EVrTeFaf%m@-FrnXRwa*S?rr zGT3s%c}Q^!q?Hb${VSIaJs55k8jFz>z(-d~k<(~ilBc^G>03vBS}8_$N%)_2zr3jiySLPw=~l3$CgH_lY5|DR}kqSF2)DPEe*0POJy}vQ>k#3 z+Dn6ED#ebvmt$pnO0}yz-Hl*c&r;EGah9Bad?e*Nk!vl`RN^w?NUG)9CFr8s~g?(iO>jX%($o zqhh1*i$J=pd=^0qIZAZ_XT!Ikcy5o;IN*OrPE+@$hQFL8Ui>?*U~o~Nl~ zZLp^iI^|fQF_lQDoz1U_pucpMh0$Z!Eu4E=5FT*f-So8=z2luh0d5O z2wIHWHVDET;LMGJkOKTJPY?=$!WKa=0C#Q`geKs;9pC|neIf`>D1A9l3yj|hJ}~O< z-~-bRgAe=?Xt3cna0&w)K=B0F3p|Iqov_DRP^=bca|8~6@xT;dF0c@|2WSA+0GohH z6ZpU%fKGVrpE?RY@E!E}9N;FL3@N}*ak>-&U&Uc&u-ky605?rgBmsMYtw5(&IL;o& zycW3sG#miOSHl7DBCrtn_8B+;+Sh^)oOKp_VD>ri?UCSl@PSPizz61B1Roe!2R^U@ zXo$wm<$5>(Zfbx7;A5bZ1IL9o!U0gz3}3M zb%GFxRpn;bi!V5C6n@wgTsuXVjA1#HQ=(xXQZeKes)BrnIv{^f1CSRCk9-kVC2Ju!d(x=|6|n_}ChNDvMMGQHDXDrdY_Ulw;6P zrNI}Wu3>zNeuBJ7N~4DV)s{kxYUWEZMh(72vy7To7KzJyn&OP!Y&{)=VmB0aXXu1c zP5nk+kyr|%9fg!i#8Qa}xrjc61gBJEw;OAFovKPT)L-grcN3!gx?ujnYO1K4$=;)Zx?r}Hg6bFZ9m%w<{((xHDRV9I z2GVqgk4D)-6fcV|#|^S{_{sjK-uegBoaD%O$XTsdzp zz15PJj7zBND=(HQ$pT51i1Lk6JTC?~mLflAG}Btl`kf18g~qJEEwWU7W^0GpI?`-) zrPj+{Dy0*A@>moEzjDs_hI`SSC|T1D*M-jW%`# zySbLgJPSrpZC9|u>aS5(=n$*FUg5Vw6oY@cOgXpmd6rJBJ5<57$bQ1;t?p13MmgPM F{tt6yqQ?LL diff --git a/tests/test_error b/tests/test_error index 674f2f54c405007dc4286d60b1516c7be5dac0c0..5ad3581971fffbcfb69f6b1d0223e5bd9b8e3f25 100755 GIT binary patch delta 1940 zcmZvd3s6*57{~8-dAW+PfXi|PcYzvtWb8Hr;g*id5}}RBIHLnvQyZPu8hf_jd+Z!TCXHG0*UUVb_Qtr&{I&aJNlc5?I{mE=$kWBq|I@i% zoSUh#_&Q#O9EHrl*6>Cg0r(9YKFj;4RgJ@V#|P%UNhmbh#& z+RRtu`o&=;?jDg%*EwAG*6_nwf>8M33;l)lhx%XTcXip6$FlAc74XOLOX(=b=(Fj2 zxj=6rn$2|yIW&Q{C2Xc@E|scDk$WW*Q5Q!hR?;kfFL4oF;ladtw2;e^Dnv@-b4eA{ zC{G==OQdcdnw&#F@WkZZbe``e&!q*jGo^nB_44%0A~7j}zs$^_mGa5V^&zyIE3#J5 z5x$jWqNnB2raQ62BQecEb($abDGHCVCeEu0wm8tTVqc}Put9e+$+w=tJ)zhywRhwDDT#k-2~{s192!rv!VwcMlbwHh|TH#o-iYuudo)cBq&!3=e@ z1&@!`^~b}bxgH(uCHCeSqCSH|&~&zHnp*I7u%7pbd(`9Z&);`{4uk6+b>GenR)ZLE z1&;B2-Wowwe9S7*68_DaL7#JU{z#f3XXbx5Y-`c+=vwtY# zMbV0aFsofr%wXC!MJWP1w=2qg@Rgm4(gdE^ttf3^|9<3w$p;i=09+1gLj+;|kH`nd z9Yj7j`6uLq%Q}%CBGd|}QD{TMEzk|dAA$jB0kt^1#v?EQUq1>1Fy|Nyz{AI30RDRd z`CybA`QQd{06YL{!vx_nXa=WrBOk0gg?zB{XXJ;~3c{veV1R}m&<#=#48WbIVGu3| zx6i-;%s2}Ju;?5Nz}j9IfMd=hAM}83(0&2=;PQ*ekHCa~MLxI@ECMH8Mn32So7BK< z6xzT>9J(8f$88$`&7gJ&W)7OcDzJzvY-!TIHboh&-sSuVt%@h{Q~!3#c#AEKTTdiFpMuov3R(i|h5VGHysmq07o1to5QmU9Ob3z%aR@1Eh?a||?%C5Lg; z5gb;!x;2xcw5vqx@bJ>e2yCH%S4HUM9EXwa@C=7hObX{k4nx>DoR@(+(44?6j>Pa~ zsK@s568lKJF@HNIq#oR;_#Sn;hvFBkn{n0ksP}y>&n&wU%Ja+DQL(IfXK{$Ab;`>t z452huZmn7^O2zr;_RzBhS1eYD6b5-x^^4N@Kr}JXBU+sRqBG^z>S;vJ@Sm>5bU}75 z$t7$|>r%ZKn=kKNnoV($f+o+Ou-xPSUF-_}(1n z&-pemo`r2SdTDAPdck+O1mTH5w49p}U7$uqi0{q?LO`{=zvh&NX{Ao%T=<%;w9>iA zF0WmkCCYp2FNrkBt!qr0;PQ*vvt~85v#r4tQ)ly=1i6b_8%&x9-!e}_uI8anWn=Ep g2cJlJR^uv>zT!(wxtf6*zt1O}(ws}HxTHDlKOfJx*8l(j delta 1953 zcmZvddu&rx9LMkP?$zQ3?O^N5x^?A`y~K6u#=vYs*~9`O6QhU`Lq)cNK^XEFva)p$ z#sZs^Ur3N3STJGWFu=u$C}??hys}|nRM2gpp^=G72u>hezqb!I2si2XbME<_@Asb5 zb8hZ|?PAS#aa|_WxUxFcMR`KtDq<~})hd1PPQ~Nt2W^u*c=wR37c=7hq25076fyk? zgX_i7>ShW?G;_PC(hsI5v49J;%=E#q=HbCeNdZY&TShzI489 zsGu@wQp)!t?c@Pz`P9H;(hkwr{2*-(O^{}r{3_bdQ?g6N+dBRtJBy}E=d!m&&<3u^ zSxIiblVheRDcyWOzGM-m*{e+Rliy@{<&O)E)`o;ThQRE54@ctPQEF@cl;s1;KXqdq z%6CI$YyCx~81sM|$EFON3V%3DcatX-597;Y)kP1k$?}T7DU`hF@#KGd`X{>|P5y{Y z#i?;ekq{1E!LJk#ub%Tr=7`5LXFkk)0kbW7G_&)5cs?<~6(uU!hn2-Ci!memfO05W zkG^58|J}NxM`Nvb^oF1R8KPSgpIF+)aV1%XV>e`Z-IKizX-dggPjTCz%zdS2230FZ zPdVIg?UCg!v^VaPWiRNGWLYH&!rS|0ITOri!ScZq-^j8ZeCMDnuLjQ^lI14Q?|~0Y zJ0i<|uohHB2*UiM@PmcN;0MPahaapu0e^&0Ep(vKgpNC)7fd{f0B{tj!p=9gA^@Cm z3ISmLX#{}YGYA0horND9*akni9rS}oKvk3=Tm>`13GMKMHRs_6Py7UbRJ9;{c>w|F zxCnYdx`+VqUx=`1b|sTBLFPDi~z9u3If34zrYXrKrcA!SNOr&PWWRm;V$^W z9iSDoT!kMz53W`UW!UT{@FwU5RXDiGmX^4Ca8}sfwm2r!A@v8y94ThW^p(4 zU8eVqq+t{EI9s42*#@1+PUws5hDz*#?&I!&(kvt0WfN4x7U&4JLGQ71meCZAy?9zV zw?AY94bjP0Dtrg9_CC^yg*c9a{%`%%25Je3T5sN5J;i2X`pPq}fu z-GC>g*hdfR*&zom4g3S}3*YDBaO-d%yGvSbzZI#xNIZY;M#`1cA1;Xy{dTFgA~ljU zl6z5|sLw6I(0 zp^lpQ(+0D)(iU`vxtVts0?|Uh&Z(JqPI@Y@i)R!E=oFzQX LRX~&3<;wUUWbee} diff --git a/tests/test_evidence_dao b/tests/test_evidence_dao index 33d02a4105d8408f54126547be4979727b1a2b5a..b90e043c85e4af32d3cbe7f826c119ce5eef064f 100755 GIT binary patch delta 2839 zcmZve4Nz3q702&=!jfIV07bqO7DNX&V-Q=^*wo0E%C;E`RZ}`t;|du=OjIICD5G6b zz$}pnIjj$ps$gsQC{2i9meSg?$@GJ1nqUSAc61_sBq7=<(~%1Dar%F}Wl1u5GyDIY zd(J)ockg@qcHii$zHP^Rs}p2fjpb8QK&6;I0xBt3CK|gp>BDZa%0CBfpChM-UQ&b- zA5`zjdP&*HdgsjakV9E(%%7wC<7jtT zbhPz;d+Qv(TshR-@Z6@lbKSQ7Noy0li7((S$B~+vugf4s}NfHPd-?nHaqX% z%$?d|Z?8u=*i+7Q^lQaWsi7%!zP5O6vG408`3?V% z?tIn%_nxxH|3~nT4tN6&Grqa-U20GJn&-xEdOqs){65yaH7+u-mkVr zZ4-X5?$mbF^Zu4h$F0o6cLFmV2S#Vk{{pOgLcg_CLRHO{g}=JZT>b66TiQQvHW<#e zb)?$0`@ah(*_+5*hdAZC%m=~M-(&6u-O0>1!Nir!KDZT^S2HJojy24WgOh8S_kv5( za5k_yow*G>mBHK#z6}n8XMW5a=qp6YCgvpYt)DVy`3k#;%7p&-&Sgs6cQOi8sJjFy|%a55QLN4tV|mv;PA^^x2u0f{PDf=it;~EF4TN z!@@x)*altzd%-Q`*g1Hk0y{Sf@$?bw9P9%(gC|~QF0vzNtYoeQ-vc|qPryF#Y7KS{ z?xvA<2a~}Da5Lxz?L`Q#A*ch> zj^i5#CaKH=-~>1d8c*QT`wQ`d*Kz4V70dzO1&hIcunrspJHd@7(GSL)LO(bHh6f1o zay|ONKQy2p{P5Ro=VAnTzkvaG2K*wu=DaOijF2LsjFaYJd zFbEXF0zLwEfjQtt7y7||unrssJ3&(?`oR_8C>clMWhX5k36s5KMO;XQBXRN)IY-QL z5uHceOqZc6XcAgZvHvs6DoTY8kPZ4*DuueJ0a{6JXc`SdpCEb9EYDIbbQ7iCi<8gO zQ;0LD9D10}BJ&*eAkLy8=zcPe#>oL-8cyKnXpAEZb!)xB~wMiejj(jK0&?S>`GKH*&4^aU$iyV_? zW#ScTnT(c0)T0fm=t~S%k#Wi_SCVB~tM zEsv^3iClzg(NL~hH5^h4G|X2W8g{D9K-3@}umtT7Cv{$6g_0g%$n*EZPnKASPoMf1 zZRTC|7NCR#s0Kww`zGUYT&Y?WRFYJSA{Q8nka?)lX_AqKT7)YaaXUlRdPOc?lpMv= z2c86hA0ja`*8W(+Fuob%`b?3FOlneq98g4y%QR0u<|FG})?oRGQU2W(yHI|vM2Hs5 z{mOA2zbV1OU(~CyX1O8aRV@g+g7AkSdi}_LJ#WB&f_7|EQ{!b=L?Oz7B2o;;>aR|E zQHWx-K`U2!y2}dnLYAWQq7F)`13E@@jH}BN&>A&gKkO@xu^V-<9hySPr1b9PLOFKVfnTq+YZ~lr=Bc&-nM(6Ew89x&+aD+ z_NhxB#nWH?g^w$2jcicJ?&ItF<63z|Q35N}*VAO8$$K|i)Q{6-h0IrfmM)hCg^%bb zm|=%{0%@c7O;Wv>E>{`7FQIBs28P}@R9AL}Jfg^J>gDxF4=3o?@>MlrgIpzlsb+7G G@&5->A1q-2 delta 2705 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 CUHoqV delta 2024 zcmZ9Ne@v8h9LK-k=kSip4#i*Rnf7q5I4JT|oMdKl3l08hQY@CFaJj7Y!61Z zCSV2oNa>n`=TgDLHsV2Zmcc1Y7Mei*XseC8G@${d4MmFa?fu-ZiO=@DUeEJ=p7;Ct zKHT@XhO4@pS9CQgd}(cJzp*!ug|=QwbR6l3$@TJ-}){JHx*!tYE>92PG`T8H1a@AwH z)_mSZg#{a=Q8RsAkjgiyzZQ6PypDDiR&a%MMRq<-O)r|5l~s~mz3y&y<+;I6uM1Jp z;gYjIp4*ET(T2Z|!y~n8)gwZj)E+;y9+xjiE@xL>(JmS$$?lp! zU5nSdqvw;?gebqsBabM#{}E%u_deo-sgKw}OI#0|&Y~gOR!%Rw(q4IUN@wEzom*m^ zPhr~gr*`&FMCW4&zuLUeD{F75y_H=Jy5#B9vmm9ltW7S}K8q||DlQYE2*)?eh1jEg zJ{6b~JPtR&cXkWW0bBP75rB=K2*GrWEvgYB2`;G>A`@;~ev3T3@jK+3-zlE;s-Wz^pW$F~b=Y!0*DD@Zqy4 zfQLF!0QdZW0{B0;15Q4N0=T~m1xCi?ACZTj??xUjIgdPi=mPR^?oY_WlW+%IbrE^E zu}6qh_5fzwivsvOoC$CJ83phdTn1NPLIDL8o2A7gM6$M$vJ5jdJ%W7&_IR>-ZI&Wj z#k^wMLL9lU=aSPa^Cjc~SCQhCt-M-@Iao!^kuY<&^sGs*n;|`Dh-X@26#H!o;@&5S ze<|~PvVt|_0G}o&Xdw?+MG81Ze(*O6f_~zMWd0dh!N17?K1NQki9FzOQow5RgBvIa z{zCk)%y*F$^pgYJOipkUc|ugcdh&zsP!O~bKO$T8SYYY=-nlQ~(YfbgVOq#>MCN(q z1Yaaihzj@;`N3)mf@_F3%KRU)g0GPSbdwW&i#%X}6tJKCAqGJk@g^;01-Fm`Od%(j zP9E?XQoyU^2gfMbggIg<*`~~Kacqt&u=Y%3Ju35s zS3`HUlLyEB+VS#Rk^61g;TsDg_utXRCHxJNA_EakB&fgl4VXx&nx{?%yb>+d8PtYr zNjg58{5R~zPVI|CbyR=_oG$JE_TU?ZFXoY8eBFJvhrrGur(I$lt4)YK`OFXxL=JXn0MihAd*H z+9d`OT;vutlCw6@3!5H@)x9?Mm~b^}5_@ zOpt4`2FJ43=yHyo5iK`;C~DHE%QTvuqt_?C$=1;NiOFoe+&FP(3~Qq)vvR})E!k(K zvo-ShSv4wlke19{%}&w3a}8{O+<)Gqo-xtc<)eMsmXp7IdXsY+RNVKCC83dbF|ztd zp+38!_X{b4;2%EJ4ae?ZJ*Sg%r~f=|kHK_Oa5~#^$v@fAMei3S#u`u`%KD>|9L0So zvp9N8QE2Sa&z!Hi%Ys`Rdg+-hTJAi#MRRaExW!x4Rg@IF1qq?FywDE4M`S$}JpI|= zSHr=>aqP374n9EE;v^PDjo=b$Db}$Px>cN>u=O_Q8%`acoNf6fd)1xzY|BT!(9V

ESwKQzhWKdIq(S0v_>f!oE)JF<}*@1fa!d}$F zRvGnhBW#N-6@+tWI5F@L_Q0+K2!Lfx!UQQrf%0?vRxgLC1>a1lKCN6t%aXq22m06en=0q{E5 z2k(cq&k4c@ZUn%4&LaSB{|Nzbw~IIc_~lEehp)pPxZ*PEVVwu{(YOLvP!HdNbK$(J zsE7Y<<-@rRjl?ztzoBJE~D|_J(>@$po(oNtePBX zA0sz-fV|*ZlD^clYh(o5$)wP%&xbR+0n!j@)1= zdBJrg?b5SNWCRD234EK(;0&^YbIAcNCO0UM7px%3u1|jO1Luhh@19Yy@oUA`VR-pZOXH6$3C#QB`}zCSUYo}n z5k`)J_PD>w`P|Mb_gQ z|1$&*q@&;vr9Dnzfx;CE%M@<*Q?~=>>^~;oqCiYTFzp1bXwtB&%F18K(WHrpl(3SL zRnHr>{uXL_X9gB$1#1%h<03BLi@|}QQb=mnuu*b)^T{|`d9HW&g2gju&nYZeO5U?t zIr8G4qI~~yvI;j!*J@CQu3A2sTFY>QuCy8?PgNi)jK!bDIM(^JsI&Fnmt9J5v7xg;S=* delta 2370 zcmZ9O4Nw$i7{~WrK)jT=QvnyrBX9y78^}=RoRA=8(3%3rk0Etb{1_^y(9q$~22=bv zNjrR^WKvMnIMD25VdN4)0Yw>{4nyS>gVId%i)k{wMBe_pcUP0qIGF&#QPESByB3Q&|5R6v-z}r#>;G(Y@Knyk5$v`g{k7- zL1bAN#pcWB7nXUkB3iX1pY5f8mqarkdF;}@Vf1c}X4#k5InO_ltxwq&kQ6QmDFss> z)q7);DW;a21$Q~GRW^J(8Pmz`=@ipNWzx5w^9{WWwZ5)%!qi&kuAPHiWk5MK=pLmR z!>Bt)6W@Prph{WsM%Z&JKD_hvig(@9?iD|!!koYWWj{)26OslN*g&bqaq%BMlfC}= z?8Tn!Nm$zSY<4%?vq|1%+X}-<5S?zx&&(5v%*%2IB zwJsziPr1Fbu%p5GoZm$I(PqxIUg&S(+>SmoaUO~OwyoGLyt{z&<#1mi=U>1piSt8n zO%dm9@Wh>*-+@-ExAx~J3h7|+fz;<|(h4Wsx zAJ+N^!b=sL$H4J$Dm)*~f*-?XIPxIs;n9as4|{!&dibCf^@9Xq#SzrQ9aX4@3uV;9 zR@gi!PY~>ASTXPzw!?Kt5ddF@wZ4MzNi724b2bFP6OJJOo(Y@bY}g8a1>50jxEJn# zwS#d*>QE1lIgWa`7tVs8)T2HRjhGV%fD2$dTnYEWt*}-j2zTKaIH?H%@Q7vvz_(yC zy!JHe;U8L14>z7gJv^rs^)KL7z%lUGa4OsnXTh;;oadR*$UTPuc)?EyfVaZEa1E>- zA_yP1BLF^p9s%&xpAi6iU%&?7*DstL;)AY6oFVD<|FsJ$dYirL8dE6O)%imz7D7<^*!8A-a* z2&o4TGcKU#2tg|wpLR+s)w6h7Q5w#os0i&$ssZci0{AOE0Fx+SkDg`F1Tddwfqk?J zG*Qu>a8^z>v|GsmHjoqCPSRdIyFmu|fHjm3{z*n~7ZrnPWCNSY0bU{}*h^3Q;VS)NGF?u*sCh1tISZD zsWMmPM*6%tNGeByva@~jTnT!2&@ts4sl`3}n|n6gJ^P0;JI(2y4M=beC%I?)m2nYQ zG}JxdmbcEe*5PHYflT*!n4Ea3#h=EX36$e6{3XgUouOWM6-c`htr@tGv1Gck8UOfo zUC}ywiK}kFb(Gc>t@;0*!_*b0@w~0j*{(Q0&znpoD(Q&#a5?m9mdHY>uscrk<|$WP OGPQTd;X&2(MEnOwl85*J diff --git a/tests/test_statement b/tests/test_statement index 5d67d15189fab59d0940b151ec02cc1138668cc9..4bc6b75bec031f36666d8ec163c68cc6f311fb76 100755 GIT binary patch delta 3697 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 delta 3506 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

  • 7B*QttOj+fzj#V`vV>Vo(r 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 literal 33216 zcmeHweS8(g)&C|CKm`)5C@RXLL_j456sq7$5H8**ffNGb>-Cac;A)Z^?+b#8Qc)k$ zn2J_g-`c8=ZPm7xs-;S;MraAXRAZ|aEl-VoP;VNvsZxm+&F_28oSB{7+^e?F=kxok z`}rhi=e*6CGiT1s&hFm5CNyVuVL^eTj{(kU4wWuGKw&C`(6&lW04ki5oMQZUozc!9 zlm{|S(JK@HRUP30emF$%geJM42t5c#37>}ALV_fh?`SJl6b+pcRVKM2I+bz|{{48x zr=g~s`YIING)&4Dk5qUKZ8`Ey(}jxO)ZmAYOS{_yYPmwNk=#8ZcaO+v=n?}C4YfbX zC-k>Y^abHq62hS&@zOz%&lhviaRRVH&>9Bos}TMmbVW`>UEhMY({=w&ebpk@J69sk;t-!L?epPWI7T78HBn_6HaRDW6@+J zmP{s+3f)NfNM%h`q%M|>EsLkpv1Cov%=$!QtR}joo^&@v>+2J><&j3kmxrq^nvO-% z@rGC=)0m7cg`9_3nn*T8(?F56kyQMOSREDO^|8pZSUOUhXiUc%(<$KU6U*>FlZn@n z&GE)%kz};7F3|v_r>-$}d89FMc_fprbyAnr$J4PBq+v_qjdc)888jgx>DbD&AJdqD zm$WFmP#01?WV=A6niW=1BLop7Q#_0A@jO~JUZ4-6kZG_+}S zo(r#+U_{sJh62pQe+09h*B`t2+gJ_^blwu&f${h-nyq(9Idf=yAJYDjRG`;;dOcD7 z71HiFD`h>W@s8lv1n`|9#lJ3qA30m$*9Y(=XDa;d0epqv-OChR*Q?8I35BP%j=kR5 zX5sC;++pEqy`qop7XDz31nji%G*_F0CM+C-@rTrDjv*FaT*y7f_R;kA#5c9Mlh2b-h9!tZOajuW=<`&syE3qRDtFShW*Ed0e5ez=8S zZsCh9e3OMQvG6M`{QeexjfIyGWa>H#Kf>Z)Z{ZKJ@V8rdTGQ#{9t(enMgl%y;SaU& z8!Y@`7XEPyudfA(+-BhqxA?bN_#-TQhlL+);kR3O*TQ#N_%RkfYvGTy@I4m(C=1_f z;m2BdN5&(?V5x;4V&RXr@Ff<0yoLY2o_<(-#3$jkyM}~YihdqJ_+H!C zEv&k4%5y;XmA-)g#iJ{5M&;#1>+0;oQM#GRG=#f4xV(wVG<3V#xcmr}X~=eM;POLM zrlHz(50~$wG7ZtL^<2J_%9M(_)^Pb2DwCVKnz;N8D$@|{x|qw?QkjNkS2dTfpfU}~ zt_m(EsZ2w$tDMW1P??5cm&@fPRHmWVRl?=-s7yny%i;2TD$`Kw>iGsLgh{_ zpFw3BT3sDnoN-b#~puOp-e-otAfiPP??5QS2>seN@W^KT`rgZLS-64 zT_s$8gUUxx+2QiJ)cthpQEx%w*FgjU*m~;CP!Mh{`UZiMd($Hj znn!?%LUW(K&f?K)h;NHP@JE?{%6SAPd=_r*2|x4x>EUO32ZRf@hF|_HeIOLPeSuOi zq_1;n@#tBeJlVJA)Wad`WKLKZUVG|ha5~}Ux6{MIEvJ5ldizFf04iIHwr?%k4Mf3( zTReMVM}@Q0E0eyiW#C;19T-?{xOsIp+#c#Bqr-b%T=nnMhHu z5a%EFdQwk}bDZ_hZty*?Fl+=p^;Fg&p_0d1Q25v{% z^cq+W|8K7gw+t+$tVyn()P}b9px^*z8Mcm?qT0M&y5(Yw5AgP&TY6Nt3{>@(s`|ew z^`FN&+p{ZF{XOLD6uiE+w}89l#p9u;b;{q4AyCvSQYymQvlS%Ox-bh*^*qIfKzu1? z1M$>)CH-?HT_~Q4N}YvPojW1KUDmR&w=R6_f!x@1QFb`IY5Kav>*J#L*p&9{k4w0r zR{Tv@m7bz1)sDVgDsBD5bM&EBEG7_DV)Z9w+~$8y;5OecZN5?z%pnD>BOW0%$1x9s zMoZN%JXJqasx~N9H;XDt6y)dv%a-9tRblP*l}c=t61!H!)`{42AA3!B26@+u7282C zQ2SBIH<0=L19Y0wewfn!Q|5bl(;cF{-qQZD6_s-lmExd}CqiZGls6EN2#U3$;Jc#W zSW?hB;v+(P4yv+-#dyy_4=YtSDOKA=)el8gXRp`N_ecRUC?$)PO6puC^_)mOBvKDq zQukt>%I%+@Q1juRONJA)6WCcw`#)hNn%ByFFK_ylXrE(ge;!f0wx>Yca)6TCqU7qt zs$YxTftK7j_|lVmgT_VclolmdBXZA(+>Sk-51t!q`rrpjXps`?BTpcm{8og1WC`5{ zA+NFqC3l39J6I}vR^$?v+_l~~K1m66!EAVBvUucoA~ekss`7cnQF1?5a#x7l%OY0@ zxuwE{2qf;r8q~SP}UnNvB|$8H>&%pCY104kc*k-jS-72jLv}Z#wh6yy<59>whAdw1NQfCkg=09rhJg<$VO2I~@ppW_jZ9H5Q47L>92O()= z54Eaw%GZ_9EmG?k5&Hdyo@3q~W4G~fC0D8B4iJY<5V<=oxhcFNQE_sulKP60`iV$Q z6sbB(>U_*068qUEmG8N0vAYZNB*_y|XUkW~^{AED@R*r;n*yQ`d5NT{VF&nl@sw2Szm zZM%~m4A9|Z_T{>}ZXtZ@!k%zTrUQm;uWask0w`w_{i7cJ9@^6!+O>A|E+>5sck}ga z#kaK;Z){uJiM*d4M7ZvuBunf!k<(g7e9Ard%u`sKIGo|Qw(Px@OBZTKb??t=A$$g* z*wVlvXdlR#MUacu27EePd61fxHBI{twV;KXX02iiF&%QEO^fr>V4>w(?^A`+;x}=n z=VSRAk*RU#;~I`uvm$!3#wSMxBt~mW(IEkf>N(RE>N#9UVDa9(aJydIZ4K?AzCzDa zyE;{uZ8zsK$6N$=jPSg+;eK5R7sZpw?)nxA69g$}HPuB2kP z#?Nr0VwedJb%tAqHTbEGidqWlc2LjrQ|Uq$$_I0Ib{BE?uM6#26Wdduee(gXaEmvF z_84bW_?*#P)iI|zw5`8WMk%L^06;jCi#n8xwiy@gQ0@MNQl96cD&I<3T=a8dr3Ttj zvIEY9^;dD*?AX|%2(=*4aOr(&0Exqy4=KV~AZ%m8Kq1_$2$Kwde=7#XCM9>2B4XHB~p(;AHSfSflS2f^=~V_UQ`cMdv+0(VT$wy z4Kco;6%B*g%od$gUy38I{L6_k~T)1albxC)@dSO|+i~4&Tg1@bQ z+RDO7baA&`V5dNC>(2ssaLaaFeUlLYMNemnD8i zLaigBiZyF4cV9=w=PXcs{Vb&y!pz~&@U~R;l=Pbp(}tkCbhuW|2T^Rp+LCsnEHfgCH~(LOso!@xQIP1pndq_Uz+OhaM~F9=yJL;Cl3b zxV;UP)3sh-dStkLGZ%RJ;9eT`USFR#pG3MjEZLN2;5J16A25`Bm&n~{zDXjkNg}di z<7LwW(0pW5amLVkRPN6e8-{VNI1yeMr4)Em$*qcJ z#`vKa^ItT^|AY%#-x%i>Z4LFQIYCd{kEmE+$2>;!5?wu{r9roW2nkBH%rJgG9dOfO zX3F)oa|=?nipDXTf45ec*`F#_NqnaC-yf(p1q$gLz-bcbye|oe2FY=xlJ!Wct zQhT&kd#^SkbC5WspnLK9?tRyrd11}!cb)Vs&0mB7RjxS_C`@@H9>WH7xVhgoMHPHP z8f{ft$^GP@+|v#0hR_U!2-49B-D+}T`B zs=QGb>!PP%A;3RLrI4=dqFn#LBa^ zm4a-~-toU|WpB8>0;7=zRj9YUVkDhb*{SPD^MnPz9(NA)=T#)2H{

    (apKhhQ0<9zN1*mM^mLr<_0s)YxBbI~B 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 diff --git a/tests/test_transaction.c b/tests/test_transaction.c index f3149f2..a00d2ec 100644 --- a/tests/test_transaction.c +++ b/tests/test_transaction.c @@ -10,6 +10,7 @@ #include #include +#include /** * @brief Crée la table utilisée par les tests. @@ -306,12 +307,158 @@ static void test_transaction_error_state(void) database_close(database); } +/** + * @brief Vérifie l’exposition publique de l’état de transaction. + */ +static void test_transaction_active_state(void) +{ + Database *database = NULL; + + const char *error_message = NULL; + + database = + database_open( + ":memory:" + ); + + assert(database != NULL); + + /* + * Une connexion nouvelle ne possède aucune transaction active. + */ + assert( + !database_transaction_is_active( + database + ) + ); + + /* + * Une connexion NULL est considérée comme inactive. + */ + assert( + !database_transaction_is_active( + NULL + ) + ); + + /* + * La consultation de l’état ne doit pas modifier l’erreur courante. + */ + database_error_set( + database, + DATABASE_ERROR_INVALID_ARGUMENT, + "erreur témoin" + ); + + assert( + !database_transaction_is_active( + database + ) + ); + + assert( + database_error_get_code( + database + ) == + DATABASE_ERROR_INVALID_ARGUMENT + ); + + error_message = + database_error_get_message( + database + ); + + assert(error_message != NULL); + + assert( + strcmp( + error_message, + "erreur témoin" + ) == 0 + ); + + database_error_clear( + database + ); + + /* + * L’état devient actif après BEGIN. + */ + assert( + database_transaction_begin( + database + ) + ); + + assert( + database_transaction_is_active( + database + ) + ); + + /* + * Un simple contrôle ne doit pas terminer la transaction. + */ + assert( + database_transaction_is_active( + database + ) + ); + + /* + * L’état redevient inactif après COMMIT. + */ + assert( + database_transaction_commit( + database + ) + ); + + assert( + !database_transaction_is_active( + database + ) + ); + + /* + * Même vérification avec un ROLLBACK. + */ + assert( + database_transaction_begin( + database + ) + ); + + assert( + database_transaction_is_active( + database + ) + ); + + assert( + database_transaction_rollback( + database + ) + ); + + assert( + !database_transaction_is_active( + database + ) + ); + + database_close( + database + ); +} + int main(void) { test_transaction_commit(); test_transaction_rollback(); test_invalid_transaction_states(); test_transaction_error_state(); + test_transaction_active_state(); printf( "DatabaseTransaction : tous les tests sont valides.\n"