From 2565c4c76760cd174300a17e718076fc95d260ea Mon Sep 17 00:00:00 2001 From: deffpuzzl Date: Thu, 17 May 2018 17:21:45 +0800 Subject: [PATCH] add stvm-SQL function --- README.MD | 4 +- demo/count | Bin 15238 -> 15254 bytes demo/create | Bin 16195 -> 16203 bytes demo/delete | Bin 15005 -> 15013 bytes demo/drop | Bin 14266 -> 14274 bytes demo/extreme | Bin 15268 -> 15284 bytes demo/group | Bin 16184 -> 16192 bytes demo/insert | Bin 15335 -> 15375 bytes demo/insert.c | 2 +- demo/press_demo | Bin 16199 -> 16215 bytes demo/query | Bin 16208 -> 16224 bytes demo/select | Bin 15345 -> 15361 bytes demo/truncate | Bin 14305 -> 14313 bytes demo/update | Bin 15133 -> 15141 bytes demo/update.c | 2 +- include/tvm.h | 45 ++++++--- src/stvm.c | 241 +++++++++++++++++++++++++++++------------------- src/tcp.c | 64 ++++++------- src/tree.c | 185 +++++++++++++++++++++++++++++-------- 19 files changed, 366 insertions(+), 177 deletions(-) diff --git a/README.MD b/README.MD index 646b599..127e4bf 100644 --- a/README.MD +++ b/README.MD @@ -48,7 +48,7 @@ cd src目录 **./make** 如果不使用多机集群,无需配置域文件,缺省本地启动。 启动系统 -> stvm -w [^1] +> stvm -w 停止系统 > stvm -s @@ -115,8 +115,6 @@ STVM也提供一个类型sqlpuls类型简单工具。 -[^1]: 常见错误集合 ↑↑ - --- #### *常见错误集合* #### ``` diff --git a/demo/count b/demo/count index 1e9554eee08e2c2d6cedcced0c2ed21d5fa7306c..7293b34e5853d4c19728a63c0cf6253e4c51df6b 100755 GIT binary patch delta 2992 zcmZ`*ZBSI_6@K3f?7ghJhg}q1HH0-92jUbqRToU7h_EXtATFyWY2$*hDiL-Y5RGjz zo2f}h$HbA|HZiSsNT7;lI?=(lexwaiVo0K`rqNddX_39m=Yddx|IP70o3ym2W-^u>;KPmoy{!hwahBKI@3+(%H zI_^u1Q);JEsrJfbcVgp;u6SonVr^1=#IBC!wuHjpBb<{VmZjJ8r@mn*^?-dPr+VTK zGC5?J7ub=Z9eV|39kR_JyoLGoNG=f9IYp2uk#Pd1a$dHlkFQM?V#ikIYg#Ge z>+Cm|ggI#R^GN1W==E%8({Da(aH7-0_2%k2b}Q#o%xlIV&T_`#Z$gU4`5EkH*goa3 z-e686kCV(bVoqahO?eXS?qPzIb%*pD=5#AR%6aZx{O>XAMSX}}WOJhRl8me98D_Tn zBw*3osOZ^I*u-{rUVTs8~Yr$fPl#_k{G2n^LH|AVQD2X)7kYD6t_oy^j{Z(M4P^;-;J698K@S zP4$Rf5;U4}(`?N9zWyt-jk)PzwD>^Z$sc3$sR5)P$}_q;pB_i%M}nSOK%as1vc_o{ zSfEUt3UJ8DG1J&#{u}d2I*at*>baceUd?$ftJqjA7`|-eGHLEvj$~$7bB)ItQ9c-glBeiBq?Jk_Q<;l7{>*>L*onhbW;C+P z{j}!i-(ZD}Qj1CQK(g4t7g|vpI#;JVQwj^K5#XYC0hSo}-gzj1nxz7KbQILJ0{k=# z6?MW~NYfCh7wQ0oFyS&uE2GpAG-?nur098&FPFp-yaJ5x@pio@P!Tb9v*z4`OjWkZ zT4D5Mv&>vXRvLVe8FZn`D%qn&#aw7TAizampvi*<9;zoj=R?xNN2wdo`Beie^3(58 z^fdwf4*CS-t7U`%7o7roOwa)rT}NhD4E|<8FT1D{XpIOw>`C0>jaIs=m5}qL1$dl0cmYgcg{tBfV4+s z3!^UjE@B%*%$SS%fZB}%ysaxP3Sim}12@nWqGMUy-%1$AIJhl`FKdgNn7y0>j~wJ% z%3Q#Q1BWWyQx5GkUd=8fdv^Hn+TizL9G1|iMP|j^Ukj{qNa=rt+>pko72KP~TW{k# zm62efnm%C76ZCo5o`n$FYAu9Zwbq&b)O+xIB`+H)b5Wns)B8kT5C!9L)G~T@Kam&4 zY!fcn&rg||%I9A+lQvMed~RjIx|2hW!5gzxhgg_1!dnTn0@guO7UA>b|VOPy8LaIJPL6Y**chuC{fF zc&ooEgZClqyg||;+Rc*3mgTmJ+TCu1$q;S2qw>O5CE4(0MvBv6HWKlE{ z3duXPu{zork1M>*H+187jCUgCR!CP434j?i$zw{M{DXr3THXe zortz|#1#&3I=ZYO6sd@YJ^QlNUWwlyi9E!+%WUU+8)!HgT6w) zsT20Rl2Sd-ezc@qzhECODbF6xmo=)t+h3HFX1_KgjZWM10;T$C`_VwTF0>Ex|LcQ) d3aqp|!8xjRW3n^W*7{g+aCR^_xN2UB@h{M?4od(4 delta 2888 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 Wc5jJvwm-eNytKT0B;nCfQZ;E@ zn~+Firb=&XtkDJyQKHe9uB}!{!nE4hXdTl!j+5zwWZH?HP8!p8+NRUdp5NK{Z<%55 z`JLZ+-*dlvFKzqzw%tW~!&}9LM)sb~uN-cA&wgpgAFl0rY00m~pIf)CH1UY>OEV`; zscfaxyZE^|@AjQL_3v#z<8gy_zD{=^wrA-y_uFO)H}F+oGn88DF3Gxgah&xY zkGHG0U!{0_1B_BEuUE@O;i9cw9=;g9)9jO?%^^YF5qEFae7)Dbm^Fi*U@yDUyYE4^ zcLMIevI_N>J0-iY^kcU59t?8ET<4sZktR7Q?teR96+9K%9V}8;bt!_D(L2r^0ErM$!LJw2-?o@7J3d{aev6 zmt~gdc1GJZ{RUjA?qc+`rh2}Z3-puh{*0y>h`dPeWHhL0F)V}nX*Sud36n7E^rY%69x*uvmZ`>AU%7i}j5D1+%mh`!FB_QM8$pSkDS!(J44T zr{Qu@(VyVIL+tqW#=s2<$G3MIxaZ?SPAJkKUl4RtQ6A7vLASWxVGeg4D(qlTWemdi zMZJPm>09}y%G#?-xeR&$ll_6DQ1lL}+$X@IcDTGOz)y|nc0WLzH?{`ofJRdRmGK4I z`Ju*hlX;z;hSRNs`mZcd8SD<}>C7lvjZCjfyh>V%Oe0e6xT5vchx0fHVC$6JaDQU5XFc=HQk`Gz3g{0LWM9T&vgT@7?X z5O25Kf;R>6c7KklPwF~$=j{%paR1g@0!K7`A1Qt$y^d=7JyIlu8}(8jf}RrYq?gVC z{aAvYwCPd!{X_~qV^c3WJT2U~P1lg{j4o$~i#GieF@Ktzg-xZ*#jUdfZ`d>k{hrge zIogCxtB_($7xQHzkCr0n+j5Kkm`DAvd`HkgK7E3q?`rJFXuk4c4-i9k#h1k7`w|zZ zj0-Ry*UQ)}J&gIMS(A)rHlX?N@*8h*S&G&pV}?=3vWHe9VWt2}Wn4joEF+(NGA}SQ zpsgHZ01+%ixJT?1U4~h%5FX`2hVSwJm&a(vH?T~3MtlwH(x2ieE!KTT(BdEpL5d7K z&5G6{b8#{=wPTpG1*FksfH?-9G(Sy&&;0^&X&*w*6%e2?R58!Ez}7{S31+^8E};^1 z7%vgKN_qo{N(GE7!f|FT5W|Z~WgLcSnK8_@X1>TVDx=mSW5nkAKE-XSFy>0JD-pg@ z253yjHJ-7kv1r`kDBxvqE`ue z-K0yftQK_Cr0a;kT+lI-9tEnA0#BNhz-($|YG+JZ4HPoYa)VS z{dMCAE6i;VXDJi3jfD>B`uERPW-YVxZ0>+0qz_r9j&V( zed``mcow47%OfF$!?C-&E%boGENWUq)zOf`yDb)LtBykiu@ZKHeMc>giNi$hk?n zxh2$!F0h?#)zNSEDBSa8=#_1u)>ycyu2~HvQf435?gW2TpPUo$=^pok1r>V8wabE9 zx#6;){k0h~TJ@2r^Y38d`SM=Nzi@%-=+0At OZ&BI8@`P_$t?@sg==dc7 diff --git a/demo/delete b/demo/delete index 0ece7809f1544ab5ba06e4ce3c907f4a2474d851..629ceffe1f8e534d655b60d1dad68c1ae2d97db5 100755 GIT binary patch delta 2892 zcmY*be^6A{6~6bu?!H}i4-5VRiMoolkW2w30!c=ZAG?AqNR~Cmw9SIDR^kG!NJpA> zHi?-@h)xFPrLE1h4T&gd(*%b!QDf}J8YQj2+89bTR+y=d?Mz#pIBnWg?fK5uX}f>y zp6{OTob#P?@4Ih*)V-&>FHidp6J)njQXYJNg>!R+qWLSeRn{%$)i!XW6a)8ryw={*)}ipJU{Z=$rryNA`h-oXuoX(Lnfd)x zb{UQ<2LEXL4+Pm>w?@(n^?)^*UZ59P>E2v@)GGGoF22cb+pFcAA z*t^Tv_PNGk55mrK^;*w)OY~2zqu$x{Cl)YaPuHdVOD|Ygy^EIaVybi_tDkK7Svzj zwS$_9k+(teCN$lIuTl5&;&H9gFT?qkx0mH-*$;Oza=ie?yD*jOJY*l~X4`Zvu?8|% z#1~@VX6jk3lo8`~$EpAmjhC6|sDpNIoK2tOs|FKYxA@EPcs(yG*GpW(5rI(C72+C> zW>CDYE3jK&XDPe+0p~PkFv+oA%!Q~u`ze%rkQ2nsd!$~1>E@g;^E`e0wat80kMI)h zW}^9;w63U!Gn>1`VbTdi3~Fc@Q}jm`Y3>mo??(%Kd&S55(F@;@_$C#lz&9-Dnxc3P z;68!ZS>ynx6D>GD*N$m(ZB*06p zX!o#yELzVEoA2r!%=XdSD10O?D4|qFD#G5=r+7K@0^0-g%!Izm289szzMjS&MO%>Y zm?SKtD%Aajh)*bjF7vn`o=6tZ2SVhDtOPnCKAuPpYMlg%t4T$J=w(ctJd*iH`k@3~ zS5yG%FU9wnqFgY4CFm(l4QSz%AU?-cK&J)qIhGAMBZ$xOr%-)X2RM8{(*r=~1jPq6 z4WPuYrPpCiS5e|O;v9C+H<0ur@r^j>G|+iTI^v;j#CHgZlRXW^k$@cmBEMBGEg==XyD8)uvJ&^na3sOR#}`lNea705_chSY_b3^U@;3 z)CtILosF%!nv>2WSNnJ!s(BW#Kl~J58EoC+eN+`0B{9z%E;eBBA^K>(Y z5fL(WvF6OfoT_ZCxyIP-WSMu^Z9Zb~L1wTWRo2QJO}ZDJM+Laa3C}tMo9a#W`Iywm zqWIsT^UDTCM7LOg$EMnz@9O*_&3Mq`L29e2~efW9VZ%uRbxaFd`@ zZh8#T+9d9rn?8fICu9l}Zh9KN%_3&fO?^NyV;@gz%1uS+w%x!DG)1)6#`Vn(;}AQa zPv^_pCmZQ^(+ z*R$M$c4FCdUBtSpitRbB4A^N+Y{%!hh!tx01_sxaYbGnxo-PLcMp6nQM9TCeMwDQk z#0V7Jn8b(`JdniO@8Y@2c!Gs$y2zTR>o!#KT4UKWbMRMXMm98Mf}PSo@SPczkUs5W z>mS*Rg2ew`W^I7Xe7q5j{@ASjypK8`4x_)B=OBL}ZZX9Sh`W5cGSggtau)-TF5^1W5get=! zzh7QzO*P>y(Wt^JCK3r(29Y*W=U=CAcZJu->Y_ag_fyhYNszeFCjjogJ+TPcZu*sgH!#G=yvG{R)RG z)ZGzoYmX|NsHAswqd!y;_RFzrs>lw1vt41+lBw4;`9qP~hQMmIeRS^^-q53ue$nU9 zeygXTR6lJUC@9xc){TO4r*n>sP~ET|C@gjUGdGD&SUrWMI$<3sEZ5D}4gU6yE-qSb bdQ0wCty?>{MA}-n6_ga0l#Is9<{JM7m1+Zc delta 2859 zcmY*beNa@_6~FfZZ||;f*o7zyCb*VFAvS=bg2e<7c7@1SVQsXTbd`cFEy7gANZYt3 zk}4%>WM0gW4k9i>q|?g zDb?#ys-vo{qis{$%8hLsYC6|-sd2WgU)$cP@F`{|F32CFzs*;DI!US3PE%_2j29A_ zvRt29{G;tbK}m<4(bNLH*O^Mq*BMT#H%I^4De~sb|BUIR*UC79-*c2xB)yLH-JWr* z_m%KE;F-jF80%cmPn;dz#rmjo)|*9tX8{-OR9(!!^qh0WJ7>|e>}qG|mynN!Z3cb; z0eX|=*qH)yX_zDIECGdd#;Ne-W-o#BEHPbBv>$l_f-WlhSE94Smz!FMsQWbpey(V# zbJjOgUve(_X3q1&eX;ImhnE^ZZ6gxv{<$!yW53%+u+g#v8)^v7qJt50`89U+hwCHhmF!zL+N!i7hEoQqu%_iE% zqD-&sTTv(HGEWO(2( z6pg*cvWEC~5;h#3GUeNe*k^PZn^Ly%rQ8haIV^)-VcxtbB@}%Kl`jb})Pj(g1$e2Q zH)viF;HMVuk=djB**l=(p6NCEn(IC2k`0v!;Jd*Fqr5kXUmh9Uk9LEMAcT1AyPD1p}$<-qlj zkT)2?^-V$BG&Qp#^D{wwY^#9|3*uudx8R5%KDIZYdQ^uvd`QznKyL{e*0dWHj>=X? zG+kkrsEG+Vl0=)4^q7#NN%S_*aY;Jrrtcu|=OXlko7%9$UkEqmrjJqLgkH!26K=W% z*(c+@a8m=gQ-UtKsR%tht^dKvrrh)mREVC@cnYR6X#tY{Qtr_wne+@?&kE}0@qwi0 zG|tCJmU7`7Ac>q6R~#p}{)=ZR-|yf)rjaqFhW(OFs#V226(GoK9br|99z(&X&k8X} zq_rrRCcr4)hscm_rE*Z(ADQXZW`@;+6b30W#81)h;pP`2QMpi}kG~>|WxR^Rlxa1x zDP=b&X*6@Kg@$t|7UTI)Iw_lB+vMR z0)`XleGEubCfY}A`T#k~1-)U@`$%6Q=%7u1gZyQJ4%ze+P^AbQwJC<)R7uxP*t8lb zXr1C6p0TM3)k7k3%qGlgv)nqs#&Mf;Vw7REzzLg%QLskPZ*6LTw1*||f=xFdZH08< zqD`B@)ry!Yo1O-$v-WbgF56Uyg7p@L&1FL`gKMykFt^jqgE*aQxQ5sT7E{9Y)ota% zu{b9N#leUHb7 z^|TsZ&+;U&2%Wr|*VmM11`E?E?F8GHHW z@kn688d$@dm;VRX*~NVTuTHHq|A5}SEi=WPFhXn41?9gU>&`ltl-SbM)e$QSd`mk+ zvuDNLoju>0Hp%;C3H&K_lJ0#W3KxZ!U?fu6P*+>i99Fm~m36i48#gJ8{-#H2yT18d zg`*shOlPHih>|Boba$i?opy!PN?L zD%{esqOC_^7RAYEb+Do;QWXp-j4YR8Q>aeTTI(r4wUo<_284)Oj+$SU>KZ%rDa)IXCmm+_&$R zeyS@@MM1Iq)0{Xu?>t#htdBV-3(E8==O$lGY)Rom#=B^NYTeYeA=2KuC4X_zqJ^;? ICE3=007qKzw*UYD diff --git a/demo/drop b/demo/drop index 1d121cea7feb952c7ca8845e47acd03da2fb9b2e..1e5e87fbb343d6b1e4cacb58ca0dd1b495c9cc54 100755 GIT binary patch delta 2900 zcmY*b4@_0p89(O&?_QqweGgCv>L^c{4Op?*Dqxd}Pk0pMj|dN`tL*~>2P^P8sGYXk z9;;iYqp6UaI@7rXE3H`5l!mq{YKBTJtwDAATU&CT!~F_DYbi~ zc=vnPyKddSUA+5rad+T)cTc6usWwagN2dKhIrNq}9;?%wXYICCfmuqu;8v=&up|6L zO=nX_N&D8Y`j9nk^)2lRe||QJ5y{fc{MMuVD0MPC#ou}%mMO!$YVb?DdIZHCbe{9v ztAFLZ<5{NXIoCYt`fVqk(wF~@>9_;=?40606UXw)kiYFd5BXpo%Rcud$o-Hr++EJ2 zl#|)dspC#<)JmCsto}6%7Wg#fnPzIz<<+_Trk^?|>2CTB`@53$OKgxrN1Pd&M|+ud z%@T~zcoe0+i?75&@U?9IGq5uBE26!^8GWn8&yss16Oe<^x{ zOK@fD21Z?)t~!I>1^3KHj2zv~Zo4$y2m5^eEL-$wLVvDey^qm8O_!V--ptxBp)1o_ ztUIP@39?m4wh>J;;3{=5D@V2RUIzJALKn|C#WfseNwjb+Q7={%LN zCb9s_V8x!}GL0>)H`f)hp|O_@%~Euf@C=JS^HGBh-Cy&=e5{<+%H7R5%n%B-+$EgD ztb<8{dm3^*VIRLopu?8QSBZPz`a2HkCYM3`nYWHg3Pt0n@|XaNTHtbA zKmt92Y{LRlXcKp9ozUHE?W5O`<)nZS6;X)_Zm0AGRwrF%xi8Hc(SKoqO5k={&t^tZ z3j&^zfO)hIdCy8OBZ_<&&!`}th!^NxG31G?20AAkPb3++-V-#Xs9$k@YfK=IBm+U; z7snYzOJMqeaJ-e%(e-&jyp;oJ;esIE#18I3-X~L-o$@J)gS31cJI@a4RldZ zzoz}1A!7YbdL7X86;fOha=@f!1pQdJL6b&-CM4*fhkk(4K9NF?d1xCtye!;^hsKfO z_d1gu#yk{ZXAM_25Hszs8q`0E*;@8xJv;sk|$|C*wLD~t^ z&jkH!HQhj=pKI)vfz`^yu0RagIc5~Q%>QEENfR*tqh85oo=Uc}t!2hT%u^17h;^^= z2A8F%4H>hIB9>#R83~sQuvFq_h;W~g#7;>Q%*4i6D~%r^gco^p#7@x_nB@u)t4ySL zp8xM`=ohh>@{DR$d7kGWl~$3FYehJSi69Rd_?i_xfy~9x%+!H_l?bp2pRl#gz;~BG zi{Mi#AccO5&}9OAbRJcdb7(%9DFaM}gw7@m%33dGd2|AKDvb!jjVSshf^QJRF+q;D_HoTgZ*r)-TC2u57|&(iz-nzY@bxNs8d+*(jutHh^RNJ$6qrp07BwN- z=XWJX3f)4Pj~Ee*$VcOF+H3&yyXaG-eN0*yu;~ND2njlD(*!K*1ifa{HFQxg=!i`_ zfEuL0L7Rp#qAfDKV>Z_iYyKy|8 zzyDocKB+BEV)n5OtD-yRwlY`q625;2-%^QQ#0VSfSnaYv%*H{Vt+jbS{|a#DaxvP% zdMfub+=7mW+Hzll-d(_Qs@sA*tD5CBcN`a?BlZ>sGs>OHm1$2WgI*(A3Or=<&WU1p z3D!{zN5Pd*3}3;0QM~gGzDpVPT&SiiT=N{g0eKTpXRNu#c_rDq06${pCZMz=IK}k# z{dn#wbTIo9=cDAi%ZPv1BsartF>Xbpw>9}yUQWFjgwb2a9$9EltHN9tA`7g`$*w>lfseDQ6e&ZqsYE%lv4+tPB4S!Z|_ zTn+yPoTCf(Mna*2_2p$H)j@@IDkv{&>3mY*R;a2i3vYQ`VS5MtYs&%($6jk|bzpBbU;8Sf1ixrJrQyr)Zl~fe1S6H3KhMJ+y z^uv0{x7cUufa719t81MdOY`+n=lIh6_=)*4IrWvJvvT84FN~sdjz23`|H9dkm9I0L k5o&4NzAWedoSdOAR(`Di1I2;<7ytkO delta 2915 zcmY*b4Nz3q6~6bey!Uox4-0DeF$jiHK>_iHA7dLp*)6Mp6qaN(wQDF?Y58$9iK5Lc zCd5ieC(<{`7%?d^wBk<+29ppp6&+KlB&|s^t*vc_G__+V(`ctjCe!I?&v!OVr_Av7 zeCInq-#z#4eS4vOto=Zio;sDCY0R3~_~1inbLSl&eC?CZuFcuFXhy^3y(62AYp&!N zrMkx}x-Z@6ynW|RMfdrN9{-J=12r*DofZ5ang0Le$Z6|cm-af3$F;6pHAAT`k5Vn= z+uOI*?`YZ{Y}?YVF0!Zfq2@M)zakFdKKy6vt^Cv%`BCF!c`NSvk&7wA`jf#Q+I&V( z>=9?5cZq(^dEJ|*$+_;$)MJjDGM7#<9s5!VCntN}h-Lc-?7KbVuwO1_JHvAc_5kcG z&y&t3D$G8{tz+N1Un^zxv%8NC8+^L*{*9@tX1p%qPul04r3Lh3&Nq|vAr45Ue&-gY zP#?2qs<`rL)JclZN-Hqgl`gI;ijE^EL(o-4|8%|;pS^e?k``$Q{7lhuR&M6#os7Oz zG{h3jeBHpPQ`39SaQvLb@u*R#dpK>srXs|b=*KzYfF`WZtk4G;9n^Hm`6531fe+!U z)Vb^%)wBfNs-@ewrt9EpbT2zEY88JCo_TMundW;u*MrekOrDgXKU+h2t5-LDZn2DHWjss6Qr< zXOM-W$0hNWqI86w5RQ*>CL&J?;-kEl71^%{;zNw7*gqGZb2ug>MKq z?xy$AVpOl-gb6prVo7gCXW^y*xG_Oj-E=SJZ=ccs;%ZZFsz-~nI-5VHQYafm-_kuC z^4Ao40+GKE)RjtKKkh5Y%ag6m9PFD#ZAbeae<1nwE zDGM#S`TwgsFyUDorWB)wUEZg;NR1s?Xsocg$bZl|%fMGy(Kd9>j&`P<7}z2Kada7A zv4L-zkCM`xSG`@dJ1&u3u2E~_2 z;Dk~MM-aN)c$UQ`p5hwCA-m9c-p%?x!8R2cxgvHq$`{K3ZCU_krGPk6VD2@ro4)7* zS4r_?x($6_Gk7!+l|dJf^mQOL5JSI4+Y-?}XwqfWC>3^5x>Gc8Wb*V@YF*T1KT#b_JnLU}rQ z3EB;}?Rg)5&q}t_JT~kZLAKL9|K?;Jx4{!p>X!1Pu`=y#W~SGONf<#bEbg{E(ULgUUqY$Mp6; zHv2v-X6B^xhol9SF8*zkv{hR?i1v^ls+K$Zv^HImCSwZ&|HVKISg= z1-WqCF`aRn8S?A!(~)(_Ct_UfipQn9SI}PdSBR%Pb#*9gx1xw(+Rn9x}o{Jzv z;e8nnuUTJJ8LSH_Y}lHr%H|ypE4&wKAE<2q&i570d8ll4rC;IVYiX(Te^cRF4u|V1 z!nLbIwSK?6&*~~d+nbsc-ZkNHXmusZhS&KwC|qKphL&|r9SRp!l#EpP%gV#${(!=L z#&mhp7KK|VN(X|K{&LC2T@z?TGOm~D%GKq;P&iOoF4s_?aZP($qrx|u`TMKFwe{7Z zU=<7IQ&sy&Td29UiC?SJ?D`siZP`5`znsImve2Wg3Y!=$U0>&~4F{_O>s7}{N9K@r zrnGA$Ykr2MS2@9)B3jl~=gDV8zJIg5T=@0u^xe1poj5 diff --git a/demo/extreme b/demo/extreme index 492dcb6c9da9ae7f5c0e6ce24d051cae5a65dd7b..58b53374c80459aa9c824e4fcfa281fae5058b1f 100755 GIT binary patch delta 3002 zcmZ8jZBSI_6@K3f+`W6`^Ff=a*mNwNe%VfIGnqtto_FhXT4vaL zp7WgV_w0Lju=`Z^!5q!Vd1di@Eo1fVu|=P+-+u8AfBcE-%c+#~-(G#TJKm^0p!;+o z_K$}5Uzj<3`_7&4{x`$D!I|EJHM$)))@lor?0*_I9^ZE^#^W_-=)WF?U;U3qJj1L^ zk=b@rYILgQN6z-J5hmrPCRsj`rt zbi_XDU9{>1`|ES$kJ-RSBRnYNjGNV$$ZkfT3p&GP>G`sW(NmKC1#Y=)WwcjPm>>EI z`CWGJk+cet3uG^&eUd6+SuFRm$w5h&gdUcM86B2{S?Fa7^-J1e|2}Qrrd!Ze$fayC zB54gOs!|n=O8N?1jqGFPm=vjh19{5xBktR$pY32|9)ZQ{5QTXK{hr&!vS9}7hV->< z1vowHv0XB4$qifGT7X6OR8XKCa9Lw=&C98#blyf*Nlx>*J&^N-w zWBvv57RWxK8{-^Po6Sa!rg7Vokr{iR2_q}Q8uvl|*ke2|PqK;zamL3~lY)9VhB2TB zgQnmyD3NtS(BHWn;{|2MN7e=IMaA)v{Se%7#Z3#E4Q@!G89_^dhGh&>yvgPC^K%qB z>{YSw9)a%(xsp}x1N_lwye4zG3_8NRaayGi^f9U&QNWP9PZP*;PJvMo6J9sm-jEkro%R{a{n^H-yuku(hTEGmof$z-Bj9-zu!tha`wP{} zsGtWho-u`ZB8!2>l_5{00q8Bo@kACP*9C>9dB%eC8xsohNLC=|+sg5#phB4bQgOW7 z3()ni6yn`(L<<)c;{B}$dPgDNUv(hwD#ZJn0`5H-Vt3x(a`Z5%(4eGY&JZ&$sa}U9 z{TV6VSLBd`df<3jaVH&g4d??E^rV}fL}?$YLPy-R7ae}2xKTIFAjQWrmmMbDl!}(7 z60>mABjA3m(3G13;9|d#w>a9gn|2_@C-Po?Og~7~2>Piyq~ASA2VizSug1~DT~dzs4;^f)r+Yay1C zsS_!dD_{ukM~JXOOJk?BtIQ-P8LPA>5aJ%>El_rXK7d)FB9eszDSp8JcNcmX%T%P* zvC4gjgVY!ytZkPHM_ui>l9Wgv4nk(mx)U}XxpXc}OHhVPw+^59dhfR8RCbcF(b z8bcM89Gb6hS`DU3h0dn{I;>V^MKq2)HChbeMg_fq;14Oo3A{(N0iLe+EIewp!(4OP zIEO0QWYlW|PA=06W}~*0y#+mkESuCE4O-2P#y1skkqM?j!=ZW-eSS;j@R5Q14{I@u z$WJqHdPD;l)aeF-KdM?7a?w@9uoN10(O+TNsL%;Uh_XeYmt52X)T9bL>7ol5(N;CQ z5f?>)nzggs=Q$VEVn{7qB+q};ML$LN+qC1X9di*O#dd`zTyz@fF@-L=s12pHs_rIT zlmx$Tt0_#m$OgAV6*KLkV?b@%Fi-2ci}H~$s^JE@PBa3pT|49C@BhA3zLpJ6;^=1^ zRwXv(j&Q8uBYgWVzAe0|h|!^KV6|?5NY7%od?_9G^G^k{oaZDBoTo4kabeO4wPD_X z-YjJ~%S?kjtB&Pt)6Yf7m}@J8o5K7$S0>$E4EnT0DezFsn~}iqQdlN192KrfVE8KB zpTIqL@x4NOf(w=O3D=wms$mpnC1qg(ICUEdnng%ZjY4Kv=6h*dTDbMVi{mTfQT3gC)ptuq0pwf*}#Z zMaOiYWt+hDl%PXp6~Tb=#w8SLhBNM+yOFB`Wf3b>5m5J2sJXPGy; zQdSuhSijm`?UB}Ki@?q$*y@^KZAm1k7PGEoZe({<;8+u(>+6EGR#{c3TJ*&CFM3(p z(=s_;l;d|u%WlXklo7ixuUMY4FXa_GKg&{M6kphL^9!9<7ADYJc0+!l9I*THi)Glp j#GjtHclk!cQ?ODr@9gNbTATMQE4aU)Am06rrP{v%`+^Q< delta 2976 zcmZ8j3s6+&75@JV+`W5+!!BrCFa~@K0!0C%fYlBUcj>M?B)FI%ZD*B2S|X1Qnu@W` znqVq~v?IAqqA`uAG$N^0yGD&-LpwNO#yTafZD>2q;3RFFHkmkmWHQM#_IzjKblRQS zyZ?8-?>zo<&;IwG+c~oHK(6ueva|V%jkz5)^}8qj8V+2LB? zFEW(c=FIT~?-@;G%5dFgLxMKP1SMT@+C7E(taHe-LgzVCo+bLX&ikGv#h)^rbhMl! z`0U9fULV8yUi&)M$IEz~ZQsCp1nXRT*s1WAQa`_QRj#^XY~>GH|OgYSm2{mCIg>3wj;x}DJznu7de zuGG8Py-!mBvWK9!jHR-Fjs1>4%4^FGInC)6 z(Y0Jlf|WSUTQU0B?g~}2&^X9K*9Pp`D1r5%ukg~dhppMJ-W2w+6FIDFR~?&`eT37w z9>WeSyBYS~ka+BOu>KC#K4n_d9LSi*BG(>S7BY@nnR}5sz!9u_CG{IDw-$z3mvVqF zy;h&T%qAMa5bTpKDB8=BttW-B=sG;Ut5M68qW8E+Yrp9Dp7w(47mn}gesBZA%__=F zR8eI;CGeJ_m5>e!y3IunbGU0TVerb8cL=^u>vA@wJj0g?>!8lzGU!F-twWMR(OanU z1pyXqgUew79>OSCFADHcC-(b8Js4$qw(=SfzNFvcuxT^A9!{~2>UVfSUxV79sbb9_WN{+=C3{8Wl9FqBMf)PYOg25Oho& zZ!0Q*^cCTF+?PQ4V?jLbZCsIcN)V6qLqI>}x`=WLZih>yoWh!_PcL%i!fPPIFm` zx{=XqRP#EKdXOSbfTg^@LxglAm7UVwW@ewZ?lE>DgclL!i%!uE$b3R1Di=}=@b~kx z(|Z!blwmZmDdjm1(qKiG8LKP~;zp2M1Ak#fk0EnjJTpCmhUE)LrauFG!N5PwLrdXP zAizhzLFnZIvS|`ktT3*!I+xagDU{Gfv<5pY5?L8t)%gDv3z|?ghTtnjIHi>LG^F<% z&vLP8S2;#m*eWp&xw$?QOsTP4iv2#qmq`OHs>BUkBOsYDNuWO>c)8R*YSPjT3C0G$|b^f`X<@Iu8^Q^h=YrqO=X- zIBik_{A#2NGbZ(etCeDAO?n=v&N#x|x@l4o64o0S-^C4a3}4}g z<9OFye4jEN=R!5T>Fmv1v;glo^DRupFS2^ zFrAdx(%sz=^DXMq&eMytVy`aFHRfF7PH=VnX>x8YeJ%=#!qYMmS--KaHnb_MaJ$ym z)wXZnq3~2_e6Y6r>)RBjJX~2-8&Ej*IyyE59#D8xMIxJmk;bZUV;~?;vrWNpPg|S9 zlO_@gSJfhHq$bd;aD;_hI%?W>DI8OAG8zn2`Xl~8wZdt}w7>0Pg)=BlSBGi?e(}ah zQ{4(@94>bw*ZV`^NOi4W4x#GS_1#^q3jb&3H`hfPo9e@%Ixd)Js`1gTaC>JPKUD9s z8yf zx~D#L@`_5`Q%mFMS5A9Tseax$T2!vfoSS@Au|>t3Ezjzes&z+qPo%xIcSXtlt5?PL IuUT&V2hz>^p8x;= diff --git a/demo/group b/demo/group index a824dd0fc5e9438a96d3c23f4e659dc846bc977b..5a78ea1fa0ec455cfb020d4644e7946b64a68151 100755 GIT binary patch delta 3030 zcmaJ@YjBk16@K3@+1+oye0y?_OAuH@G{F&qfh4v<$YsNZY#=7fMXGFoBqcS;Ite(` zDjUT*Tsk3{uXPv(7?dCh*by7BTy%`cB^0oTmts*a9cyW4TKQqC%&6&k&dN-Gb${&l zKJPi_InO!o+4tMS>xS3$=IJM1&!1#uo!oY{>W%m9D}S@+kGyxkd*ax-M=uOD8av(E z?Tnf^{GH>SW89tOEb%&c{L?!Hk1^Ifzgww|!=a6*Z6qpFS%27F+XXGb296mnLF6keTUu#K03kgW@f4uK~i=#nDK<+NnyrDh;%iiW_i6g}kZ$R4Zz;T*{x zdtV;hi!^$(LDL+r$z7_SW4~TasKg!8TN!QDoNP2Zzvl1Q3+wxN@35v^@XiQ>jXhkG zrv`e{Ht{mxdCXu(%iws=vRd9&RtNKXq7Y|VYq4&GOPX~ZKFhK8E4O))IgM;~@~n_$ z3S%?38|fx-P~5yz@||RNb6kY|e7*d&)_h4H;4O04(R^9TRkV(o&D~-!=`14pHMEQ< z`ie!Gd&G~=par&9#KvdvYuNUR?V2JJwgEvm6vYF8g92}|$X!e~j4jMesY>68*nN5i zZ~40UtI>Qz=d%pj&UW+nl0wlbs5~sdq_qe+A|Q?GQSMOzeyZVu&0~5qdk5$kvb-4= zG^|v*LfBjS9B*g*mDjr_n8W%DUeJ#b_KwbEi=svl9v8wAszBa%Mf|X$sc6p$LEMpX zKqtkKI}!#uB{uHJ9msVWD6Xz4>PIajV&s-g1nC(Gys2mkT>l`pZxl^}=UGABni^2T zIYB(TA)xbucy{GL-V?;L`wdk8QCD&JE=~6WT@V!S*R&rg-j`YjG<|^-7sWW>p(jE5 zf!Gds=pxXELVCbQ-H7{0gdXtlMIXYgSPaR^GnehZ`X3qH7^V`Vfwz3W)O`MRW|dKF zGKmKya}E5U6}2LBD3O_3(XeU(Hhlmv&%p04jqXBBjQ~IG19ezHfKEU~tuW_NE-dqf zx`2vN;R10hq4+^0suMJpG{Z5zg*CMn>vA3h`<9jok5FMO7jle6a#89j&hxE+EmZ| zS7x)Q9Jc8xRNrFkWl1M&(n#@BK_fQp16n2MoJ~g0m77u%-w7WSM zS)sO9GPtR%99E`%T@3n+gcL-Gl&l0slwh5}2ozkGz=##RD}mSF#^aR{W1*TZv*s*a z$0woFnjrL`IR|o8M@r(Uw|~t+*{w=vV6u$9x}0J}{(wR`OCUKD%t?K{&*Ur?h?u0l z4bS8hpz5rTIE&G@gnP8!Ng01vd=~#r@~?tt0bZ*{Uz`6BBox44^fj_0{(FoGaJ2W8 zHQ>-=Zn3|2Zvy0g%4YMr+*{tH4H=CL|DV6o>3T9{rXE~xWex#QdS-gD%`VeZ4JSP72cH5XhSGkUmmFs2IXbi5Q=m*H!Hl_qR~is z7_`xv;3EomW@JTMP4mwc?!|;L6fCQZRtBq79M>nCE1O#sF1>`gsyZC3lxSRSRZR%S zZFZY^er0teS{1I8Td%6ABG%EQaC5MIQEjw-;rvK-ZBSvT>(_KdTHBiyCOKhUP#3H( ziv(rd8_HafC)?F!=X!poUO)8j{MYo*zSnX+<+s)9P4fw6$sN)S|+oqM^};9yI<7 D&$9yL delta 2974 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%0AW?@oJTFmBAL)V{x$hOQww_bqiS& z22xuX{=fai16lJ)6FYA1mIZ-L(P&ugjr4{(BEfc7TW4#J=nmXpAG}}mc1C;pT%kxG zD|#QO3Wr*ICqDb$?b?b{JWcM0|GLcFyk}y8z~;vKx|(Lcz)5eeuM73|3A|T)JL;ls zT>@Vaf7PZsx4^|24mZ2+6nOOo0?polZy6+OW z1pT|iwOkY~x;W`|S5*h9-5wFceaLimaF4((7N%R-i}nOU?fVK!i%Ux)(645`xKmW_jP1XC4K*r^Y#)-|wzfB!xH#n2{ zx!qZ2jB0z#dB+o`RNs`Z@5(~VH}~%O`rh~Tdl&i#8p9^exIS^{X!~GXN6D5*rFvXS zwKuo6w{F|DVQ1@(>dx(5YL;~!TiQAm{+?tb4#t0${xLuGC4M|?@Ta*VM02n!bYG!=cDsW~%77x5?A_8${gtU1d5=6(7w z8+d5kWZ)5yPA9lVGg&|;jj@NBA|QvZ*jb60%PL`E=pB`c~qzS_?s|Af{`jMTKl)CXt=xX(9wm7S44JxXail#K(0oSMp zS$RpTm<5n$V)t|79`jrmBbN<}^AMHm&uI9gjwMqaw`V(j_N8l zG!C<&<1ut?WJ3GHCs>RPvNqkZCz^d+|K*3HyN=b$HOT24&!7X#Rm15V&%z|u^*Q9{ zAbXT)&2k_kk&PVBi+Dfdpp~*0sf##*wM0@+vbnX?&vwxR{Mci?sL!*CMz94vG6hBZ zII{JU5Efm8$9|1krWJj`MOr@>JASD@0oN-Wztlc(eZtKviV9ajWgQT>py)xE_6xen zMUHT|t59L{N|oD&?=N&ItD<}OQDzP46Csk_(Tx!Ch;X0SDY^kOj}YO?ffRlG|J~u~K7wURHX2zKeUO7R zTEXub1r`U1M377aUtvX0BXd?LGxcC#D+NT+HGowHzG<Wp9Wv~HM`gM{@47Wsxnxu+c1ii?Z* zTjh>Hj7Fo3)usg^K7rkGw030i?*`X8E=F6S+u)bnkaj|Cx#pmEJ;L%*7eS7!W;xB} z;39O?CRb3Yo642JmFeg3F#Y2mOgPXe{BX{ngSH z!C3x*wD;#1Wx~jU?TPfZ+s;XMxjMHf`a(!jBKTuU$DW_Of%lfX)7KH-2Zfk!VZK&Z)o;51*+?-8dUeh zLe`slVrW&mLvOJs^NRFK_N}~9eaFttFLkcGUuLOp+1>d?&eY5hnz1MIi}XM3TluBB m*Ul{{)q5wND%fwuuE|p^ySjD++FJHx7v`@im~gCXH2wz--}_ep diff --git a/demo/query b/demo/query index 0e502aa69b3de1e6160a6e20ddd8038dd588052b..f42afc5110b7eb14662b39cfde4f9834f7624a4e 100755 GIT binary patch delta 2984 zcmaJ@YfzNu6@K3j`1adn_i(4{4T+=<#MG!L&~%WX?7GNu-9?k8WWr6!K)$xIZL}t$VoWEtq^+Wzt|>-HO{yuTYSIK|TF10Am3A^oI#Wx}b2iTOSNXAf zp7%MI=bZ2C`*Hc{@uz$9^`4&<|m48V`|gB zZDsSP>3qnzH^B}#Z+lIp_QnExFW#DYXKE_2_k3W#@7Dg_I&-kr^`NC^+xyZx9_&e0 zs>h{Nd;R9tjZZapw{EQLT;HYc@KHx|Tc^U`KK4lv%hHeYxBiSjHrNX@0@)`MnKB$7 z8vLcrp9)Hf+0SJ>pkKFtlQCZx*?-T-(^u^D%)EtGl2S=8m2t4wbp`gzuxGk%z&=vK zcCKpzc0cTV*Fk%IW|5BB2Q#PB9TsrSOwq;sO^56YnRA!C%C6>@^pB8_hPYYND zGxWdgGg&j{6~nto?`MZSnrgUXvrK=N{dzT_5i_6g=U_L%CDkYqJRxwBMIPpKF&trK z%2e7R#J-{z^O2{3r8il>)CDYqUS!_-m6TBQ4pg2NV9^$YoDq;pPomu+0bUAm!`4~7 zpS^SGEmS!d6%~T zJbx!>ho)wt&;-z!Bt7M!9f-RsLQi{W7dm`TxR{4NMu|V_0uC7QkcpPA#b@E6 zHQ=rbx)$}&*FfITpK`Ww54EGj`#Oie#!IOlNk5Qh^ygCA1f7Z`rF6R8aa z7YeXc+Iz^b$Vlg;=~tOaOt6+1+Za&}G8BoQqA|D?3z4WCE0}-ge`LIXWhya3eB^mn z^YgE>{6?|GNwSe-g@GTmqHm*eAYPezFtADiZkhmCY2bI4N(&KFCBRGPkvb?KmxiID zS~BO;956MKdI9;-VXe58Q1l!M)d`9zI)>!+;y8j=fN_+kn|2Nn4aNc1oIc2@N>*Eq z#t|pW%mA~>;6-Mz2~}3h94#v4KH=yp zhPcmjZffB9E2~vh#@zH1bidv>&XR`Rl!6i)1dX`q4AA3(F1e`_(%K~MvYS4Iv~S83 zuDR*^;GPgM<8JB)YBx^sv?koN0Nr*NxPc~!hLX6x)oGkza!(3h))p6W9A+P!$RbZE z$5LL7(YyFRd{H4sm$8zMO$$T@=DI*@Mov$XM2{* z2|GE&c67FD4lC5|bqpqzD~FY7Pd9@;BQ6CIA|*495hYm1F#-kG#W7+9ACBXlcX5s~ zwzE)8@3ZDi-2*$d1w#9+hagvdoE-nwFMh^BS#3(EW3!CDx@;f3zd(WP4Un9H%n5zH z+q2gTL`*{8p6%I<=sNQ%S26k?<{9m@lXK=oOZmSZ@00Lcgx9Lk*Y5oVFN0nL!su&a zNBrwC&BxKsW1EpfPqWy=c{~oLf55agA@`OuVNZG!!~f^6bejG$Wh5ui3`*03ujY&; z4eq{on@)->>*{KMer~R_BhtOKyuGctdvNyL0wehio;^Pp{_C+r`9Fw8BFk&5gO#DM z!d@(|4z_h~Qg{nBtPXaqdqUx{hs&1*eG1oXdwa-NukfObL_&c`!?JLL&nNHFP$0aq zwN>HG7KwzH1(7yV<$FZo$_%ehM_ov)!h?2~N|l}`(Qr$b>^;;9=$zJ^F;jlWjy9CY6InzqMv;^66dxenc9Utd(L zPuOXNW!h`k7nV7j?~yU8f7?GSEOxHRkE1v3>xIQS&rVxhrbq00{u~(WTij`-7A;mS Wo4Phe+FG{EFDfi58cZoIH~tG9djc^4 delta 2894 zcmZWrdr(y875}~q+`YTN;SCE!LFrIXLl97inn7TfF7jGo(=@TuRRcCmc}#qC#KvsK zl9Wf=z}#u8MiWpH5pB_K+Tf!~I$G(NMl)ln)9HguTSsRawWHJYA4|{gZ2YS`!@cKs ze&_M~&i(FpnSb^AtHT9)_vyksBlSV=!~UifwL+U2FPcmFjaT z)wyw3`}W>vceHP>>)zI*9IjAqJk{Kep# zHctwQxoE$c@{|tS7gLJ#a{F#do}ROlQ}b3nVmfB5l9S!8-^8$e1ojiIYp{=2u$}9g zgFOzrz;(plmbzMBwhyOfk-@n)%>-S}Lg=V{IW>RP7>Ak}`XK7jl*zy?AeY`{IcBDS z0{Vb6%q#)Lbj8k1D_G<~aE`dHD>{QZxq@ygBD+1UFku~%mTBmFsHoXKoR+Qc+GoS~!Z4)T&5 z8=%)Hg!hF_Y$k@-o9oye&p9rWOF4QQ*{xi!a|_2F=(JpK!u}3I5?%j5%qy_n%CxR? zAtQ~09DBuF%GfT=NDlp$1FS^>X5xqWvfKKuKF2P4i$z&|vQ|a=xR&+05EflS#v2;l zXBFLHS=RR?j_2PCu3tEw{{XlF;pP=(gBuidTTv;{kPcy(_gU5`-><@l{ZgrtY~+4l zSF$UL5G;P4oC|{A4BCq0Ty*3K;a-hWk|A{P?@e^#OOvBHv_#bc)zx8FK%;Flcs8L|x zoei-LbS{i^CL04=CLoS(0W3H0rX^B7l2!hO~N_!cCI~!8M4Od6NzRH5%{mv_3Vd z7!8{Y95$a?GzG5Nm}0Kq$p>)?_i&7I2s~B=_g4$bfo*Y79E|^~k`nl4`Hl7LHZ2e- zd7M|QwWE-~=B|}2MqAhy%5{iWq@8eEt{d>Xo@RTI%LzNSj_n**28+;f&$E4BxfZi9 z9pAxV#8BT5Ey$2vn;OxEEWtX0ktx_8!AKT78o|Af@nU7{W1*TpVa=)9wofj~Zu*Sb zv<{_{v4xBgfBFW5e1UxFUx&C9l!zJ`-kZKjAabHc`uC>4faRrL<#NWz*LWDccG}{l z-z?>SW89sHERpZzNT+*}pSmsqVT^3%K>RO}xq-8t@9jbjo%x94oyQ^|>rYHuzm}89 z8P%V>nc@G(hu>cO&zR_~Jw2V_fiLaVc3gf=cvXIZ5qp(q$n)i2pZ!w7k3$Gi_^<|p zHO-9;b*%w~2VK+H(6M8u!sn#rxrUw>zoqbc1gfeVyb9-KXJ@N-qrx{X7;Nv!xW zrIniOEv1#t=a$Iy)W7WGrR7dvK?Gg1@06D740}mgrJlC8@O6K9tgPEgTvejlcJ^!! ScC_s-T3x!TES&R9mGM99PwOWD diff --git a/demo/select b/demo/select index f6757466ab40f24c1a25f56a4d3a169eff11eb0b..83220848e9e920ee8932a18d695613c24444160a 100755 GIT binary patch delta 2971 zcmZ8jeNa@_6~FfZZ{IGvhXpmRphCqs==cF70*+PWV-e&-gjJ)qc_3hlE-(?(&}wI` zrkzkz1M_AYV=@zr5;1LB?RG30Z823t5;ZnW2-XszleA3hv}S5E&a{m^zq9q9GQ+;} zyT9}CJLlfLZ$E$fyInn5y7tukOk--T@4d-C=Jl_Bx9wEl7h^BYEN)J|9c?g{n*md) z?xFJTw5D_ll;`H_#@l1??+I&$^!cUw*{}SEjO!^n=InMOtO#Lfod2(jXU8WO`6moFDb2WkOS7FcejKDrx zz;=db4E8bDS)Oj^`Q*I$Z*b{^^Bc5Mu0CFVi46;Uy7K*nsZldY=kt?(;QTFl-qHb% zH>c~v>=2;SJQXt_AcOi@qd7xB7QMm|W~zW}y5>}*WX-OGbGj^DS2Tn?8G=R?B_ue{ zr({LuB5Hw#>br{axgB$%ewxueMWv?O)wCR*g?b;m^k~8;%yNB*(IHJ3hFKw~Pg9eVHzjT3U945dJ%aiL2Oj#A4%Ua^B_+f6v z2=lsYO&L2HN7&I-iLU+MXEVd~b%Px}|KShUrH)ty))=E zDxVWDq#`Og5n<=`6<$u6V7o8f8q$AagDMerK~G^u(M}|MOA;1P73%&*dKpp#UDicG zJdpss!MDc_a&v^c@Mjqi88y-xZF}b|$)hPY|E& z8nkdl5TD-?psRxT{K|%06U68DA5i_iF5_@MzsrEG3p%FhI9G^Rzm;AGH2obVJ`i%i zMNcB>?}R()qN_k3O45@)+5>4HiO@kG?L~(p!VURo1SLM!^EqJHM=rE98k>cW)_}Vq zXw*kv1sD0f{(`fO`)CtN+|;xAF}{LUAn6}ulRjNR--GLzpl4RnJqZ0ox$_C7$Ddk;O7zz+oyd>Uqg`kdxF} zWk$Xg;Up|WqMB3l z{Y?wN)JW=V%0-83#jSwOqfV_6LAoJD4wA1E$6>rkj9#8@@*pDWj6vOZz2#`YkEk*<*%AgShea!$k zX40o9`?$0);H4|bVGBCpr7?Im2zuR1e@2!@K|l7=ZlJ9q@T8Y6VMI+byg@JR0BSbQ za-ZkCv;{+IVUaxlAum0L?zb7odG(@~{tfhmpkXidqu@6LUGdU(NNbhuu6yZoNZT$` z81+&wxE&&9+)I5xVdDf(Yr;#}DA;D;2AUu`4X)ido)4omyy+%w5BINK+jbTIy)-jAg!L>1rSiyZUy#E27 zt&Hs~RMSn?JXLQ-T|aa-TdSOpQ)ealeMwsn&sb_HZAMff=81m^C3ck2~&UQUgPN zAO4?z^kCZAglP3w+H`_l+|dzs&dkYhx7nTFE(*6cc1B0%EHe_{;xVyM{CwCq@%rA;XBU!hHATReNCvMI;e2` z>Yi#3wYIe=oVgggwl-K-6bj10tS_1o`evKLw#HJguMgJQ6*XmR)&A%Q^M0zGaUCDs zo0Z|xwsT}jzCP;QSW;-j&2mz+SGpI^mN}|>PGfeyd)~t_blEwQov&{@H?j+Lk252u iP(K#kl(WI|=RK;LcXjNvTbsKU=RJ~_7yb3JT;soUb^&_; delta 2996 zcmZ`*dr(y875~1waQEAb9CkrveL^)VP#@p}u-fpD#U+Bg7BiZeu2pbKi&Bk7tx1;} zO(e8Y=1wdoCLsougc!k%E%DJ1W2VlSjyBC$+fGxQBvYME6Vs+M+CO5??`-_D%y9So z&hI>a-?`uY?)}-0FSj4a(WOJV)2*@nLjxb(8@{{Qu0L7+bjK$fYKrDwi?6ko*g=m{ zog?AS-`?Eu^}T!H&UeFIp_^R?>O5}Tlv;h-{g3&F_P95EP$B?FkQdrE(uI8xW#nxD?|vSbx#&gC zw=?zg91x@dn?X=OHXUV+_5=Yr)W;e2L;?Bqo?DfkGqn`KS>n2?=rrnN3%ai8ze(=? z^qg2Ovhp-kf2C+CFUOv(w==qDK$NMCd;6s%$q~fLeUkdd|rT|R;0Wjz)!8b zTyt1JkRHK$U({VO4$oErg}|5eAGvJ$HMVce1c?NkX`nn|EW`xiI;dr}G zN8}rVc)K^UB6C6zZ|N}5n}T>t%Plx5h`00|s2wO`X0 zXb~5(Kbamw(YJ&fOr{G!r={qik2WLkS0Z%SN87N%Ukf+lqrafVuwKXsmwe>KlHN|t z!bi2>&Ir2hqotU?IjjH8)kb~vJ+wHd@l1?Pp!q0zUUzZGrxR!|B7Y-j&qTTdq3>wy zkN%0ui+z9^vRAwb?D2ksvsB<3!bdbJrq*%X7?WmIFi){UWcjU=EKAWwbPQOPY$wqV z(J)P&2wwa{=8FN)+?c!U*gLFe2=XX?Pf@&t^bKLC8&!jtBwX~>x^AV}|`^c(@% z^gF1SYrW6WIg|%xo|Mj~Sy*AdgcZ|yjpwgG(1@ZQ6rV4Fmy`;eKxa%}Q_9y_e9s*i>^_VypmFI?nT~u}Gh<2oQIz=u zRG2Mq#_qPvV|-`zY!FuWTAqx2gy7r6cMNY?t%G+t-gi6!CVa+y%mq1pe4fFywdkvY z|2JOgfSy4aDIS_c0UaNlbR;=xU3+_5y#8C8wEOdftqQM_hKH-$*Z)Z2(TJ3lSBDhN%C@$~P`$$YEgEeM zM;po`4WW>{0vp4TEiEkyucv4AeZ*AWaZEfB$w{XFth4Cwk=Ue{+UXk*+ diff --git a/demo/truncate b/demo/truncate index 86f2e2ba279d63341ddc269275d86b0dcdc9f9b1..866df003ea9b3fe72590aaa63460cf32accd2e7a 100755 GIT binary patch delta 2973 zcmX|Ddr(y875}~q+PjlVYWn%|I)aUEOYGLR>xxR6d`sw zgop&YdOKU1d%`Qb!(BC4Ydf0TI|cqK*(^y(rflQ8yu+7z`-@KBBfFEC(u@g> zZ&LrhLMcP`KIc67ntk3`Bxl(FapuY+_6*9Me~0OmH!9fK?Kq#p@|%z!b6kPEzl>#% z<2vL)$oYmPB&6mLxOzJh!5)W4*Dw znhmwr+0a;lu3cMM^cc@;Z0NYh7vlv#tA*oxoWlsAY||0q97YpNT#nn2n<2Y}Zl2+o z+Eg|&)|{~`)2GLdF=5UKvc}oRmlw@9p0{$Rg;3g%`wdViZJOUJO(AQjtcse z%Q4?lc6?^ff%~!I_{_cwZb)$xg6^ZuVTEo9dIXjSWDHZh%jFF4eFQozR)t7^6~1rF zg{*RJLY>_w zuE2R-!hcIW+F2y|JYK}mz0A!d%LUWX-pf)u||fuLancx4{8r9khfyb`qNVY~ES%&8cTJ&j zCzXSXU6=pjXcJBfBE=0klW!A?sSH6sR)_Sb#q=^vf2Yv4a{3H~-jvvu;c{VMD-c6% zj*-B+@juL)^a0F&FBh?y^J%uT%p&bc=Bb=P%$%qFl*kFKB|WcDR8(?$%eMgfb?0W8<>+_`8jd{!vnruPuKRsj#4MiqVz&F^n2 z08^(z7gHfRtXF1b^eg0P&|(NTB4`(aKcx&u@gdP(;pwKo3y(%^57(UWE{7^xZLZYz zr*fH}F>S8W@bn7$CbFznb2Mo-n5Px6C>hK%8V=Q!=<`{X!%Z6Ue@TmBL>?N0({mcY zpiYxW`+{m=*rH2_5mM-YMdPq+Qs`}qZX-&wLO-!+Gte4U;6aN{VMHxzc!w=&18UWd za-YX7YQ&JjTqMtb#G;qc{aS5^wWlrmH_$qTMlBjZ!Zw92TC@(OwX5zfTl9C7_GLAN zaf^0=Td#_lu;@oX5$ym^Yto`(B<#@e2AU*_gX`3er1JB>J&j+>CMPil*oIY!jd>u9 zaz4Uy5Al7Go`x7vZ8@uT6GW!YZpBg>kMnN@#}izPG;yB75#ttQD%7UqD)f$}EYEOQ zkf#J#&T*u25i(}AFt{rmv$!(p>}JrfB}##ZTHdS#hL^%Jf#IldLjuEB;eiC+`Vh|) zT9^x!bc1Wol78fMq0VGuiG3tH?NR*HnVN;tGT@ZdKd^b~Vsw!Ck^RT)JU{WTpX{%| zEf1eStv{0e4j-q?1EKXd@i^444av&XA$(4yoc1wWnv?2flbY0LH8JE*pw#25-0_q+ z&0H&sLRHadMD%ucx3B9Aw|ZLIn!7|tXp=v@Np!bGyLvqBojt7R{#s?Ey}3KSJLd^) z$|;@`SIU20dwkXpVxiE|dVg(AASiH#OZ~O&-8}+djKVlLivOfL(s6?i`-=<1qU?=t0$w@`H}oCCHeH|tqEVb!fmqn)h+Pc@sb@`oB% z)&*<)UV(*c?ClJ;cZ3DDEWy?{cpEE&UbTvW%HYNhfpbhGS{d**hHC1n>&4diuH1KI ze93H&A-#5UL8)AC?=7g17wl^V6{(+2S0fYuv}YBTrv7180-d#+3rpp&y|=JJ`s{0b g-4mZybklH^EEKIh(XLQ?>x)GtkC&9hjgsr~za*y(RR910 delta 2987 zcmX|D4Nz3q6~6bey!ZCW9+n^DLZYCy2nvd*fFTw{mh37Zg*Dc;nN+sORkmKh7@JbwQElO7)I~ zdjEK>|JLo>q2BYMzTmaK{>CJ?*$U74Ke<52H-zkIWOc%s-9n`W&vWYJGY@E`tRYrE$$||&NBKTw>Z+Nl%lMP_x|b<$$sqfi z)AS%41Zc!$5D<_{N4Z8bOF%vyVh=N0KrxNE^HTF?EQ4{5s4gpd32|}-T~+kC$K8^e zADaiSxf)gfQ&AbWV;1TkGy0dJIM-zs>y3;a)$|^?g}RN=ZcQQnFiZ4KcHg5Z1EEWG zAEO>k6|k(-yV;~)6GmZ%^nOPBHDMTLSkREBRyW|kd+o>2)#)O(IH73~Dr%65#xz|A z*Qf_rc|ohx4?w=`@8-q>=E+V*&OTV2f~cHJX!!ItmTjlR-RrN4eT{2LvORBdD@Hr( zt#By{YeyJP4^$5o=bvL+P;U*L%c~nf@< z1l`~whdA6tsIYmJDs3Np_vuPj`F8T7%HFT@xC}bTynR4YD0&A~4hpbo6I`AY;HMUD z*FGp9Ko6qdU+caYo9C*u|Dv6z^j|n^`n&8jImQfjomk1U)8>Hx$i*>2t#I zy3dB?Zw2wXH*iJv^MZJ#R{*^rh*w%(!Er&n(l=4{sIFyqUg@PkFA5sg6gz+vFG;T> znm$H~xR4{sv;{$57H%||&H%k4K}WsR0l!zJ&=X$jLWi#jH|C`)NO3|hW`}VvdC}7E z60`8qN^mCyUG>s8Fn{}$zRA%hytED}PU`~xn8>0c1U;ks*yN)udJL9l1$AfBe^BT- zjr|zORu=XEF=SV)1WvNP!Z|AK63oYR37h%q*)GLSHENir*dloOjpJOFqKA<&&8TJB zL+wbIF2Gi4R}dk?NM)z=tITw3`z~V#LZl$VG_h0kXP5!*Qk3j=^-1@k=f?{S}T; z9hHfkJ}DO*({xVL^W~>ANUxr8r(T=_X2B zB~!R+(jIViQp|)&PXN^$hj?0(CKV%LgMme!v}pv~YU4O_J>D3f%Nd-+8e$u$WL0h} z3tMsS4!)(*QW2xksA9EggUFb|ZpB(#1^m0gso-L?jlED#H@Bd@P}|NG=$)l3Pj^xv zPYJV}NR$E(DJ3(3;U!on@VYy=F@fPL{7?e#xPxaX z<6-2Ycev(EUCqsFKkD>YRs5Wz)R!W#`XGJ*P0d7=>F`e)7}_M^K{AP6?2xDM9Pey)(e8DE(qqt?Y&iXrNv0s-1$D7ojvYsJdhhHSe z*9YRso{gQI?eX*(-_vd^Cnr9VbFVSwA`gRW;J*s@`pjR&V4`qgMx!fM*Vl!cBMNV9 zMSWe{BU=?NhNiW3oe%v$VbLSYtLuUaCtrJebMTuAw^cOS9EvtoN1B2`xzL(Jk*?NO zh07)yja1hmY;;v{ox&*=+1S3Sb%(-9l^|oG;PRSiO|VwsKx4Y5b(6v|l%Q+Fb-^0( z#$i+20%x2rcOo~`gd@?~x*9o$YFk!xcC;vbrI~-AKH9XVArh|Vf_bf)wsl0>Hn;M< zdWT)z7;IWTD-x7NY+fGu(Po9WmjwxTk9&^=sKsjJ*ce)h*_&VS$XFDX$i WTRXd=Z7tj9mo8eeIG$SiSN%T=M*Tqm diff --git a/demo/update b/demo/update index 2fd3380815025cebb7437214e1d22a4612e2aee3..f4be5b204403c8a54d77ea012c70bcf8a4e55cd5 100755 GIT binary patch delta 2977 zcmY*b3s6+&75@JV?7h409(FwS@FLcC}bqNQ#_V?$R{U1w8AW!u_zafx-U4b5!=f3<9spd>>+#!m@UZ5~Pv+|iTB zl%}88_#rJnS14((>2~JJm(754p1jk1(wQaSGhcOP75t6qq}?SP!EHN|#PXYvXW5QJ z-c!u7$94*GKja+SR`Z&(Fn1p(OFFt-3ZeJ0`c)PT@R`E#B~ufYWLd;d>Naa!a~Jlq zzh#Deg$>;FYo3GK;~Fh97097o>|se)z)PpiL03-3QW$3{)mcG38o@t~mZpq+U5{$%S z+=|x3dVQ&%4YfWt)T_|7a~q2u{Sl1~ZQt;R{%AF;h3z@cp+`}+VXNXCdOb{>wu_J( zAiIUdILV{Y!$eDisK{u8Myt5n-ugN+8j{ms-Wqx9F#Fk@j92&$InsduvaC* z^)h@9NSuwMi$Cg(cV#Y@L9a1yyr)tKI)N%j6fme0E(aBG(j&-rNC7v6cs9mixs$Cu z^cJ!lQD9WWgzMjE?x;M)>XbV3OeMVXHeRCRp^L=n$h6}#f>`X3{w0~=CZ@MgKi<_M0^$w zDhKy_g(e)d0PV&;m)~%-Ne6|H;-Z|*kIDO~5JA6ChxDiWX){bODfHYTx`v>aCAMW? zk2?n#ddaMp0jEOo*HYLi(=gZdA|<2>yUF9LIY^d!DE3+6|A8wu@^{Il!Tc zR~U8L9xIo5gK1;AhHtN+PGni3=4enBm_EFd`3~ zfz!hpK);2~A?>58g#kN#i0Dy;2JLhKmh}o9u+wG4Z&2u$cIp6HtqL5n(-=myMh$Po zPV0agwL{$J5j%yDy@`wD`H$LZ8@gYs?Pu+no&E*%Q-#Lu^a~_>OrcYD3Zt}U)!kV; zT}5f@)D$M{v(IPMQ^^rNAknw{J_@yQuDaczsja zeP}54ytyHLZZLy?3(a^Kd>-D2T5rpYA;ioBq4n1DbkuK;ui3=9A8%JFXMVw!#uat< zSQDJd^$huq`1SA~(~l+%_j}gLq-a@tdy8qEP|6pKd7msJNV!x4dFE3XbVcXshv2oYKlY+tipVA~_5WkH|7E!ff$_B|l*9*ai9 zfoP~K67u=ft1cXfbTl;yym+F~NLdhJqgB3@0ykP@bxT##(*n0voDBF%E20%Xzlh;- zW4fYgt-zHOr~Q>dUxo6<#p7>;Gwzz(k!va{BT;{_LfuLJ#`5;IMuG1&^UJHFp}Lw# zWwlRWF01v0N+UkCjN#Imk&UeaM;Q-Y7xsmsl{NllqI)=J?yuzV z#1B2XjF>m)70DZBL4JvR(0n|<#JVj*jZl1R9?UPYZqAOQ6XwnQB3Wh@cuVA@`8a>} g48QGNWH<}&6^&i(9nt2-r{)zdC@dVFDxR(V7qcV{T>t<8 delta 3002 zcmY*bdr(y875}~q-2L_{hg}d^XjGzBL8GiMkfxRAZWmo1fmO#i(^UgeQWQsx5ly-o zLn4MuDs!u2q9!C_MMNwYp&c;2P^cX@L}_ z_6|k%{$jN2?!9}Fy;mdMq0#Pr4Jqzcv&!nz?tA7YZm)V*|IhVLU;LlzV5V~~Rj0d| z85uhN2#{uo152eYgxXvWlPPbN88o=ytZ*|>n4T2FgtNw{xf<5Uo}vpdm$q- z@w=%^S)LCqzG=HhP+FfG@D=HUZp1fN``jmd)AS|xkZ;<&-!q-|S{Y{uIA_w>ejWCG z&IQ;<7qgx3T!q~SyTIAw-u4w24sfxw%PX`}o?c!)#D)PsMWv52HEd_-624QHTj!s# z=sAwJbM(vX5TKJbgMfg1I?NjFTmc1igd^-c0YQ4(J>f5yR0iiMvUE$)E69^CXjswb z?q~kOL?MD^X^8%tqD8zL`vLs~qkk&uXIXYouVeJIruV_k)2)nlYl`sAp09Ut_%oXP z$Xu+u8FgtYg=d-G%`W>ip%ZpQA7pe;6MA9S2P*f+1 zhBW;ST!Zf6#cNt+{08J%UkC3yU|(ow~1E-*e`t_Uv`*h^hI7G z7emk~T~M^1Gn;3HFmx6X&uM76uILjMY4(U8Khrq4F5&o@c7oe0+=wEbsuIdPFK|>* zE?m0>-C>cvobCpeFnDFk{~}^v&}F=o-ocl0b5PG<8FZL=^OBTM^mC|uS%9Gp2stFc zN9%aI=CFVOHDbR!5AH|OlM;A`I|A1M z;dtDq!SfA4Jnm6eWPTusN4f&&O+h@;@(4}|;*tIeG}sgc3iL zz4mMRBT5Vk*`G%3NP1Sd(`keuFmFlH(_Y$)xF3nob6)xucKBoAhP?CvN}SURIpDgN z?jq;;WG}oF0e3;ru$LB~|K_6poU@I1X(dWr(uI5*$)(vydRcd~%O|d@l{0mtWzvY(F#=b zTVb|SX)Ow73NXt5D`d#BGB_ynU1mD9nP_z&#a#sDh@YYl;1&=fRe4ZiFaLjecKTn$ zFy&eeyp;YdCuuN=nbtzXN&b!`1r}amMXjh@n5;}4XxJP3rnYzRpcY|BQiuiA-yJz}=1Y8t8pYeEA zeQmU+DW>rJs%oRHTem5ECK^{p+aLM1!q~?uDx)EVbFi(gDfE!Sw<{iRio_c$V~wGZ zeBPQOu`Mkv3ZI^MJXRS++W4~2DupvGwyteiONYX_l_V39P(^jTIuuqo-k7d#c~s$0 zO48w)XsBAEarA_n5scGjEOT9TO)MUcR?DdrZmw$I)U5D=GryuX-nhIjR#VG@dB_?c z-xO=z*ur1gF}A)T)L1b!7Lu`Ss)%jhsPIgash2l}8sjx};d<3ExNycB+8xoUgCjHZ zJ$k9Di%RroZfQ}Ou5&wz%DlTKNk7%6?$x3a@A~OUbko(r5?$<;2FvuY+riha!Slf- c#pstVoid = (void *)&(s); \ }while(0); -#define insertinit(p,s,t) do{ \ - p->lSize = sizeof(s); \ - p->tblName = t; \ - p->pstVoid = (void *)&(s); \ - }while(0); - #define conditinit(p,s,t) do{ \ p->stCond.uFldcmp = 0; \ p->stUpdt.uFldcmp = 0; \ @@ -362,15 +356,26 @@ typedef long CREATE; #define decorate(p,d,f,v) vSetDecorate(&p->stUpdt, FLEN(d, f), FPOS(d, f), v); \ p->lFind = (v) & FIRST_ROW; -#define conditset(p,s,f) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); - #define stringreset(s,f,v) strncpy((s).f, v, sizeof((s).f)); #define stringresetv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); #define stringrecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); #define numberreset(s,f,v) (s).f = v; +#define conditset(p,s,f) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); + +#define conditbind defineinit +#define conditfld conditset +#define conditnum numberset +#define conditstr stringset +#define conditcpy stringcpy +#define conditstv stringsetv +#define conditrenum numberreset +#define conditrestr stringreset +#define conditrecpy stringrecpy +#define conditrestv stringresetv // UPDATE Field assignment -#define updateinit(s) memset(&(s), 0, sizeof(s)); +#define updateinit(p, s) memset(&(s), 0, sizeof(s)); +//#define updateinit(p, s) p->stUpdt.uFldcmp = 0; memset(&(s), 0, sizeof(s)); #define stringupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ strncpy((s).f, v, sizeof((s).f)); @@ -381,8 +386,23 @@ typedef long CREATE; #define numberupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); \ (s).f = v; -#define updateset(p,s,f) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); +#define updatestrv(p,s,f,...) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + snprintf((s).f, sizeof((s).f), __VA_ARGS__); +#define updateset(p,s,f) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); +#define updatefld updateset +#define updatenum numberupd +#define updatestr stringupd +#define updatecpy stringupy +#define updatestv updatestrv +#define updaterenum(s,f,v) (s).f = v; +#define updaterestr(s,f,v) strncpy((s).f, v, sizeof((s).f)); +#define updaterecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); +#define updaterestv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); + +#define aliasreset(p,t) lResetDefine(p, t); +#define aliasvalue(p,t,s,a,v) lSetTructByAlias(p, t, s, a, v); +#define aliasset(p,t,s,f,v) lSetAlias(p, t, FLEN(s, f), FPOS(s, f), v); /************************************************************************************************* Table structure & index definition area *************************************************************************************************/ @@ -653,6 +673,7 @@ extern char* sGetTableName(TABLE t); extern void* pGetAddr(SATvm *pstSavm, TABLE t); extern RunTime* pGetRunTime(SATvm *pstSavm, TABLE t); extern void* pGetNode(void *pvData, size_t lOfs); +extern long lResetDefine(SATvm *pstSavm, TABLE t); extern void* pInitMemTable(SATvm *pstSavm, TABLE t); extern void* pInitHitTest(SATvm *pstSavm, TABLE t); extern long lTableMaxRow(SATvm *pstSavm, TABLE t); @@ -665,6 +686,7 @@ extern TblKey* pFindField(TblKey *pstIdx, long lNum, char *pszField); extern long lGetTblField(TABLE t, size_t *plOut, TField **ppstField); extern void vSetCodField(FdCond *pstCond, uint ulen, uint uPos); extern bool bSetCondAttr(FdCond *pstCond, TABLE t, Uenum eCheck); +extern long lSetAlias(SATvm *pstSavm, TABLE t, uint ulen, uint uPos, char *alias); extern void vSetDecorate(FdCond *pstCond, uint ulen, uint uPos, Uenum em); extern long lGetDomainIndex(SATvm *pstSavm, long *plOut, TIndex **ppstIndex); extern long lGetDomainTable(SATvm *pstSavm, long *plOut, TDomain **ppstDomain); @@ -729,6 +751,7 @@ extern long lExportFile(TABLE t, char *pszFile, char *pszFlag); extern long lImportTable(TABLE t, size_t lCount, void *psvOut); extern long lExportTable(TABLE t, size_t *plOut, void **ppsvOut); extern long lDumpTable(SATvm *pstSavm, TABLE t); +extern void vSetTructByAlias(SATvm *pstSavm, TABLE t, void *pvData, const char *key, char *v); extern long lRenameTable(SATvm *pstSavm, TABLE to, TABLE tn); extern long lCreateSeque(SATvm *pstSavm, char *pszSQName, uint uIncre); diff --git a/src/stvm.c b/src/stvm.c index df0b0c1..46d4185 100644 --- a/src/stvm.c +++ b/src/stvm.c @@ -68,7 +68,7 @@ static char* sGetTVMVers() sprintf(szVersion + strlen(szVersion), "Release STVM %s Production on %s %s\n", TVM_VERSION, sinf.sysname, sinf.machine); - strcat(szVersion, "Author:DeffPuzzL\n"); + strcat(szVersion, "Author:Savens Liu\n"); strcat(szVersion, "Mail:deffpuzzl@qq.com\n"); return szVersion; @@ -1175,6 +1175,139 @@ SQLFld* pSortSQLField(SQLFld *pstRoot) return pstRoot; } +/************************************************************************************************* + description:show stvm tables + parameters: + RC_SUCC --success + RC_FAIL --failure + *************************************************************************************************/ +long lShowTables(SATvm *pstSavm) +{ + char szTable[128]; + TIndex stIndex, *pstIndex = NULL; + long i, lRows = 0, lTime = lGetTiskTime(); + + if(RC_SUCC != lInitSATvm(pstSavm, SYS_TVM_INDEX)) + return RC_FAIL; + + conditinit(pstSavm, stIndex, SYS_TVM_INDEX); + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); + + if(RC_SUCC != lQuery(pstSavm, &lRows, (void **)&pstIndex)) + return RC_FAIL; + + fprintf(stdout, "table table_name\n"); + for(i = 0; i < lRows; i ++) + { + memset(szTable, 0, sizeof(szTable)); + if(!strcmp(pstIndex[i].m_szPart, pstIndex[i].m_szOwner)) + strcpy(szTable, pstIndex[i].m_szTable); + else + snprintf(szTable, sizeof(szTable), "%s@%s", pstIndex[i].m_szPart, pstIndex[i].m_szTable); + fprintf(stdout, "%3d %s\n", pstIndex[i].m_table, szTable); + } + + lTime -= lGetTiskTime(); + TFree(pstIndex); + fprintf(stdout, "---(%ld) records selected, ep(%d), %s---\n", pstSavm->m_lEffect, + pstSavm->m_lEType, sGetCostTime(-1 * lTime)); + return RC_SUCC; +} + +/************************************************************************************************** + description:Output table space Usage + parameters: + return: + **************************************************************************************************/ +void vPrintAmount(int t, char *pszTable, int nValid, int nMax) +{ + double dPer; + int i, nPer; + + if(nValid < 0 || nMax <= 0) return ; + + dPer = nValid * 100.0 / nMax; + nPer = nValid * 50 / nMax > 0 ? nValid * 50 / nMax : 1; + + fprintf(stdout, "TABLE:[%3d][%-20s]: [", t, pszTable); + if(dPer < 60.00) + fprintf(stdout, "\033[42;32m"); + else if(dPer < 70.00) + fprintf(stdout, "\033[45;35m"); + else if(dPer < 80.00) + fprintf(stdout, "\033[46;36m"); + else if(dPer < 90.00) + fprintf(stdout, "\033[43;33m"); + else + fprintf(stdout, "\033[41;31m"); + + fflush(stdout); + for(i = 0; i < nPer; i ++) + { + fprintf(stdout, "|"); + fflush(stdout); + } + + fprintf(stdout, "\033[0m"); + for(i; i < 50; i ++) + fprintf(stdout, " "); + fprintf(stdout, "] %.4f%%, (%d/%d)\n", dPer, nValid, nMax); + fflush(stdout); +} + +/************************************************************************************************** + description:print system table space usage + parameters: + return: + **************************************************************************************************/ +void vTableAmount() +{ + size_t i, lOut = 0; + char szTable[128]; + RunTime *pstRun = NULL; + TIndex stIndex, *pstIndex = NULL; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + memset(&stIndex, 0, sizeof(TIndex)); + stIndex.m_lLocal = RES_LOCAL_SID; + + pstSavm->pstVoid = &stIndex; + pstSavm->bSearch = TYPE_SYSTEM; + pstSavm->tblName = SYS_TVM_INDEX; + pstSavm->lSize = sizeof(TIndex); + if(RC_SUCC != lQuery(pstSavm, &lOut, (void *)&pstIndex)) + { + if(NO_DATA_FOUND == pstSavm->m_lErrno) + pstSavm->m_lErrno = TBL_NOT_FOUND; + return ; + } + + if(lOut <= 0) return ; + + fprintf(stdout, "The amount of table is using as follows:\n\n"); + for(i = 0; i < lOut; i ++) + { + pstRun = (RunTime *)pGetRunTime(pstSavm, pstIndex[i].m_table); + pstRun->m_shmID = pstIndex[i].m_shmID; + if(NULL == (pstRun = pInitHitTest(pstSavm, pstIndex[i].m_table))) + continue; + + memset(szTable, 0, sizeof(szTable)); + if(!strcmp(pstIndex[i].m_szPart, pstIndex[i].m_szOwner)) + strcpy(szTable, pstIndex[i].m_szTable); + else + snprintf(szTable, sizeof(szTable), "%s@%s", pstIndex[i].m_szPart, pstIndex[i].m_szTable); + + vPrintAmount(pstIndex[i].m_table, szTable, lGetTblValid(pstIndex[i].m_table), + lGetTblRow(pstIndex[i].m_table)); + vTblDisconnect(pstSavm, pstIndex[i].m_table); + } + TFree(pstIndex); + fprintf(stdout, "\n"); + + return ; +} + /************************************************************************************************* description:Printing system index parameters: @@ -3474,6 +3607,13 @@ long lExecuteSQL(SATvm *pstSavm, char *pszSQL) sGetTError(pstSavm->m_lErrno)); return RC_SUCC; } + else if(!strcasecmp(pszSQL, "show tables")) + return lShowTables(pstSavm); + else if(!strcasecmp(pszSQL, "show info")) + { + vTableAmount(); + return RC_SUCC; + } else if(!strncasecmp(pszSQL, "comment ", 8)) return _lCommentSyntax(pstSavm, pszSQL + 8, false); else if(!strncasecmp(pszSQL, "select ", 7)) @@ -3716,93 +3856,6 @@ void vPrintParam(char *pszOpt) return ; } -/************************************************************************************************** - description:Output table space Usage - parameters: - return: - **************************************************************************************************/ -void vPrintAmount(int t, char *pszTable, int nValid, int nMax) -{ - double dPer; - int i, nPer; - - if(nValid < 0 || nMax <= 0) return ; - - dPer = nValid * 100.0 / nMax; - nPer = nValid * 50 / nMax > 0 ? nValid * 50 / nMax : 1; - - fprintf(stdout, "TABLE:[%3d][%-20s]: [", t, pszTable); - if(dPer < 60.00) - fprintf(stdout, "\033[42;32m"); - else if(dPer < 70.00) - fprintf(stdout, "\033[45;35m"); - else if(dPer < 80.00) - fprintf(stdout, "\033[46;36m"); - else if(dPer < 90.00) - fprintf(stdout, "\033[43;33m"); - else - fprintf(stdout, "\033[41;31m"); - - fflush(stdout); - for(i = 0; i < nPer; i ++) - { - fprintf(stdout, "|"); - fflush(stdout); - } - - fprintf(stdout, "\033[0m"); - for(i; i < 50; i ++) - fprintf(stdout, " "); - fprintf(stdout, "] %.4f%%, (%d/%d)\n", dPer, nValid, nMax); - fflush(stdout); -} - -/************************************************************************************************** - description:print system table space usage - parameters: - return: - **************************************************************************************************/ -void vTableAmount() -{ - size_t i, lOut = 0; - RunTime *pstRun = NULL; - TIndex stIndex, *pstIndex = NULL; - SATvm *pstSavm = (SATvm *)pGetSATvm(); - - memset(&stIndex, 0, sizeof(TIndex)); - stIndex.m_lLocal = RES_LOCAL_SID; - - pstSavm->pstVoid = &stIndex; - pstSavm->bSearch = TYPE_SYSTEM; - pstSavm->tblName = SYS_TVM_INDEX; - pstSavm->lSize = sizeof(TIndex); - if(RC_SUCC != lQuery(pstSavm, &lOut, (void *)&pstIndex)) - { - if(NO_DATA_FOUND == pstSavm->m_lErrno) - pstSavm->m_lErrno = TBL_NOT_FOUND; - return ; - } - - if(lOut <= 0) return ; - - fprintf(stdout, "The amount of table is using as follows:\n\n"); - for(i = 0; i < lOut; i ++) - { - pstRun = (RunTime *)pGetRunTime(pstSavm, pstIndex[i].m_table); - pstRun->m_shmID = pstIndex[i].m_shmID; - if(NULL == (pstRun = pInitHitTest(pstSavm, pstIndex[i].m_table))) - continue; - - vPrintAmount(pstIndex[i].m_table, pstIndex[i].m_szTable, lGetTblValid(pstIndex[i].m_table), - lGetTblRow(pstIndex[i].m_table)); - vTblDisconnect(pstSavm, pstIndex[i].m_table); - } - TFree(pstIndex); - fprintf(stdout, "\n"); - - return ; -} - /************************************************************************************************** description:STVM operation function description parameters: @@ -4014,7 +4067,9 @@ void vSQLStatement(int argc, char *argv[]) strimcrlf(szSQL); sltrim(szSQL); srtrim(szSQL); - if(!strlen(szSQL)) continue; + if(!strlen(szSQL) || !strncmp(szSQL, "--", 2) || !strncmp(szSQL, "//", 2) || + '#' == szSQL[0]) + continue; add_history(szSQL); sfieldreplace(szSQL, '\t', ' '); @@ -4110,7 +4165,7 @@ void vConnectDomain(char *pszDomain, TBoot *pstBoot) } conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); - stringset(pstSavm, stDomain, m_szOwner, pszDomain); + conditstr(pstSavm, stDomain, m_szOwner, pszDomain); decorate(pstSavm, TDomain, m_szOwner, FIRST_ROW); if(RC_SUCC != lSelect(pstSavm, (void *)&stDomain)) { @@ -4157,7 +4212,7 @@ void vPullTableDomain(char *pszParam) } conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); - stringset(pstSavm, stDomain, m_szOwner, sgetvalue(pszParam, "/", 1)); + conditstr(pstSavm, stDomain, m_szOwner, sgetvalue(pszParam, "/", 1)); if(!strlen(strimall(stDomain.m_szOwner))) { fprintf(stderr, "*illegal domain name\n"); @@ -4169,7 +4224,7 @@ void vPullTableDomain(char *pszParam) strncpy(szTable, sgetvalue(szCmd, " ", 1), sizeof(szTable)); strimall(szTable); - stringset(pstSavm, stDomain, m_szTable, sgetvalue(szTable, "@", 1)); + conditstr(pstSavm, stDomain, m_szTable, sgetvalue(szTable, "@", 1)); supper(stDomain.m_szTable); if(!strlen(stDomain.m_szTable)) { @@ -4177,7 +4232,7 @@ void vPullTableDomain(char *pszParam) return ; } - stringset(pstSavm, stDomain, m_szPart, sgetvalue(szTable, "@", 2)); + conditstr(pstSavm, stDomain, m_szPart, sgetvalue(szTable, "@", 2)); if(!strlen(stDomain.m_szPart)) strcpy(stDomain.m_szPart, stDomain.m_szOwner); diff --git a/src/tcp.c b/src/tcp.c index 7eb6e1d..4934510 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -775,14 +775,14 @@ long lUpdateDomain(SATvm *pstSavm, char *pszIp, long lPort, long lStatus) if(RC_SUCC != lInitSATvm(pstSavm, SYS_TVM_DOMAIN)) return RC_FAIL; - updateinit(stUpdate); + updateinit(pstSavm, stUpdate); conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); - numberset(pstSavm, stDomain, m_lPort, lPort) - stringset(pstSavm, stDomain, m_szIp, pszIp); + conditnum(pstSavm, stDomain, m_lPort, lPort) + conditstr(pstSavm, stDomain, m_szIp, pszIp); - numberupd(pstSavm, stUpdate, m_lStatus, lStatus); + updatenum(pstSavm, stUpdate, m_lStatus, lStatus); if(RESOURCE_ABLE != lStatus) - numberupd(pstSavm, stUpdate, m_lPers, 0); + updatenum(pstSavm, stUpdate, m_lPers, 0); if(RC_SUCC != lUpdate(pstSavm, (void *)&stUpdate)) { Tlog("update domain (%s:%d) failure, %s\n", pszIp, lPort, sGetTError(pstSavm->m_lErrno)); @@ -813,10 +813,10 @@ long _lRemodeIndex(SATvm *pstSavm, TFace *pstFace, TDomain *pstDom, TIndex *p return RC_FAIL; conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); - numberset(pstSavm, stDomain, m_lPort, pstDom->m_lPort); - stringset(pstSavm, stDomain, m_szIp, pstDom->m_szIp); - numberupd(pstSavm, stRemote, m_lStatus, RESOURCE_AUTH); - numberupd(pstSavm, stRemote, m_lPers, 0); + conditnum(pstSavm, stDomain, m_lPort, pstDom->m_lPort); + conditstr(pstSavm, stDomain, m_szIp, pstDom->m_szIp); + updatenum(pstSavm, stRemote, m_lStatus, RESOURCE_AUTH); + updatenum(pstSavm, stRemote, m_lPers, 0); if(RC_SUCC != lUpdate(pstSavm, (void *)&stRemote)) { if(NO_DATA_FOUND != pstSavm->m_lErrno) @@ -826,20 +826,20 @@ long _lRemodeIndex(SATvm *pstSavm, TFace *pstFace, TDomain *pstDom, TIndex *p conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); for(i = 0; i < pstFace->m_lRows; i ++) { - numberset(pstSavm, stDomain, m_lPort, pstDom->m_lPort); - numberset(pstSavm, stDomain, m_mtable, pstIndex[i].m_table); - stringset(pstSavm, stDomain, m_szIp, pstDom->m_szIp); + conditnum(pstSavm, stDomain, m_lPort, pstDom->m_lPort); + conditnum(pstSavm, stDomain, m_mtable, pstIndex[i].m_table); + conditstr(pstSavm, stDomain, m_szIp, pstDom->m_szIp); - updateinit(stRemote); - numberupd(pstSavm, stRemote, m_lLastTime, time(NULL)); - numberupd(pstSavm, stRemote, m_lTryTimes, 0); - numberupd(pstSavm, stRemote, m_lStatus, RESOURCE_ABLE); - numberupd(pstSavm, stRemote, m_skSock, pstDom->m_skSock); - numberupd(pstSavm, stRemote, m_lPers, pstIndex[i].m_lPers); - numberupd(pstSavm, stRemote, m_mtable, pstIndex[i].m_table); - numberupd(pstSavm, stRemote, m_lRowSize, pstIndex[i].m_lRowSize); - stringupd(pstSavm, stRemote, m_szPart, pstIndex[i].m_szPart); - stringupd(pstSavm, stRemote, m_szTable, pstIndex[i].m_szTable); + updateinit(pstSavm, stRemote); + updatenum(pstSavm, stRemote, m_lLastTime, time(NULL)); + updatenum(pstSavm, stRemote, m_lTryTimes, 0); + updatenum(pstSavm, stRemote, m_lStatus, RESOURCE_ABLE); + updatenum(pstSavm, stRemote, m_skSock, pstDom->m_skSock); + updatenum(pstSavm, stRemote, m_lPers, pstIndex[i].m_lPers); + updatenum(pstSavm, stRemote, m_mtable, pstIndex[i].m_table); + updatenum(pstSavm, stRemote, m_lRowSize, pstIndex[i].m_lRowSize); + updatestr(pstSavm, stRemote, m_szPart, pstIndex[i].m_szPart); + updatestr(pstSavm, stRemote, m_szTable, pstIndex[i].m_szTable); if(RC_SUCC != lUpdate(pstSavm, (void *)&stRemote)) { @@ -879,8 +879,8 @@ long _lLocalIndex(SATvm *pstSavm, TFace *pstFace, BSock skSock) return RC_FAIL; conditinit(pstSavm, stIndex, SYS_TVM_INDEX); - numberset(pstSavm, stIndex, m_lType, TYPE_CLIENT); - numberset(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); + conditnum(pstSavm, stIndex, m_lType, TYPE_CLIENT); + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); if(RC_SUCC != lQuery(pstSavm, (size_t *)&pstFace->m_lRows, (void *)&pvOut)) { if(NO_DATA_FOUND != pstSavm->m_lErrno) @@ -2208,7 +2208,7 @@ long lCacheDomain(SATvm *pstSavm, Benum eMode, long lPort) for(list = pGetTblgrp(); list; list = list->pstNext) { conditinit(pstSavm, stDomain, SYS_TVM_DOMAIN); - numberset(pstSavm, stDomain, m_table, *((TABLE *)list->psvData)); + conditnum(pstSavm, stDomain, m_table, *((TABLE *)list->psvData)); if(RC_SUCC != lQuery(pstSavm, &lOut, (void *)&pstDom)) return RC_FAIL; @@ -3471,10 +3471,10 @@ long _lRenameTableByRt(SATvm *pstSavm, TABLE to, TABLE tn) if(RC_SUCC != lInitSATvm(pstSavm, SYS_TVM_DOMAIN)) return RC_FAIL; - updateinit(stUpd); + updateinit(pstSavm, stUpd); conditinit(pstSavm, stDom, SYS_TVM_DOMAIN); - numberset(pstSavm, stDom, m_table, to) - numberupd(pstSavm, stUpd, m_table, tn); + conditnum(pstSavm, stDom, m_table, to) + updatenum(pstSavm, stUpd, m_table, tn); if(RC_SUCC != lUpdate(pstSavm, &stUpd)) return RC_FAIL; @@ -5077,9 +5077,9 @@ long lTvmGetTblIndex(SATvm *pstSavm, char *pszTable, char *pszPart, TIndex *p pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX); - stringset(pstSavm, stIndex, m_szPart, pszPart); - stringset(pstSavm, stIndex, m_szTable, pszTable); - numberset(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); + conditstr(pstSavm, stIndex, m_szPart, pszPart); + conditstr(pstSavm, stIndex, m_szTable, pszTable); + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); if(RC_SUCC != lTvmSelect(pstSavm, (void *)pstIndex)) { if(NO_DATA_FOUND == pstSavm->m_lErrno) @@ -5106,7 +5106,7 @@ long lTvmGetTblField(SATvm *pstSavm, TABLE t, size_t *plOut, TField **ppstFie TField stField; conditinit(pstSavm, stField, SYS_TVM_FIELD) - numberset(pstSavm, stField, m_table, t); + conditnum(pstSavm, stField, m_table, t); return lTvmQuery(pstSavm, plOut, (void **)ppstField); } diff --git a/src/tree.c b/src/tree.c index eee3883..b7b1216 100644 --- a/src/tree.c +++ b/src/tree.c @@ -1512,8 +1512,8 @@ void* pPartSATvm(SATvm *pstSavm, char *pszTable, char *pszPart) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - stringset(pstSavm, stIndex, m_szPart, pszPart); - stringset(pstSavm, stIndex, m_szTable, pszTable); + conditstr(pstSavm, stIndex, m_szPart, pszPart); + conditstr(pstSavm, stIndex, m_szTable, pszTable); if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) { if(NO_DATA_FOUND == pstSavm->m_lErrno) @@ -1559,7 +1559,7 @@ long lInitSATvm(SATvm *pstSavm, TABLE t) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_table, t) if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) { if(NO_DATA_FOUND == pstSavm->m_lErrno) @@ -1619,6 +1619,118 @@ key_t yGetIPCPath(SATvm *pstSavm, Benum em) return tKey; } +/************************************************************************************************* + description:set alise + parameters: + pstSavm --stvm handle + t --table + return: + RC_SUCC --success + RC_FAIL --failure + *************************************************************************************************/ +long lSetAlias(SATvm *pstSavm, TABLE t, uint ulen, uint uPos, char *alias) +{ + register int i; + TblKey *pstKey = (TblKey *)pGetTblKey(t); + + for(i = 0; i < lGetFldNum(t); i ++) + { + if(pstKey[i].m_lLen != ulen || pstKey[i].m_lFrom != uPos) + continue; + + strncpy(pstKey[i].m_szAlias, alias, sizeof(pstKey[i].m_szAlias)); + return RC_SUCC; + } + + return RC_FAIL; +} + +/************************************************************************************************* + description:map the member of struct value by alias + parameters: + pstSavm --stvm handle + t --table + return: + RC_SUCC --success + RC_FAIL --failure + *************************************************************************************************/ +long lSetTructByAlias(SATvm *pstSavm, TABLE t, void *pvData, const char *key, char *v) +{ + register int i; + TblKey *pstKey = (TblKey *)pGetTblKey(t); + + for(i = 0; i < lGetFldNum(t); i ++) + { + if(strcmp(pstKey[i].m_szAlias, key)) + continue; + + switch(pstKey[i].m_lAttr) + { + case FIELD_CHAR: + switch(pstKey[i].m_lLen) + { + case 1: + memcpy(v + pstKey[i].m_lFrom, v, pstKey[i].m_lLen); + return RC_SUCC; + default: + strncpy(v + pstKey[i].m_lFrom, v, pstKey[i].m_lLen); + return RC_SUCC; + } + return RC_SUCC; + case FIELD_DOUB: + switch(pstKey[i].m_lLen) + { + case 4: + *((float *)(v + pstKey[i].m_lFrom)) = atof(v); + return RC_SUCC; + case 8: + *((double *)(v + pstKey[i].m_lFrom)) = atof(v); + return RC_SUCC; + default: + return RC_SUCC; + } + return RC_SUCC; + case FIELD_LONG: + switch(pstKey[i].m_lLen) + { + case 2: + *((sint *)(v + pstKey[i].m_lFrom)) = atoi(v); + return RC_SUCC; + case 4: + *((int *)(v + pstKey[i].m_lFrom)) = atoi(v); + return RC_SUCC; + case 8: + *((llong *)(v + pstKey[i].m_lFrom)) = atol(v); + return RC_SUCC; + default: + return RC_SUCC; + } + return RC_SUCC; + } + } + + return RC_FAIL; +} + +/************************************************************************************************* + description:restore the table define from memory + parameters: + pstSavm --stvm handle + t --table + return: + RC_SUCC --success + RC_FAIL --failure + *************************************************************************************************/ +long lResetDefine(SATvm *pstSavm, TABLE t) +{ + RunTime *pstRun = (RunTime *)pGetRunTime(pstSavm, t); + + if(!pstRun->m_pvAddr) return RC_FAIL; + + memcpy((void *)pGetTblDef(t), pstRun->m_pvAddr, sizeof(TblDef)); + return RC_SUCC; +} + /************************************************************************************************* description:Connect to Shared memory click test parameters: @@ -1929,6 +2041,7 @@ long lSetTableIdx(TABLE t, long lFrom, long lLen, char *pszDesc, long lAttr, pstKey[lGetFldNum(t)].m_lAttr = lAttr; pstKey[lGetFldNum(t)].m_lIsPk = lType; strncpy(pstKey[lGetFldNum(t)].m_szField, pszDesc, sizeof(pstKey[lGetFldNum(t)].m_szField)); + strcpy(pstKey[lGetFldNum(t)].m_szAlias, pstKey[lGetFldNum(t)].m_szField); ((TblDef *)pGetTblDef(t))->m_lIdxNum ++; return RC_SUCC; @@ -1974,7 +2087,7 @@ long lInsertField(SATvm *pstSavm, TABLE t) if(NULL == (pstSavm = (SATvm *)pInitSATvm(SYS_TVM_FIELD))) return RC_FAIL; - insertinit(pstSavm, stField, SYS_TVM_FIELD) + defineinit(pstSavm, stField, SYS_TVM_FIELD) for(i = 0; i < lIdx; i ++) { memset(&stField, 0, sizeof(TField)); @@ -8262,7 +8375,7 @@ long lInitDomain(SATvm *pstSavm) if(RC_SUCC != lGetDomainIndex(pstSavm, &lCount, &pstIndex)) return RC_FAIL; - insertinit(pstSavm, pstIndex[i], SYS_TVM_INDEX) + defineinit(pstSavm, pstIndex[i], SYS_TVM_INDEX) for(i = 0; i < lCount; i ++) { pstIndex[i].m_lValid = 0; @@ -8289,7 +8402,7 @@ long lInitDomain(SATvm *pstSavm) { pstDomain[i].m_lStatus = RESOURCE_STOP; - insertinit(pstSavm, pstDomain[i], SYS_TVM_DOMAIN) + defineinit(pstSavm, pstDomain[i], SYS_TVM_DOMAIN) if(RC_SUCC != lInsert(pstSavm)) { TFree(pstDomain); @@ -8382,7 +8495,7 @@ long lStartupTvm(TBoot *pstBoot) return RC_FAIL; */ - insertinit(pstSavm, stIndex, SYS_TVM_INDEX) + defineinit(pstSavm, stIndex, SYS_TVM_INDEX) if(RC_SUCC != lInsert(pstSavm)) return RC_FAIL; @@ -8407,7 +8520,7 @@ long lStartupTvm(TBoot *pstBoot) strncpy(stIndex.m_szPart, pstBoot->m_szNode, sizeof(stIndex.m_szPart)); strncpy(stIndex.m_szTable, sGetTableName(SYS_TVM_FIELD), sizeof(stIndex.m_szTable)); - insertinit(pstSavm, stIndex, SYS_TVM_INDEX) + defineinit(pstSavm, stIndex, SYS_TVM_INDEX) if(RC_SUCC != lInsert(pstSavm)) return RC_FAIL; @@ -8435,7 +8548,7 @@ long lStartupTvm(TBoot *pstBoot) strncpy(stIndex.m_szPart, pstBoot->m_szNode, sizeof(stIndex.m_szPart)); strncpy(stIndex.m_szTable, sGetTableName(SYS_TVM_DOMAIN), sizeof(stIndex.m_szTable)); - insertinit(pstSavm, stIndex, SYS_TVM_INDEX) + defineinit(pstSavm, stIndex, SYS_TVM_INDEX) if(RC_SUCC != lInsert(pstSavm)) return RC_FAIL; @@ -8463,7 +8576,7 @@ long lStartupTvm(TBoot *pstBoot) strncpy(stIndex.m_szPart, pstBoot->m_szNode, sizeof(stIndex.m_szPart)); strncpy(stIndex.m_szTable, sGetTableName(SYS_TVM_SEQUE), sizeof(stIndex.m_szTable)); - insertinit(pstSavm, stIndex, SYS_TVM_INDEX) + defineinit(pstSavm, stIndex, SYS_TVM_INDEX) if(RC_SUCC != lInsert(pstSavm)) return RC_FAIL; @@ -8526,8 +8639,8 @@ long lDropTable(SATvm *pstSavm, TABLE t) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) - numberset(pstSavm, stIndex, m_lType, TYPE_CLIENT) + conditnum(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_lType, TYPE_CLIENT) if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) return RC_FAIL; @@ -8535,8 +8648,8 @@ long lDropTable(SATvm *pstSavm, TABLE t) if(RES_REMOT_SID == pstRun->m_lLocal) { conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) - numberset(pstSavm, stIndex, m_lType, TYPE_CLIENT) + conditnum(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_lType, TYPE_CLIENT) if(RC_SUCC != lDelete(pstSavm)) return RC_FAIL; @@ -8560,8 +8673,8 @@ long lDropTable(SATvm *pstSavm, TABLE t) semctl(stIndex.m_semID, 0, IPC_RMID, 0); conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) - numberset(pstSavm, stIndex, m_lType, TYPE_CLIENT) + conditnum(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_lType, TYPE_CLIENT) if(RC_SUCC != lDelete(pstSavm)) return RC_FAIL; // Delete the field table @@ -8569,7 +8682,7 @@ long lDropTable(SATvm *pstSavm, TABLE t) return RC_FAIL; conditinit(pstSavm, stField, SYS_TVM_FIELD) - numberset(pstSavm, stField, m_table, t) + conditnum(pstSavm, stField, m_table, t) if(RC_SUCC != lDelete(pstSavm)) return RC_FAIL; memset(pstRun, 0, sizeof(RunTime)); @@ -8979,7 +9092,7 @@ long lGetTblField(TABLE t, size_t *plOut, TField **ppstField) return RC_FAIL; conditinit(pstSavm, stField, SYS_TVM_FIELD) - numberset(pstSavm, stField, m_table, t) + conditnum(pstSavm, stField, m_table, t) return lQuery(pstSavm, plOut, (void **)ppstField); } @@ -9006,9 +9119,9 @@ long lGetTblIndex(SATvm *pstSavm, char *pszTable, char *pszPart, TIndex *pstI pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX); - stringset(pstSavm, stIndex, m_szPart, pszPart); - stringset(pstSavm, stIndex, m_szTable, pszTable); - numberset(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); + conditstr(pstSavm, stIndex, m_szPart, pszPart); + conditstr(pstSavm, stIndex, m_szTable, pszTable); + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); if(RC_SUCC != lSelect(pstSavm, (void *)pstIndex)) { if(NO_DATA_FOUND == pstSavm->m_lErrno) @@ -9040,12 +9153,12 @@ long lUpdIndexPart(SATvm *pstSavm, TABLE t, char *pszPart) } pstSavm->bSearch = TYPE_SYSTEM; - updateinit(stUpdate); + updateinit(pstSavm, stUpdate); conditinit(pstSavm, stIndex, SYS_TVM_INDEX); - numberset(pstSavm, stIndex, m_table, t) - numberset(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); + conditnum(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID); - stringupd(pstSavm, stUpdate, m_szPart, pszPart); + updatestr(pstSavm, stUpdate, m_szPart, pszPart); return lUpdate(pstSavm, &stUpdate); } @@ -9064,7 +9177,7 @@ bool bTableIsExist(TABLE t) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_table, t) if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) return false; @@ -9088,10 +9201,10 @@ long lRenameTable(SATvm *pstSavm, TABLE to, TABLE tn) TField stField, stNFld; pstSavm->bSearch = TYPE_SYSTEM; - updateinit(stNIdx); + updateinit(pstSavm, stNIdx); conditinit(pstSavm, stIndex, SYS_TVM_INDEX); - numberset(pstSavm, stIndex, m_table, to); - numberupd(pstSavm, stNIdx, m_table, tn); + conditnum(pstSavm, stIndex, m_table, to); + updatenum(pstSavm, stNIdx, m_table, tn); if(RC_SUCC != lUpdate(pstSavm, &stNIdx)) return RC_FAIL; @@ -9114,10 +9227,10 @@ long lRenameTable(SATvm *pstSavm, TABLE to, TABLE tn) if(RC_SUCC != lInitSATvm(pstSavm, SYS_TVM_FIELD)) return RC_FAIL; - updateinit(stNFld); + updateinit(pstSavm, stNFld); conditinit(pstSavm, stField, SYS_TVM_FIELD); - numberset(pstSavm, stField, m_table, to); - numberupd(pstSavm, stNFld, m_table, tn); + conditnum(pstSavm, stField, m_table, to); + updatenum(pstSavm, stNFld, m_table, tn); return lUpdate(pstSavm, &stNFld); } @@ -9136,9 +9249,9 @@ bool bPartIsExist(char *pszTable, char *pszPart) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - stringset(pstSavm, stIndex, m_szPart, pszPart) - stringset(pstSavm, stIndex, m_szTable, pszTable) - numberset(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID) + conditstr(pstSavm, stIndex, m_szPart, pszPart) + conditstr(pstSavm, stIndex, m_szTable, pszTable) + conditnum(pstSavm, stIndex, m_lLocal, RES_LOCAL_SID) if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) { if(MORE_ROWS_SEL == pstSavm->m_lErrno) @@ -9171,7 +9284,7 @@ long lTableMaxRow(SATvm *pstSavm, TABLE t) pstSavm->bSearch = TYPE_SYSTEM; conditinit(pstSavm, stIndex, SYS_TVM_INDEX) - numberset(pstSavm, stIndex, m_table, t) + conditnum(pstSavm, stIndex, m_table, t) if(RC_SUCC != lSelect(pstSavm, (void *)&stIndex)) return RC_FAIL;