From 3533e8b119af32a81ab294d3c791ff5cfdf6f1b0 Mon Sep 17 00:00:00 2001 From: Jon Evans Date: Sat, 16 Sep 2023 22:37:12 -0400 Subject: [PATCH] DbLib: support columns with numeric data Fixes https://gitlab.com/kicad/code/kicad/-/issues/15662 (cherry picked from commit 6f9af10912a037e2a1de7e942cd8461dc263f2c3) --- common/database/database_connection.cpp | 35 ++++++++++++++++++++++-- qa/data/dblib/database.sqlite | Bin 139264 -> 139264 bytes qa/data/dblib/qa_dblib.kicad_dbl | 14 +++++++++- qa/unittests/common/test_database.cpp | 9 ++++++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/common/database/database_connection.cpp b/common/database/database_connection.cpp index ab9bb9ca87..877327c970 100644 --- a/common/database/database_connection.cpp +++ b/common/database/database_connection.cpp @@ -435,7 +435,22 @@ bool DATABASE_CONNECTION::SelectOne( const std::string& aTable, for( short i = 0; i < results.columns(); ++i ) { std::string column = toUTF8( results.column_name( i ) ); - aResult[ column ] = toUTF8( results.get( i, NANODBC_TEXT( "" ) ) ); + + switch( results.column_datatype( i ) ) + { + case SQL_DOUBLE: + case SQL_FLOAT: + case SQL_REAL: + case SQL_DECIMAL: + case SQL_NUMERIC: + { + aResult[column] = fmt::format( "{:G}", results.get( i ) ); + break; + } + + default: + aResult[column] = toUTF8( results.get( i, NANODBC_TEXT( "" ) ) ); + } } } catch( nanodbc::database_error& e ) @@ -534,7 +549,23 @@ bool DATABASE_CONNECTION::SelectAll( const std::string& aTable, const std::strin for( short j = 0; j < results.columns(); ++j ) { std::string column = toUTF8( results.column_name( j ) ); - result[column] = toUTF8( results.get( j, NANODBC_TEXT( "" ) ) ); + + switch( results.column_datatype( j ) ) + { + case SQL_DOUBLE: + case SQL_FLOAT: + case SQL_REAL: + case SQL_DECIMAL: + case SQL_NUMERIC: + { + result[column] = fmt::format( "{:G}", results.get( j ) ); + break; + } + + default: + result[column] = toUTF8( results.get( j, + NANODBC_TEXT( "" ) ) ); + } } aResults.emplace_back( std::move( result ) ); diff --git a/qa/data/dblib/database.sqlite b/qa/data/dblib/database.sqlite index f6f15a2122c198a21937d6c0c752f3e10f396ee6..4d9be4e18c52a15fc5ada07df84a6cb84287fa20 100644 GIT binary patch literal 139264 zcmeHw3!EHPmHxfe@9IY-Bq4+l(h14HKpu5(-FkFFfH0W^NCIK<<`sry0s~1V%uINN z09_qc5ZRSgTyR%iR8Wk(!JvYGfQkZ&3W^AdB8Y&1h=Pi2%}k|EDml3S-_8ym_h0ja z%K3U;Uru+?^}HAg3jKK>e{aE_3gb?iw$F(v%{)Y#)6QsiNXInK28XN^bQdG z$#;t1D;&nAt>)#*MwTvZW0h@{b4uGPGvDirlgE<`BpFCDkYpgqK$3wZ14#yw4E!I@ zfbmvZ{U84;?)KNKwD8N~4_21)zW-M6OX80Ypy2V1eNm%4GdFs|1b%TxZ~H0hI$GK{ zwy*B&?dtA4^avA45p1AO7K z_H~;&0ET4RH>}?2!DU_RdfQL!sJ6BDc5XNo{o?A9u5}&V@o$^c*|Dx;b#Hg)>gtkn zH}3TFTH1R$rY~w=eMa98UEF!zPM=!V(cQVWvt!M~!jVTWX`R>FR-My2clOc+ORDCS zYD-s7Z*{|_^}*Myo>E=d-qTZE)3qtca*(A(ZAUJg-L|qizjfsSQ3{*&X6xYW=y?-3 z>)f!W68oNz zF-BM4Q!>%`v+)Pxb>n5@1>;%cDdTbDyT(Jt{l?wKcHjA-a z->t)g>$t{w!F8X;>fk!Iu^_na-LQk}n8v=rb+1M)xQ_Pw_Q3Y^R|eNn{^7xO5C5Rx zI@})_T!+=S1XrWJHn>*m#{}1M-3zXz`h?(Gtn0y5?+Gr2zBlpnt-&QXEx2SyYr$1B zo(ZmOg7NA=&gqwi!iGj=SsV}?4apWg*iF+!oIIr+rF-+<1lS)|Homahxchq~bRi<1O{FUrDTXULNI=3pEWz`jK zTh$D{sQTKcuDYncKOe|a^lQT`4e{@d=P4jp-85G?I}#O8>|+=v>e!bq-uKS7dQ)nE z>8$2avFFo@WytA!KJEFlg?#Vl6VFgze)^uy74|@W;uQM`!ZR6sO+@g}cdh=9!-fq! zlfet|y7&u^;_I&O&VZEhG&9~bUJU+7K9US18AvjaWFW~vl7S=xNd}S(BpFCDkYpgq zK$3xfv^<2%Gwah2q{pVZwTHAS`ws6VnTUGRo|Unq4;oj`weCM+%Y; z)!=7V#pJ4(F3jcCzTY%yGYC0sk>(kFpQ$bvllwkbZyJpewa5|e=Q;}GD#&rIH;u%I zngofCK!}POL85zLL_LB;hhs!tf<%X5L>+=e4UDKwkZ1)Xst6J-V?^oI{CZOfBTBK0 z7BQj}JClwPrP!GY2vL(_XUbzl>2;?51yl~>O0hX*F`^WkQwAeSu{otNq7<7`3L{Ff zIcXTt-I|k-|NA3e@H79$h$rMOBOb?y?$(^d5X_>%&-`0NcVb^!Rj=x)W9 zzcMwDXB-xniFvF49Mh)Rkze;E=?dc+&3g|FcKo4gkvY|Dj0Q9g4G6D@K%Jv7LhvrC4lRFrpNT z?co?vip6#|MwDW)Jq#mCuh`a`4#9|0TwTw?h*Df#AB+*DxVoN+5Va{5{23TgiUq%h z5v5r0J&Y*Dg70EPDHePOBTBL0+Za)b>rsUfrP!G)j3~v{CT|9m9vF2xRZ0z$M# zvECk!5v5pfkHd)4tGD&0l?YLfVzFI;5v5pcmt#cf72A5#GK?s_NuYmCuoUA;v6L>s zh*BH|7Gp#y4g+l%QHss!Sd1ve=ClYSO0hW|gAjEoHm9R8q7<9cLX0TI=ClAKO0PN9 zn~uVWQY`pKVnitx{39@;6bt@5j3~u|KNllPui)=K|L-*Y_n-e~kM61fKzaT@efP8r zlVT0)L5K>9tLtuzD8*uXCPtKEvE7IfrC4mcFrpNT?FNh}y<%H$T8|JVdBAoZMwH^} z`V5RH#np8uMwDW~KMf;FvEZMI5v5n~`#00pVq7WK{0@vL#hSkcBTBL6uil-gS);h4 zatcP2V$E;Ih*GTiCu2k@P9v)@q7<9cNf=Rz&FMspD81%1F#q2lKmXr<|3ACGUjcAf zZf*9i>>ioZ(qBuDOr5UXtL@3xkvjihZ`!hZu7#xd>a8P6K*FL}V(W+$kgzD$*gB#G zBrJ+WwvH$P35(?G6p;cF7R54KN3?(hNx_dgA_gQZiX%WBQ3Dbd#TlTE$N>q9;t)_r z^ne7(!?ksWbyJEx>Ozbt#TIn|MwDWQIv*oSvFvZgh|*hK*PG76h|(+i{d-jBVq7Vf z{c|v)6s!K(2vL$s&u3voDc1Z=7*UEfzZWA)ujUWT|Jzf>vdR}LT6sn3#!|X?oPM*O zW!noUuUArf*9ZQmeE(v?6c+yU+jiraB_`E)>O=Y#q@g6b{9@T1Uix z0yhMLV%l{?{YQ{IOxe0hP$Y{# z;z}b(Dks+wTNM7z(BNWNXk66M zjUXtXyz~5Dez&}|w5`O8%k>-dRAFWQrhJBN&mB*5{znA#g-fzzA@V=MBgque{}CR^ z;))0W36ErPMHGO9N3ysg5)5-!QzA4CF3xFiPvL<2~;BzJ!h z5gdFT!Wk<3P92%IRhXPK++^R10Wheg5-hPI%4u7Y9uQ^;_@PDBv;mm&5Nj!to(@2 zi>Q&T{D{$usFAGvh|`N8DVtnJoTx;NWaURpX+(`==9)&p52#;Qm3iec@`G2?j|99N|AI$%^XZ6g<=`W>AsZ+E&soejM2rNiR zvc4kPKa%DlRYd$p5|UfG*`pA@7fDh-xsDjVNRwWV z`tRreVEXSr{m-`3I{%M|fJmC>{}FjYN$|XC@NOld|08K0Rz(DWB+bLBhyswLc~}+E z|B*Bgt0KBOlICGmL|8}CJgkZ+>qvr!RR{L|5Op0%^SmnJ^CD@US4E6oB+c`xh|`Ot zd0rK@i=?Tcj98ILni|T8 zHI1aHp^SLbNSYeTh&hcUsG&SC|KFYk{Xcelr~nu$03hf8Px|}n|J9p(M4?)elz;OP znL^<&=HI@kP>h08|7Y9D>HqtPZiOUy63j<*fF#NDsy?CvBuQ#2_=paWBzdyd zM|6NB$&Lb!RlHhsOfoTOXe~~1Q zton%gizInu)kn-W@DT&+{jekuDnutw(@x8p~~HrTPoL9 zuC82OsaG~tIx8nuj;*v-YL%$)WmLiwHY>*ZgSpDaI8zOQ^o`TFuF%2$*xE}vUo zUv4iiEgxB)RTkyR^jPV^(w9p&l&&dVS-P~erF3SgqqMTLur#}5 zmzqoCO2bQ;;@ibniq94wFFsVfyLe0S+Tzv4%Zv5mrebID#Nx5V)?%$VwK$5c(>{%$}|B`<-|BL+N`ETXFn!hoBP5z_#59H6w zug{;HU!0$tujQxY$LIIRXL4`lUdla_do1@rZhP(vxliOioNMIH%5~;W$Q_eAJZI+) z$c@caay*Eomp+oZcsGq_xzWsb8m_NB&Q>Pf9ltxPRQ z9h#D<$*H|kMeVQJ>)LbLkF;-VcWXCmpV2<1U8frJT*9+$sPwF*$)8-_5%PW`+fw>8hZ?Y$G!)^W#0whutx#d>=6Kp zJq*BN-vJ=mw*d(D5CD^XYX=Ba`q(!CcY7?CSt5b{_!A?gb#& zJpfGhwFr1Mb~gZz-37p9Uj^W>uK=*wmjNhtCjg6W2O!y(00?#m05iC$E_~(!p9*#x z0FT`Yz-6}paM;ZNY<3d>#cl*(u^RwL_C)}KZ3AGkFGRqpvFibN?DGIz_Bj9!yAFWO zt_7gjX8~C3GXNy}GyuV_0bsKKjDTHZp90{qPXch+CjdC?KLFV5-vKE0aR3&(8h~V1 z0TArp0GRA!5l}UDB><0o6oAV<0>EMa3czMp08s4104(+|03`co0D@f(z+@kafK_9c z0r1!d0l4f^01mqZfXzMtK(T)UV6lq6x+3#5PLHqc54tj9>lf_v2q}`Y>1_TSXdC7GKy7AK`sQ*nFO)DAH-@R#MT6eWffvE9%6IfD3-Nx z5PSPT?2d)l*&AYe48&?Lh^^5O%RM0$qaZd%MzN@kfY{puVs|*i&M=5=17cNy*eXLT zOAw19#HJp_W~~6RmxtKRLF{B9wlff`G{ja4VyWq=v4y@mZ<<0c?8P3|OlG`cJa0T{ zJZ#)!+-h8FTxDElTo6qEYmDW_QN}F8H1;$0Gzyi!R9>z8BAETZRrzY=#>zF7k5)cV zIj^$5a&l#HWo|I}PpOQr>`}>--zvXUey03b`GNBG@)v@+|HI`*`K)qh`GoQ@<-^N% z`GE4+awVAhe_wi`^pnyfrF%=am98sYUHVX=nEz}3_55@BALYNDzdL_({xkWHj zpYO__l3$uXB0n=fEk7YYGM~%+Dfde5=eZx`zLEQK?u)rk<^DByaqgVl8M%{k$L8kb z+}we=ak*i+RQ3>b(9Xa7C>&)IsmH+yRKxa`90VOcBNlpT{TW!}yF zF7vC*k2BxNd@XZJ=Chf9%X~1iC9^TJI`Bt9VoK)5R-`mlQV_Hx%28ON#S~GlKn( zYH>s{tG}(ktp7~^zW$(or@l@9WU%|ORXyG$~1Yj(z9wc9g;sw9>O`4v$uP zR?X(oO3$h(9h}PTIpFe!K0O)RWo_C(zCo8k5+n?=kaKzXL&AV+Q;PDdxxcqnk z4nGcn%~t|Yd<6iDF9#s`G5~@v1z_?e5wL1}F#wOZ0dV=T035yufX$Bqp!m@MEWQwc zQfaHe*5PUWOlOGlVQR9aK z@c1DBTs{kc!w&{v^O*n?p8>$)H2{)(00egdnB0j#P!nwc9#;TdZUJz(1YmOkKyed* z#is+1d>R13rvfnflpP?rmyI6;z~cu3aCtKThaUjI=KBLsya|BCCj*dt5&*&X17Pxr z5eRDH1OOhd0&w|w01n?5fX&ANP<$T%79X2zZtv*$$)8CE-k%J>KS0U%1|awt04Con z0>L_DGysq93Bcu}062Uk0Gp2hp!gmDEIu57*lj0&utv zz~%)2isu1XJO@DXEC9hX08E~aK(G!;0r0p6z~vl(!x;dZy$e9GzXGt>I{+m63jo3X z48UZ6ia@ZF`ZfTMy#>H!e+1yLKLD`Vn*bF1JphZn0YI|f0TAqU0494a0>Mt|s{lOq zTL3P51%Sg|24J(704Vkw02X@@fMmZ0AlM54O!j;Pf}PY~0r1#!09^J<01o>F0GmAv zK(U_#u-MN4NcIc>!JYKOgY{wn+L_`G^mYMN+KVM|^-RlAa1a;sa!nl-2eTA0UgQthSH%09hnuwSB|~ z$Ra7L?IS)w7D-ucAMpXQNXlyah!2oOQdZkXe1I&1vf2YD6}-yW(FcvI=UVq4F=qIv zeBT=c7D;7o-^G|xRMz$#j44HBZQn+il2q3A6~>gFvUYG%!NQnQbbs(A#+0J_gD)_q z^sLo_XWzt_Qgnatr(;Yhx4u2go9+tnD9ztXN1YYx_rIOi8Y+ z7h+6FuB;beOi8Y+=VMIit*nFP)KM5ylDj`gB1{PyKL^!I;vk{JYQpebYbNPJjMK48Sdtu6jOV0%XzDt42(KESh@NhzXEIQ?D8^ z0kUZ7RU;-q7EQfs#01D9t5=Qq09iEksu3R`i>6*R;sa#S)T>5(fGnC$HEWR-3r%J1 z4vZXw1~>&{N^%A`8DmOvPh}Oxl;obuNf=X-dnzX)Oi9`)`zK&b zN#0R&JjRq{AJG$Ch z%;2rJxouNTSDNz|%;`9*b9KjzwziI*&Ys?`?p2Ey&Y97+s_$!73CHvncJy|4uAaH; zr-LKmtAuIV1D_6VhpaA{TMfRo8vM+vm|PXpg}J=i_fsZq9{Aq&4XZo0Nb`)o&s3L- z$$g&-m?G{v!TD~AOc86H;P5#`rifupa2TEidgGdG{vg7Ad3KkV%7a^%0C|?OR@O-n-Qio^{UUqm{M$0 z{<#=aifzh22V+XHP5EbIOewZ0|169t$u_kKV@k43^qkTwi{-ytK5f#EZ-I8}w9RW&Wl>$v!s!v)i>hg8BcXzcHD=51$G~ zYQ$M3kc}g_SZyE?U6^IE?pwmZ=Z14g=On?FrL5fTfYn?#UkRnsWS|?Ck zq{tMp)(PYwDKbT@bpowQicAq}oj^#FB2&a#Cs6sM$aLiHi-16alp@m+7*mp!e-Df) z$;v+*V@h(7G7Mu%vPT)aGYvF(DgKM9U`$E&s4~WsWREIgOiA{rBF2pf>qRacVa>lTsLQ6vwmHV|nYMe?v}1CiEI zBoC`L5NRD{k$jyZ(mKi_Szi%p9c9t0ufaYQBCVq=k~07zt)ncGGXNs3qevcBZ6F%8 ziljzOZwlw|Rrj4>ry{3l^dNf!V8 z5T+#Mlp7N7lw|QAk1?fJ{G<85|NVcq{lB{dfX@7nXe%p{YGn;X zT1SyQtlB`Nbri|NstrV1N0B_N+CZdrlufd@B8r;ICRtn&5g=vLE3U!(kB9&%o8;~f zA_AmH>Zvpk5g=ug8~_jzAZ3#r01%HFWs@8L5RV!~@>p#H@u*RX|{IpyFV72^D&NNOoJ5a$;~P)m8>{r^o?aQ^?g^4sMFrB4-qS8Ua< zD!f!UB!5NjxtyE*VCLzJnQo+>NHuHc^Y8MBY||hQ`PZ8pp)gK)C$nLDaHmao)$?1m zsC|t&t>&E*TJU|w4dr<_% zo(ISxhA)bs-tz!i#PdZFlzbi_i`c#>f~wB}*>L`6@ALe>HPpt5jVFUU!#QN*N%PiF z9w$zAP>bjxBpWK^#K{h75j})tLy?>~*+DI$hmdTjlM^R9s73S;k`1MD;$#Q4h#o?+ zp;}Iy?4TCWLr69h%!!j7)FOHa$%dLaak4bGftt65vN>_GgW3if!pw%QE-|u$JBT`j zWJ6<@I9aM4EOhpXlcn0hLL-_uS*jf@^rDHArP{$lJDNCIsvRtJq=}QI+QC9onmAda z9jp=h(!|LU?O=`2nkG(`Xa{SA?ldv7gVTE+x(?O|-D%=viFU9?XiyU;OR|Igz2^T= zy)Txb!JXk8y4T*;P#Y&smS_pu8p`9u$r3F=TSJAM7}>!c<{ZM8K`4?FCrh*hZ4GsD z;$%sdpnCJxP%0-*mg*upRLhBzrMid?1#{wLsV<^J&73${s*C8**d*Plsg|HnfF@3sWC;r9|4_>_Ms{$gI)|_t zgn~J7vQ!t*p=M5;EY(GHD4P=}OLY+)y1K;4Qe8xc#x8NPR6AJc?Gh(TwS$HBE^)F{ zJ6P!O5+_TwgM}t9ak5l9Sm^T-BRe?d)eaVV zzQoB=?O>tpOPnm#4i-AU#L1HEV0v(r|I@i|Fyjs5dE-grVdEa-R^wXZD&sQa0^>|$ zjj`M~%9v%C#(u`0MxpYT%Bz)MR35KboZ%G^q=GNm%U zvPUITeyjXa`I+)#veqWs}=-Y`IeArQercDE*}L zNa^0vZKdl9iy0Fw;>L{%!%`Y8N5~WF{(Ivh3PVu$kFN;qUA1dBeys7x<;+4fq zikpiYitWWE#d*aU#i_+=aYQkzzpcNl|4jeB{-A!RzD@t6euchOKU+UtKT%(#x9E=E ztnZ^6x>k6z@aw`;g+~kb6>cwluJG}~<%Nq1J%zP}m4yX`LkqGnxv*EEnEz}3_55@B zALYNDzdL_({xkWHjpYO__l3$uXB0n=fEk7YYGM~%+Dfde5=eZvQNlZSH3?vyy zGLU2-$-w)Xfl_L$7U(C?AOK5i1|YQq00?b=0H)Ry0aeo`1Msv-09+Gqeu+Y^ALjRGLGkpP4? z0)VOQ5dm4#h6C`lVE|ms0N`j90Jc^JptKSIODh79nhro{1pua&kASFYIRKuP1>kBK z0FIUhU~4G=O49&X8V4XX20-w40hs)+5io1~9RMEx3jmk@8Gyt81i>i``78UUNW3PADS0l7S=xNd}S(BpFCDkYpgqK$3wW%s_Cv zU1;?hdwX(l=1D_%vqI?h8YfHjHjvQpHAZ%D7D_{y+0gSfPL}FzAffGRoGjJbKtku& KI9Zanf&3SK@aGi( literal 139264 zcmeI53z%NhxySd~-~F=p7D+@zBRk&hwn-oSwYxv*&5I_xH`0 z@z0uA@7g=_{{Qp#o!!}6tt{#4Ue?}QakQ;8#v6;0Dh(f>z8|KIR&KvbkRK=e zZEj!D-qG3H)!hSCy1BJw^8A*{{K->hw^T;JCq`687Yifiws-edW=tJXnBTJh{9U6L z=Cm(gwWPhHcU5<_d!tw9?hP>S=w*j>E$x99rge4ouITPu-n-FjQ>#54-JL6XJG+*{ z8~1Bpx~dBJH!YARFOQZY9w)R!MU0-q=EN~l# zIum`<@_pYpJ|R1(W!P8!;?`gxNJjIjP<{n2{gdfR&4deM5;dcu0t zdcgXbb%%Acb)9vkb%}L>b)NN2>vZcRt7fgWR;~YKeZMsMNLCtLzy{bFdsT=R@2~t zgZmF0)I53aSli}vR&}@cwoh-J!N>}+hZjo`aKQO zPSdRU<`0a|jJf6Smp&=YE`G1@QDLwAcXIFLre@F0yq(!IeOBs?)NcA2>=oumZ~upU z)S3pFLk5i*S~FU9?mxKSzHgZrZqO`|BUyOx*01wz=(#?Qwy>Cc3C)%i5xUMP>f9O7zUE5`EbUA64PwxxKK` z_b(f{7R(sd3H!*t&r}xjQGK7QHEn}w6*RRD#I$mnS_fcSZJJv9BU*VtQ|s24R-dNU zewbE|rq-=6tu9Ti7N%9v)M{c{B~7gcrj=;lDq~uS_N@}8m1y58Vp@sztpcLeCfc|1 zm{y{FD~D+%+PAWpR-%0?gJ~t&x6+taqJ1m+tNhLGw``()EBgEW&9!dUx48I++#5z; z_P@C|BZ^gfo>{r@;*-6YXHX)LCd=$^DIrj_WP zGzQa3bWhp^)4JK7MB{l?6Q*^uJ&A_a(U?}EXX%|0tq#$%^iG&oqG#z*m{y`^>5-UL zqJ3*eOe@j8H3HL0v~LZ^v=Z%G6-+D9zBLTfO0;k7fN3S#w}v8G1<}5>J*Jgt-x`8x zCEB;P!?Y6ZTZ1vJMElmZm{yW~i`M;r3$ku5(LHG@rj_WP)Qo8*x+hJ+v=ZHuCSzKO z?n!%MT1oCnwWd8Vtwhh#yJK33o~0*YT8W;ecf+(2JxfnSv?`)~YXYW~Xx|Djtwj5l zk7*^^w>(TM(Z1zkT8Z{8g=r<)w|3<%{|`deEg-rl9f)Zqx+figX(hTREkd;VME9iqF|9=Rq=lGPl6z9EX+KOW(X;dd zOe@i|^n6S!(X;eCOe@i|bStKnXy4iw(@L~&&Be45?OXdGT0NqDYi~>|(Y`eY(@L~& z&BnA6?OU@jtwj6QOiU}$zBL2WO0;k7g=r<)x29uSiT15&m{yW~i`M;r&*tmKInh0- z8`Da3Pg;p-CAufAz_b$Gle#diME9iSm{yW|QmttjqLu1=>QYQA(X;fCm{y`^=_4?$ zM9uZ=+qJ8UdOe@j8wFJ{jv~N{0twj6QVoWR1zSXh0Ry!d24CpXSE788y zj%g*@w+_X$675@Um{y{F>kv#U(Y|#srj=yhT7Umv`)dEc=Il9{H#57Xzma+=rSy~8 zvuvDJ`#-e*t2NaS=N#@3-HB?5bq;rkZbdc3JBK?&_o5nNp2HoYn^6sM&*2Wy-Kd7x z=WvJQb`cV_Jze zu;VbTMEln|Oe@j$bu6ZpX!lx+X(igcj={7N?OjJ>T8XxD^*YE)tFYI zeQOn_m1y7U#k7*_TkG%tS83Kf^HSqeV|Mw1(g&rM;<<&l3cKge%)OHHvR}_Um$B3J z)RUKw54u+)FaH>~gqIbqhlL za=1@*3qlNYxKDKpLL76rPjw4IEOR*3anu^(nZrG*hiJq!hkH~H(THmf_ozMwLTq!m zNA(bmWYutwY6nBYYPd(WgCS`(+@spTkhmJ|QSD$zUJduCb}%HchEp|zt|5sv+@;#V zkjNVDQtezs0{{A2F%n>%#Lo{NVBW$XN zXv8&#Q=LeyA+|X@pn8Z#vTArhwSysHH9Vl&!H~2X9#HLINL&pMsCF|k5!{vUD65oBjk5xX2gb`}-!%Mny(QEP}{ju2G0AjC082&!8UVwocZ$t@_l|3^G? zgrIteMoe>rpn8Z#Tyun=`WOhY%@Km?AsWf55rXO=8VRcrREJV)NLr2HR1eWeT#evV zI~bBzBRJI#h6L6Ks%FqNB(X+tsvQi8tPz}Q2SYMz1gF};kkA^zsdg|VwMKBN9Sn)B z5mYUqYe;U5ut|2XEp`8oxaA14bE$}3jvzaiiumOSvU913VU8d>mx?&%2(ojjh-Ho- zJC}-h<_NNLsfcNgAUl_exaJ75bE$}Jjvzaiie%LYvU90OSdAb%mx`p-2(ojjNL-B| zJC};&)d-q%snJ7WB(O%1wS`6!YXn(aXe6>mkhO(IGHV1`TWBP-Mv%3IMpA18SzBl% zwnmV(g+_8~1WjA$Ep-1MBDOh#>Rf7w*yaeTbEzR>nsrG|)Yj-Wc18X~qig6dpq zh}h-`s&lC!Vw)qV&ZUNkZH}Niml`6rIfCk3YKYk82&!|bA(C1nsLrK^NNSCsI+q$E zsWpP?Txy7<)(EO|sUebDBWTX0)|x^jwMJ02hz^m|8bQ?}Iz&=y1XYXZ5J{~OR4t-I zB(+9RwTKRp)EYt7A{vRU5o9f*k=zRf7w*yaeTbEzSc zU?Zr`rG`j?ji5T08X^fcg6dpqh$Pqus&lC!l3*if&ZS28|44$3plT5vA_+Evszr2& zB-jY57SSP+U?ZqnM2AR%ji71~9U=)ff~rMyh$Pqusus~9l3*ifT0|G4D8DB%*J#$q z)|=LI)??Pa)~(i6)`iyD)+yFHYo%4S7Flzw$(FL3tf5vvD`S3YzGJ>d&{?$uPR?yKD&HMd0lyBxmsRSo>QJ&R^_Jh z&~m?Wru1p)ozjb?CrS^L?kHVXx}GV>qw5rruI=HlNsihQ@#+HVc29^rN&x`LD zUoAdee7Jab@uuSC#q*127Edf5U0hadFD@v~C{8N!;;7=_qEXZe9~NFKJY9IGaA)EA z!X<@s3#S&2E37OmE-Wm}EKDlcg&hmq6bkvz^6%zf%0H36KYv^P>imWIv+^h9kI65~ zADW++pOz2uyXJ@Gx6WsBpXA=kJ)e6lcTeu-+!eX=b7$o0xz)MO+(Eg0a#M0DH##>Y zXXaS;qwMS1XR;4x@5wd!$5a zRBGE)N&iBBUw=h^N`FwlL%&wPSU*QUML$;W(ht)Y=zHlCqdz#Q-v4C~Wb(_C6-ZX# zf3O1O)DXS3W!~6mTvK}jKxn@P;M%VMZ0+$F>_B@Az}J2W;AxKnxY{ECN_!YUY7YT8 z+Ajcv_8Vw7UU>b{7EG?gX&4 zpTyt?+8qGCb~}Kl-3H)lKL$|RtpHNH1;Ej61`yhh0JwG&fUVsagBNHw0QlPV0G@Uo zfU8{#ptNfMq;@rcqg@3cv>yU+?MeV!yCMcR&@Kn?wI2X@+GPN)b}4|;E&-6*_W>O3 zVgR9C1i-Zm0c`DiF{nVh0KnJ23*c$z1Gw6E0F?G^0I7Woz|qbF5Zbu_T>DP|TRSHP z8E9t%_}W`*#4Yoep4Yr^Vm|+Nl7(_H_VHI|abi zP6klgNdQv&HvmUF5kP1S0It;mY%PpI1X>Ni*G?#U5%^De0E<#BBX%b@m`LhT(1 zwR;5AsuODYHK?7#p%zP^=2fWe#T#ln2s)tl4};okhuS?9YSjj{JOpazV5r4GQ1b(! zwhxHw=y@d6{{B#V3!!%RgIXvEdvg*Z(450~#M z-%!4^d|vsqLMi`6{{8$b`KR&^=I_W~o4+`JPX3hqvH7n2Vfh95z48`mDpWWSyL_iQcOn>{>xKz2@c&#aT(DLXh@&ipm=LFU!WZ!*8g{3LT-=KGod%zQnw zF0&%jk=ZXZBePp(d}c&uU?!jbOZpG#7t_B^|2+NU^i}EarN5c}xAf8JrRlbGYq}-v zr^lpsNcT&pQ-4bRKJ{Gcm#Lqnew4aA^_|o=QekRU>T9V3Q+uZ-r(|m9)OIN&rRg8) zujxQVZxv22oKWZ~EGaB1 z%r5Lv5QS0EACkX)Y&b7S?z8x$C%MPslb+-*i%)uzD;A&hB$q5c=}GRe_@pPfVDU*$ za?awDp5!)*PkPc0SbWlxw$I{|p0qs{pY){dviPJYZN=h~p0p*4PkPdJSbWlxwqWr| zPuiTtCp~G~EI#QuLBQgZo)h>iKIu7u$KsQo6Syos={bR7@k!4KB#TdaPT;Wkq~`>J z#V0){;4D7rIf2dMlb+)TEI#QuzR%*5p5uEgKIu8W%i@!s<0}@Q^c-KZ6E=Js9p7Qc z0|<5;0B7p}Y<6r6UclA@`0N+}j~xx*vNZsT9R(oSY5<3=0uZbhfU_O|n{~(F25cpO z&sG3}xTofE^Ctvn2o?s{*)eF@Rzn0FoUB z;IMW8!43uBtPQ|shr}QQb})d?4g&DlfdDQ$06?)t0Fvzw;IM@Ng6#*u*#ZEY&5ywe z*gOEAwE}o-UjUcQ1yF1s0Lk_SaM&CG!Da(+HVeRJGh+||n*rdny#PEm9l&MN02FHh zkZdY|!{kfMOE?B%1)>umC_XAAmCtz-Dd? z(VnOPd?o=r<^Z@%04T-*B(nh=HXcB*aR8i+1+dw!8zB0*JvIiwXS)D+tO>wnqX87# z89=g~030?7K(LVjob3o;vk@^wd*W~apH%=nHVnXJI{+v)6hN}=0US0YdAPly<0t=2 zR^b0<1>iqG!L|e7Y%qY$wv8b=hYSMn*){+k8wlXC0RW2i2as%Q0EhJh5Ns;|&MW|% znK4A?5CgzxWdM(r09;lCP^2jFNg00`}Q0Iod;U~9jPfd|^N0KWDNfTukT;A+1CP});l z>gWHF*c^wdFLj8-<~US+sY4_-$D!&=9U`$g4pm?35Q)uksQOZeNNkQn)t5R%Vsjj- zzSJQSo8wURr4EtU9EYkeb%?~~I8=S9L*E=SXw1->(Xw;@!Tkp2`<|yeRDG#K4--q& zmpXJYu|$2TLxqT?>PsC;Oe{%X>gebH9ZW3IWQ9;*Vu>azgd7t~G#eJW*|aj5!Ihe&LW zL)Di$L}GIss=m}A5}V^t^`#Dx*c^wdFLj8-<~US+sY4_-$D!&=9U`$g4pm?3a37?{ zQ}v||_r}ChJw(sJ#8N#(&&I@3Jw(sK#8N#(&&0%%JVZwiD`p^KsYXPHdtqX!J_eeO ziKY4&Xc{J#>SLf5Of1#MKvOZXR6AHRCYEFe+fw)cNNkQn)|VQI&2h;3QX{cB4q0Dn zBsRw(>r0Kq<~U@1sgc+mhpaC(5}V_Y^`%B)a~!h1)JSZOL)MoXiOq4y`cf}JdOTTQ z>MACd>LGeDCYI_Ux&sqS^$>j+CYI_Ux*Zcs@(>-}{~wBprTQ4C4HHZCG0-8HSgMbK z4o1XMjff5p!o*U240IqSmTCt(0252HgKeSv|2h(z6U{s?YCpW%)!J;kwll4DtnCSV z*6gX()tw#H39YTwp3a`$uI{#ZbEZycZR>ka8+UDgPPMnYvt#0Bue8l=Uu=&H{58=< zEnC(W{eWg={-vWbdCVsoOIaiU_8*qmslov2tOHYb|7Cn^?+&51k#h>AsGb0W_IqGFNQoXAsw zrq~dP&51l8h>AsGa~!h1)a#HQPu7?ESWGO@4i>IO#FF);J_Zv@w1b65V`7PRuy73~ zmS_hHkHW+f?O@?*Of1z7wh9wVwS)CyVyQj`>cPYky$1`sF|kxT*h)k!&4}nNb^njV z=0x^zG|#1VBsM3quOliJiOq@Z^@xf^Vsj$NBHYc)ABq|n(&57(C ziHb#Hb0YgmqGFNQoX8%Ns8}R6C$jG(Dt5r;JwCD*B`UT*CYEXk+Zq!~wS)D;#8T~G zTVZ0Ub}(ymv61~Q(f`0qOf1z7W?*8ecCa!gmTCtpVPdIvup%awY6mM|VySkpJSLW8 z2isEj|A=jlq&k;cM{IK>)w$F5$xlq93q9 zY;&YT^$?BN=17O?AsVsGkyPhW>xgZR6jTqa*cQcyia?}CY?dWdeq#8N#(kH*AO z?O;1&VySkpoiMRfJJ={pEY%J+5)(_cgYAfjrD_pfAAyOb+QEinVySkp3MQ6n2OEZo zCE3BY)crqVnwmDK!Jwzk6IZ{zQL?gC2Qc*obBMCNAQ9VQ>2{w}ITxuOju#uALAsR`r zk&-| zY7t#W5^N+@i|9I%U?XW-L~p74f5bLNQk_e!Bepq`>Rf6avCWZG=Ths4ZI1M*9--|Y7t#W5^N+@i|9I%U?ZtoMAwl7 z8%fn7x{f5+NU9dmbtJ(?QniS#BMCN=szr1iNwASLEuy#7{Xb%xqsY#sBDOh->|82h zo1@6ir6RUD%BFgVMr?DGP4y6s*ybpk>LD7j%~3YhLo{NWBgxLCBDOg)p!ygHvCWYI z)yF_cf{hHQJ_bS(Y-B+7F%XhqBLk|Bfsh0n8BpzDNP>+FsCF`Cr8W@T97T05wSm~?C_(fP-9T(}lpuPDZXmWfN)SCnHxSz#C5RrP8;EU=5=0Nt z4a7D_38IgI8i;L<5=0*ZHIM`wMRhKeRg35bl3=4~T10QD`+vkXM^T+iZ6LNeit1cy1F_9fROeC~h;5Fd zI+xl&Y;zRVxzq+?o1>`Cr8W@T97T05wSm~?D5`U*4a7D_QJqU|AhtP*>Rf6ANw85= z=TaL;f{mg&m)bxQY!ubG)CQ7Zqo~fMHjo4xMRP7Sy8lNKY!p?C=mwHtqo`U$H;@Dy zMb#p@fh5={sus}=B*8{ewTNyY2{wwVMRWs6uu)Vkq8mtpjiPB0UDPz~qTGF&^`Z5e z^|bYnb*FW`b%}MZb*goowbEK_EwpA@lPufX(b~o;n4g*NnlG78nD?8vnOB<^nrE3O zna7yR%tOt2<}@=fcQuEZTbmi<6XPx8dE+tT9^+=?3gdj^45MzWHad-ijD3tLhB8JQ zLk!bk<&Vm*m!By=T)wM(L;2G3dF9i}$Ctay)$;!3S>@f!ygafzs9Y?4UV5+ea_Py^ z1Et$b*OV?Qon1P)w6?Uo)LxojnqHbv8e6KA`j@iBPm6CCUno9aytjBu@ygbd zg;9lV3#I%Q`Sr((ceKLTn z?+KvvJpiP>JAk840ucIc09>C4VCxfNa05L6@O2-+(>(xJcL9{H0HiJf9NhsBx&Yuh z2e5TJ1{LVz0epQNfTxcIaP?gQls*PP>bn3qdJ}-qM+0zuX8>E@DFzwnqX2w;B!H*y z2;k}?0F*u)KNUZUYeP#{it&3ShHaVsHX>Gl0*21mLlo09fMPcQNOnDd z!>$7m>{GT?OE?9|CynN&uH#0if9B0FwOxz+smG2zDs|XO{rj?E8Ix z|DP>=pjq?GON~#B+2so&NIsGkNLCsH6p5kB-kpd5m5~!!B$a?h-x4Swu)**R0Bz{RWu`_ F{tLTtsJQ?D diff --git a/qa/data/dblib/qa_dblib.kicad_dbl b/qa/data/dblib/qa_dblib.kicad_dbl index 865eb4c684..4066e66462 100644 --- a/qa/data/dblib/qa_dblib.kicad_dbl +++ b/qa/data/dblib/qa_dblib.kicad_dbl @@ -102,6 +102,18 @@ "name": "Voltage Rating", "visible_on_add": true, "visible_in_chooser": true + }, + { + "column": "Cost", + "name": "Cost", + "visible_on_add": false, + "visible_in_chooser": true + }, + { + "column": "Mass", + "name": "Mass", + "visible_on_add": false, + "visible_in_chooser": true } ], "properties": { @@ -109,4 +121,4 @@ } } ] -} \ No newline at end of file +} diff --git a/qa/unittests/common/test_database.cpp b/qa/unittests/common/test_database.cpp index 8e2e99f8a6..c0de3e4d00 100644 --- a/qa/unittests/common/test_database.cpp +++ b/qa/unittests/common/test_database.cpp @@ -54,6 +54,8 @@ BOOST_AUTO_TEST_CASE( Connect ) } dc.Connect(); + dc.CacheTableInfo( "Resistors", { "Part ID", "MPN" } ); + dc.CacheTableInfo( "Capacitors", { "Part ID", "Cost" } ); BOOST_CHECK( dc.IsConnected() ); DATABASE_CONNECTION::ROW result; @@ -64,6 +66,13 @@ BOOST_AUTO_TEST_CASE( Connect ) BOOST_CHECK( result.count( "MPN" ) ); BOOST_CHECK_NO_THROW( std::any_cast( result.at( "MPN" ) ) ); BOOST_CHECK_EQUAL( std::any_cast( result.at( "MPN" ) ), "RC0603FR-0710KL" ); + + BOOST_CHECK( dc.SelectOne( "Capacitors", std::make_pair( "Part ID", "CAP-003" ), result ) ); + + BOOST_CHECK( !result.empty() ); + BOOST_CHECK( result.count( "Cost" ) ); + BOOST_CHECK_NO_THROW( std::any_cast( result.at( "Cost" ) ) ); + BOOST_CHECK_EQUAL( std::any_cast( result.at( "Cost" ) ), "1.95" ); } BOOST_AUTO_TEST_SUITE_END()