From 07a61af8e5d67ffc048733031cd4feece5eb5ab6 Mon Sep 17 00:00:00 2001 From: Anton Nesterov Date: Tue, 20 Aug 2024 03:36:41 +0200 Subject: [PATCH] [feat] test nodejs bindings Signed-off-by: Anton Nesterov --- .gitignore | 2 ++ binding.gyp | 16 ++++++++++++++++ bun.lockb | Bin 3869 -> 38255 bytes cgo/dal.cc | 26 ++++++++++++++++++++++++++ cgo/dal.go | 12 ++++-------- cgo/dal.h | 2 +- cgo/go.mod | 5 ++++- dal/SQLite.ts | 3 +++ dal/__test__/sqlite.node.cjs | 6 ++++++ package.json | 6 +++++- pkg/__test__/proto_test.go | 2 ++ pkg/__test__/proto_test.msgpack | 2 +- pkg/__test__/proto_test.ts | 1 + pkg/facade/SQLIteShared.go | 1 + pkg/facade/go.mod | 2 +- 15 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 binding.gyp create mode 100644 cgo/dal.cc create mode 100644 dal/SQLite.ts create mode 100644 dal/__test__/sqlite.node.cjs diff --git a/.gitignore b/.gitignore index 4fb8eb6..dc4c711 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore *.so +*.a *.dylib +build/ # Logs logs diff --git a/binding.gyp b/binding.gyp new file mode 100644 index 0000000..9402057 --- /dev/null +++ b/binding.gyp @@ -0,0 +1,16 @@ +{ + 'targets': [ + { + 'target_name': 'dal', + 'sources': [ + 'cgo/dal.h', + 'cgo/dal.cc' + ], + 'libraries': [ '../cgo/dal.a' ], + 'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ], + "include_dirs": [ + "_dTvY8hX+EC_O)J zm>wrArng^om@E*J7tRg|;PN=kfbghLmVgAyG2sSzOT}b$|c+{mX{M$)FA~7P0BM@*o zQDNc!9A;o_#FQW|I|$0Se9lxv6|kbH`fns9B;=reC^w87!Q%5{Sv($>FOa}=9FOZq z@+e&=m_yMQOpTrhx>EG0++XwkdVcEh&w>+3^CRt?cas^@{opZMa4opoTw-! zaB?n*@+&|^h|dRw^PxPTy%6Ugh!M9z6bJMD!cb0sj$d>j#GzOjLN@SYy(1!=9T1}) z*FX%ciKn0)EH8l=(`**}7sQcR0>WawSr98gtOr7(KBtOeqTi`dj{FhKP!_0Bf&-ny z`ehJfzYao-e0+Ws7v%}$h5KRr3M#2Uel5h<&JOqo>unOnzmBUhC;@T5LyWi)EI|-6 zgcExWGLi2*#3;XN7h%0nh@t7k6QcZfFj&~mC&)+s*O12gWe}tMYn6rZQb^-C>4I=w zA?^b);!lKfjJrZ6@&`bSe9hskQx(ebD~_JXK6^k6A|-Z#80CTHDY*fg!p~O|=6`}1 z+qdd2l<%b|A9aaxRGiM!GwUkPo>gAzHpqY>QSGfiu0ZF&q8;AS15RagUz`g~{jkaT z^@y#5Cf#)F{IqJT`Kkaf+l%S-&sSuGeBep(+by2XUTHq{^@?5B)Z#T>XEvA~lAQ2V zo8*^#2{;&YWPRSSvZ_eyHq4F6qaRL`U#fL~NN#G^C2kW39*~_eeBfDDmC1#tvtKVC z_`GPq(9vB!Tb%hZICAW$yr-QaXFhxTYVCCPD(#+^5A`b4U3Rc|Oi_>aW0Mvw8(%YL z$$`^5tq%H+x9I&zUURRq^@f*S+bX8o&e*k*v|nlIQ5Eu!V7X*vP)$MCowN5kTlVL? zpLtHo%3agkN!6;ldyM7RnGrer`R7&Crno(|su`=}c<}SQP8}PvcCS@*O`o_$a#W7w zVYAq7`)V$%El-^-F}POkOnG+UiK~07(nfK<<(aFSCA`b__nE$NOt_n2*Zh8Q2J!P= zo|qnyS#|DmRNIh8PplVz?CyHg<;l~{{Vw&&y)j|bw!4q|nB3WPxMGu+w}Tw>o@*(OJ!qV%=Q zd^_p8n>Jc{+butSLVw@rfJuuQ)I7!x&+TyS`wzRTgS&O^%p2cF;mVP5+)}CUmlwOt z;2o~sy(jNW$TLYus}OZ7_l%YZ=_+K1aA zC4X!AzXJn|K_cR{lozTt>dFEb>H0@GS`vu-0=O9RKj<%4)IQ>&`~oSP>E`%IIjJuIen;SkX9+5_wtXfHybJJS|B<(~{L_Ko0r-&* zWkQ^m1S0=Q;I|j?BVSAHknqdFpd&vS_tx@z0Y9#P*f#co=n>Q60%?B(@LP!Z|BL;7 z1SV_XM?9iKaqW^a(!MDe9$kM#52W6oV!|H}{AmAZzyGEELSVEN$&YOzMoR)||2^;< ziS!50%PkIse*o-1P=1nbZU0%oZ!Y3T41&{~Af#Rm@T2`hLSaNCGz_N zKY9MZws8)&BoO}Pz&{Au$27`7@|(jT^^OBS>W|DH#Arz%{NI7!LBx-It=0c1*vyTh z@e|zUWFYkx1OHIq2QehjhFUv*XMz8JS^uPA(&PLidLwa5<+lNT6X5SGVrcFB%L0DX zAJIo^+ph!u5y0P4y^(&A_RQgigU_EWmHSuz*&=?-N7-A7L)t$k;wSQxn6&e!nDGAq zetdpGK5W0W`ZI#V6*7PS)Yk9vN&5oeC;D$`+lWW_F9E;p|Db;*I2R)O2ZH%Kd4J6# zb;kj}0kn_v4?}C$uXGwej(uy_4{12e8V~KaMt3MDk$*DqjCj`40d;vH#Y{ zK-&Kx;>YzDLrY~K{Nv#qklcTfpXB4UxIpU7{e@o~550`=?+1RgUy`QR5qC}M%fZ5D zE7HHX`oESDekb53`&ZO|OUHol&jJ2nBKv_`L96-i06(t(|MmH!KOB0}_19YYrvbmc zNPg52=@(v$3#48N@T2@_cR2rAYkw+A!tuklP=75AqoKTvTn6j|64@-WZh~l|9#-MhW1hSC{t_oKOD~GCjx&<`G^)s z|JMLNu3tp|q`bM9@ZS*ex5jo5oA7JF`vY5OpQKx>zX;&R@k2f&l%pkqw3iS3#Qs{^ zHsTZhN22!0^K(nurt@p6{%`i@4gA*7f3!c8pU8!6hzq1%KJeQEKh`CA;`m4zsrwT6 z(SC6K!#t8t>isDu^>n)l`EmYXUQ5S-@biEl*KZtm%xmcyMELW7e=P9h{K2+c+x{ou zNBcoMq}K8qsR{Lu^RK16P?c&6<0-&z4DA!y$vTE*;sWXaUf{?56XA#3d5Z$!XTW_05y_`VR|*|jJTeh1*U0e-Y!5T(`6e+z(rFz}=P5CdgsNg(Z?1%6yVkQb??>j$=h zx+eOj$M`G^k9E{|5`AKfbzr%m@?qLgF_;e(Fh-d`94fRV#xd(5s*f@DU0amK7|REU z;(-uj-*iQ3JyEO=F$RpWz5ym6V2tv>*%lS(G3v<_2ag1C?+6ajP3J* zu$>qnhW`>HUJ?+>KNkqo z^MEj5jOk=dhywNt2?IU;J5T=36Pz!9=Lyb??+W-X_y1`CJV_BQ9hz~rF52R%;2(>X zuS-q*ZY>Qi28?Izu>B2II@x$1iyd5k(x8l>qt=|0}f1jl{q~iW3zn-^a@Y^3EFRoD}FbdX|ZH%xEnzWyrRIPk% z{Cc+gl09F_4=Qw9P`UEE{EGBf!Mw+sm4Sn``)nV7CVyn*nW+AT$HN2m1#BDrdY5MW zP8u%W14&@0Oa&>=R(oUybs3t)-(we~NW&%TC1Nw= z*BP2Az1&`S|Hqzge%p6_c|Tl`ni}}w+bGwIUy6M-CUi@BpwP?MR(H+C%#VgaXM862 z@c%J;QStV2n?Z|uXNNzb;Yt%>5qHvSU(?;Tjt}A{oGC1D*};97B&giCvF4#x>8RaX zq;E{N*3~Iq^&nk$(=!zJe{h|RbwJ!1Z~sJ!%JmoIc3WPf06`cixOmy06$YOpm9hGq{x`{Vxj zEjQ{GU#!lw3Df07-AR+$IXi1m@jlM@k~zL3na^mrcn>0h!Rx>qd33@It3r9s$u86O zU7Go3hIhM$QT`71uYJy|o3g*mKK78{@YqG8jXOn1_5T>jOdF8oC-75|4oJP9;$0a- z!=>*-7}Xy4{T^qP+%VtxCMmp6{;@5#9p1g$+6znTAV$zGW19F5`4qf7|cX4Q;PW8>g4oKTYhAVzEne zYto6LoWc!r`dnC4G413}gpGZ3!@3(y3&-G%fx%1Z zS7;Ec9qhHSz1)6g}T88mm9o~rUh&U1q_M%1T*sE+Hq=Fe;EYgM)Q-4Vv= z8#8hyo;u}Z7xi-aOd2kIKfuVEls#;cY+>50F+)#!%p4zamZ$S=@Nr*8!oZaHD(ey9 zx>ao^%+Xf!*<~?hj;`henTIb-lgD(Nd*OyFHGY|U zyZ5i}WYFZr=XMepdp8ZKb>Eoc|HFG)B=75dJN>zz*Dx3lI!wL2ZcXUkR}JcI%TCt04Rh}F+3)5L8ZJKnlfbC|ly${v$BkshE{)sl5eARu z9I1Ej=Jq_?D_65eT-|{BC4;ZGE!HbZJuE$6#^zzJb;4@N=hoA@_yn!+j~SHpbq);| zjvpHXBO?2Xaz#BaNBzf*b><&+vez!puYSGy&Zg;|ZXfSBUN)LvQstIC>RVskfV*=1 z`O&tilaqZkzvh(hSdy~t+`=2yG~6zYs4(B+ii;l@rcEr1ziH)P>bhxPO`A6FuJXmjko^7>qtQn{LJ=4%I?w?wXfLpuyAKuzj_t_S^cfkr=`dqi`q=Z@1B)Kt9VCZ6k=Hza z;kFG+)y2)Zw&N|yYmaZl+ZY+F_muR=msYS+4w3P8$(c-(7ml|Y1LOMLo*9EB_6{hU zWc{E)F8V>%Ge?`KiVbU6Yd>F7S8eJOUT-;ZZz^Hwh{i1qM(n-GI+Pq$4b3F^} z?+xs`b-%4kLTbvr-fl0JNIMtT+_2L-?^)PT?z1k;C2!p($H*SH!nwFcb}X+p~|cN*27Dq8g53J__jF_ z*ohZ;sQBEHo=!c&WixH}XB5$JanDZz!{9(CJKyx=E`8hhKKijj^~;szN_O#EEG~HK z=4D)%RK8tx+dj{S8HVr6hCbYJsM^)ie|xvx2S2k{ragTTxU{O~CJmSDpAnm}_5L2m zNs>+hZEF<2PM?(4p-bxffuV+x8H$LeGK;po*x_QQ~ocaLjlZF|1PU83gW1I5(4zAH9L#rP)pyBt@Q z8@Gvu+mnua<3P@cbO&jrAMLxPng5eKTGlD;>C)H*)n~#RoNXg-?CF@X@wp?@W96Y` zWg4Q$}^B&xPo@?wl`{6cM_maD>2W`^IU%Kj>xAk}HV{$tM8;jpIFc0Ey3CMF_Z#u4O z<-l)GEL?9EogBF+*+b_&!}sB?p_Y*=YC4~Iw?V~enw47_~eD2p@vQ_ zo=4MnI)>&i(e&CAIFg2|LC0N@Ic>sll`!Msp5jf-h!UW%Q9c3 zKi_b!AgoqHuOMpLXKlH(+xL(8nh&1uE!Xy|l(TQ&!+|thO*-y}WQWSB@%f(@ui#DM zM?MQu>-bMjOy!9uRwKKXv^zE0@5G*l{kzl-EOzgI)7DPC*mS*z zIB6gaw+|in+%%VS!F@P_mmGu2+@d3jhHGmFd^jR=Xn(gHt2tLaRr6-aRws!q$78=UPAR>{qRJ*Js+wFRyzpUU0}r zdTi*mQqR@h1l>P;rQ!CY;|~31+4fGit1m;`=J1y)22YfAKA*LwG<)+~SFN^|*548* zS-b8yFv#=j<(T!V297h@ugrPM?j_~lfiZE`a7|8EO&V^0I_@s6!pVnh!yAcD%HB65 znkp&U4{})*n6%$}%UrXFo%LtkJ`eeD#QEasjmwAGUDoNleP!XoizTb0?N1aRGPW2o z?-mW0oWCJFqnG`qQ*L&K^A`@zkX(PR?WE;WKLY1}ns7p{&Fbi-ZjaX)4BOICeo2K- zo=-cnwfgL3ZwVM=JjF>5}UD~BBZBsMfT=7Q7(met0Uk?uIptgdBi|2wQ zFr3}Br247K2N>M;wppWdNd08>;Uka66<$leP+<0cpG695qGm#(+pQ!0T|R%v9aUSs z;LWSHM{kBcl$SFfYij6`Lc`S|pb#^(Dvda0^|E({jQ49`TN=f8D2d;WxP$1pABPXx%09cR zV$%;3+c_(rt(_4)dro~1w`3pb$L-z9m$e_3zEU%Iq-?=6TeDrRhc;YVb8|rHn}Y=t z*7UuuVSS-{I~p#Nj$5&7p%Oc!)6E0PF4NoPn%Bmfvv2kO^fdSyFFEq!O|_VFPP2EH z3}x)SHqd5Fj&#AR8ICnO_E+5X|IC)wOi3HBLBqxKRuUM}_dX@hEnY3%hk3v+rFi?i z83kS1+$}o%d}@qt+E9br7oC4hA0abECRVT4gJWyoIH(VLa?||nHn&KIl)ua78wN}o zE}q|#z);v5Z}B21#HzyG@0N_jjy|4A=4TGMY&pBJIzi65=e|XE+gm3bdplHqUhd7L zgo0P2yCt5qD*ieuqD$=79|5!G>CkY=c`#x#xbJHB>&70p?iXnH?v=p=ZUTRJmPvF?T6rQlw<8zOxt zJKjq)ut*7I7yr08(^#H{Ye*4 z51jVsf9!%;zq;-fd$dgo4zJobcBZ0i*9h+uI$ycnvQ_&rWIJSJ^vakUcw}Y6lE|wP zfj*X&+s6(Mr{Ti8ipIdmt6bt~K2qkm#-p;R*w1aQ9vy1scuIG}sscf(;&9Ew4;<4v zrG8C$bl~~y&AYoKUuWbx+O=K2@QUh@)S|qT6K>1WaN!+LV_uNc9(d%jbE9$_aSWY1iFGk+8->)BcA@_S??kFj)W9*&*XT}UO zpy3W_Ll5q)?T^-Ia}(%eY5o&6gESoWH-++w;(itM7j3Mjof(;(G}a7`4}D zy^Trla&L)5Syo52a#QOK9+^RLZ+bj5^EcZw&{#*=ZF?Hq_{O(BUD7P(O1MV*)%QLT z*xAFNYdbZ8%-2p=Xt-ts6k>*ca9OWwQwRSTbw+JVRbHDyHCOvf0(Ov7$cE34dVZ*T zH!kSqyq$^X?v-T>dFSa+bEL9n#5_5j(^vFYOV>O&P`!rdp5N15ticASqj(J#5cU$?5uh3Q$N)|M{x^o{;+==7v1kRCwUW zlM6l335yXO}xhMsxAtE<@3`}NGD zWqX6_V%fH{^;CuhSMin4z8b1E{6XI*Pmf&>`|h&(=B)FYCQ9fmX4eqcB1QcY5hZ-Hd(6%%Vb8X*A?b@T~9iz zzq9+;8~5j^3JSA4#;n+vKI}}7uW=*0)90HV9e1PIIunPrUzmON7%;O^Eq2=7$y*Vj zKUyZE&yKo|KKDI*mY(anKhJ%Ks`l8Wk5A2$UK6G?H-E-M^Uc@iUpl(qzK$lZJssC; zhkU7bnPcSu>v7W$`rYfRtDPV8=y~SLafj7b9b3F#ut!0M_3ogoe10aYvf6)Wt}mmi zbY_`%yIcBl>(WtR@W*WaN$y2!RNQ&;QSvXYna{nkiTw)IrCq3_>D&~d#ZWQrAf8r4bF<;b1P z*R>s_ToC_kLDiJWJ+4-JP8{QF{MNhZ+8Fh)qdk;zY6jTc@H}^9Rq95)$6Z ztU<$~I%up@93y|Ilky|?4NIr-=Gr(`{u9hm`LH=Z?^B&+$OfYaF48pI(RAD|6Z{ud zzP0XLk##Yz@5tQX-CxH`=~>sD3YVGgo&L#DJ3paF+g7f<_M71wa~If7J~Bb!`2-ye zgPu7X-t>Rvyw-|_>p;gHda8QS=BnUHsog6pFV`q~1=u)!s;FgK=MCMcwd3K6REaf; zDJ8FCjFKwSRIlGPJJ$Zov48$)hzbooRz2tR?%+-|Tt_-C%QZQTtG2Q*{ba{QyH`Gu z?t1C?>9?m(dKUzmZh0`|>IJ^lqv*{(ixQN*PJHp|`DxMk2j*V=+SRmWp1E7LVAngk z{f?pIvJ;doHL7!MLS&Z&+TCgx9h-X)ju!bT*@5YGS$R9-OuAKAFPnH!tLv3fHCw_J z=lc7UTuPC7mRoVae$U>K;~&uEb)w_u-gEIDf62w~{h)+#u5lKVald(qxp-6%d-1B z%52%5w7s8~+NpDWL)5mcRve-|a&E)iXUoR^xPD4H$1v{o_r23na}U(K9#(xK``T%a zez8`4NDb&I@8RX*AdIPDNK=z7pH-5v@i_WN%& z2zIDV@sf$$d8wP#fYf99?Rg&e_PahYSM*+COVfi39oInn`uVa&rt&?HO4e1_8RX0i zKi;t*jp@`qJ~S?6PkpMgY}!Su_Vrb-=I(ovc}LUjyaMBp;I@%>=aBYS$FY*==hgV# z0tt-syQb%BT048*O6_YG9u%zYdfxZ2Z;`XSYY&g=xe*GHaYL#ndu2$i6KuS4z~E!z zlR1|ks;n)#)z*4YvbTRm=gu^F@jD0-7{e8%tWJGNdGRWIwJhswTlIllr5n%EzQ>r2 zzc}EC(XiG1ecBGcYaFo3Tt4D)xm?YXjw{Z58yjEyruW_Qk?phk4xr)UcNHWs1ka9C z%PqgXeV1|3NX`4*a!h(J3|ZjzWv1SjHIYlEo5hrFI(fI|h2g|?HVGrwJDyF-N-@iu z8TtI0r8%RWx5OZ88ZP-x1F;zex|Qy!dtA;OsN3CH<^6^t-Z=q#`=+iJKlR^J<)$6_ zVQ5kKvLz$6(yv{+F>?KMgJrIJviEdbT52tEQ_f;`u~T~*E`IMp0wZO|x(VaV?+H3N zsSLcHXFoeI=D^sqo!#B~%SqQRJf*%yqujmQ>WY^d7nC;)?vfFHs(73ZBdhSqz#Hq< z4lLR4A4$W-??*^rtWURiyy8r_e}4RNO(jp|e2I}-dYua6l~2~qbN^Nu;V@G@dEGiI zFLmuc;oWU7vbuRKn0oB!=L?0545M0=N51hi+(`r!Vn)xX3+>fkEGoAMeJZb8)hBTM z+JVVc?P0*UIqel<>aMo^}ojRAWp5q2@oXo}uA-(&gpd`Sx1U z$0lLt0{M$C29|rMZOOmAb%c%9IMatU>47!Q?M|xPFAOaU+byH9=;51>A;-qZOzjuG zAW7HE=%c>F)q^zL$#mS|1+m}F=0se!jWCYgRF$6D`SjOmMjl=YFJh`cPWrf3ufE@~ zm0aEA?%Jt(!-Lw+`MzR8-ilcBJH5{2Cu~Vt+qIa6`wtyAdd8ivyRY`o+1J5ojCxS9 zqpRvUgU+3*&Tdc9=*~LwdBKhCv$NOC+H!1rKmMftZx)U=>nW?~q%!&xi@8rQZuI0{ zG+Zw_?q_w*;({#y6W3FdjmJBT9vpVwe_7^%^RqiTKP|{kAKod|Tl0RbyjRtiwcBm7 zww@cG*giu0njrGqj&0jMsUBK-ordd8$33NDm7BA)WXeQs_H2bsbGu}1ahg$ivt<8A zle#>`OFerTRQ6wY|a8m=!LH!v-A^Q6vG-gnC@;%$HVw$gC^)Iqw&X>lRr+Vt0&cK30YwppVb z3uisq&t<>cCvmLn(CaJn(nmioOFSMgcWqrb{XCUL$K8Fp^zjw0@383dsX8`N<%^vU zj@x}@m`MsJh_z5@b+sV-_>f9|f>oX%NW)dXOmayn-zse-cW@i4=AO#<{2-{-oG5q9anexVuj4@E;WTC=hpkY$~dEVDYpEi{Q@7ELmRFC{^rM3*=-?sT(y}x;XHSkvhf7SrbH}W^NX2U{) z>&u^O|F;rsgRD*V@IlA_A8q_M$^LTv)xiH74Ztmk3MBq7sI7P`_%HB(dH!nPuLk~V z;I9V$YT&O1{%YW_2L5W`uLk~V;I9V$YT&O1{%YW_2L5W`|GoxR`U_>e&Jo747W^o- zE;o!X01q9y#IK0%_$Us?s<)wjZ$3AU6CNI6M)%eO%3G%xQd{2ydckY!hWh zc~D=dpV>gD6O;@4jIv;#uzi#nWki`!h9salK=|zgey4zAgkyqZfI9C1gk#kkNCQX{ zs1J}95RO+rp#DJJf$(>woq_Q8nm9%{Ch%T@`nw#c3+y`=CAIIC>{vajo-fDcPjXe(J-K)Ko&rHKyg5pK=|G6G$19QF+c-=w1MzNG^KxjugK-xe9fl!aVfiR7BqydDsr3r+#g*Jw^g=M4;iLr0kZziNln=)Q#}Vbka$-w(jrth^WC~;ggn3A#fQAFv1EC!Z1;X)1JFo+?0YW>m z2C@Z09&C36&`2N$pwU2+fW`t%079D?59A2s3WWKX=Ol_>FdK>HN z>w>x<7b%f=@Q{(>u>>4&(M0JGbe2ebe8@;qO~F6ps|n)OMn=-xKwsAo;K(-?#P1E1 z80o@)LhAxcO`Ik2j3Xtf2}od{jXrmXPZ23eZ$k=90>5wuYfB_vN1((=*FYBrmAq>u z{#l>|B!EJFJ>Zc89^$bCN(KWO3_SkM6Kp+^_{2dTBT5P63kc#p2TDwY+9Cd@h<_al z%>eaAzOEo1cqkqtT`)}I`-=GXfs!F00Z2`}DG_fm6dE-O#BUby3j`&io)V8(#N!W? zfTB?X@*N2A2?Qk|8S0vN*&<$qn%W`$u82P$C=uBK@yJCy4pHq;x_%?lDDj~~l?Wve zdG(^92^HEp37X|0UcZP}qb3Q6KP%#|2TH&WP&nd2i+Bja5>u+=H#)%4Hf-`X_S0yi zSxXSVT*U7Xq5%(#De>GzJQG2QzU~kl1>!r5_(p;f(Z~^RW5k=1s07f6-!kHt2}(rT zA)d{M=O!pY3BcZn?=#}ti7GMFg=LX=M!pk%Oc{`^J_+K4YI;6aT78u8vnyi-X@R>MsJSCv0YO+2|Zda4qR z0-zCJZ^V}s)s6uUH}T3wyiTFiXjKM{e%y$kDkw1lslh^sM>pcJiYlRI3Gw+xd|HW0 zV6=%>IpQ@7O3*|>JH%hyFYN#i@hnF?X93S(SomPHiEldMdkabobxjeCc&Q^^xS+&L zXgkD@9r4pep-~o3JlPRXT~d-TIM`7M;_Ht1@&X<#LOb9K?-0bBmy{$ddpK}nr2cJB zsoD7Non09vg{AIw%<|98=<(k@%i#YKM4nBwp&EM098R%@c~qLVojvBH|&wAc?O#s+~W~ zg%h2ry+Whk%b!TjRLC4)Qa-<~JK@RM08og8!FMPm*qX4o!fExI$ z?C()}e4WCEwo;N6kfRJa#4{!Fyhq7K&20rJhCN!Mf$XdLfg_X{Qj%YQ2mWvLa!I`S z0S}HT^z=7U;~gC>9vJaCo+jH6ArJAXNqh!UJ*A}n0}u3v_{k)G04b>{35Z8d;&Bj4 zL@N^U$w_<;LW#(Bh?h>{g-}Xz2Hr6S!(In;fKThRo(>WA=QlmYCsmN`H&Tm6;Ws@+ z9f;-mO;63>X&r2b_zWdJ5urcAO^yWd21>jg3h#{uu&E^eK#9LY=&7kL*paA%W6gL>pa0iVx_0*}02mwV3~ z7vT7@1UA9AcS|xgJ|{V~4U`<`>fj47n zSIP4C4-aFqBDg}UVp5JAtwZ^N5iE9yo+u6y2qO6AdU{cuKyW4;6{{N-5gN?b4UY=c z`?abblQ1zUGZg~r3IgM>i)6d1%MRv?0VUM{j9da5{wKmA8)99tFr*g1kV~d;-;6lm z*O`e+Hh55u2oK|g3AijC(+_$b9uN>1#bR>;qIt{!ekdyh+&y#P_x{WvRzw6xs5WZd z#vV}@;>DnnxfSL z09uNPkCOV$G)o!)R&q%V)R1QQL>p#c6J51PE!YG)u@<$4mz0!-&9p{Dqf1Hc!jTUL zksazUeh7tIf8?k9W;0PUgPUnpc#r@*!V8cT)^pOLXvGj~zQQ^HAiQ9j;5N6JM#=dJ zaFI(;EjBIcDjvOv?<>{-c8s7&v;y&_Cp;_w4&g;pKgC$xza|y1|0|D4ofc8ebNNgj zE7Z@Q6~+k+hlwf(kFtg}h|S~bu>xW0LSI8+vM{MFCK+zwtZhp1qWM9MsR(WahsO=$ zppZ<;_cs&N%z{;bEpBD{U3HNCciEu#=I8CdHVKg>|uTA{L3^X})04#FJgu5^tJD@0Bb~r4;Jg$HmhCke4 znkoTEQvzT_)4|HJH?{5UZPA;$35l%X*Jb_-`qh$2P;JgfpPjHvp}Jtt7dM8H7B&_^SfyW(32hQ zQv&W@%`d?JGA)4kR~{gV7CtdL!6Ldzih$@@6i#z+ zrlnGh_>H$%U~Rmn7P01*64A*&@QJRN)WJVBo5R^`$YnP`6WlVV?iB@3i!O}Krw>RYBhl&4_LV9S&thU9R>df zvG_q^fM~S!>jfLt|+|*fCU?A)e;cX@p z?hoPO?!CX%1gKwfs7(*Gs<3$+Ru~gLlVOK&!~Ee{53X^0El!>EdVu{CUz50E5NM48 zKP^Swwwhb*@E9A|Fv59@4=P|&{;+k{Z8J=!~B`-ATG}zx9_kN!Yu%{_W|&D%*6J^wE24m zkmC0R)XLDDB7PML(0H!Vdi($uWs2XXvZVS%tjg~HCjUl&JCc#=SE<;5uT=Pf@zS~a)o|GedI+$)M{ z;}_{r1wYG6EsB(CNdcG$XKD)|sd_X(D&4d?ia{V};J{2Ssj1xDJ%nb-gjHzQ_;?|@ ziwobJ_l}S64e$3sqtq33DlbN$#<>Epjn_?2N`83I1BMpC0;3BL69e>1O@R9)r|BN# z$KtWV*c^W*HA%%`{!|emf6AcdSaXKcxGDg9<2C49^t52j<+E69KCEHfXs&fcNMJA@ zMkb2SVMPUsTY`SA3h0e&cvotEg8kGouu~FH&)HO$gsV7n3fEr{1Y3D?dfFO}-(d>S zvzTyVh-rBAg^?l*!jv^-4+c%eSb0hmtEp~d!dmzmr!kE+#SBnmJ&?cgnpz;Jd4;0D z?I@PV5eL#F7oapH;G_6>{j#71EqqjW8jfh1wAG!#Bp zazev{xp0C4O9VXs!Qm&5st>E5KZh9+4jT$FiuwZwH1>y*7Of^UkpPL7qRgndyAN%2 zh{}Xx1%1YY0?<4>e1=Cs55wT7U0nBmss~^{rJE+cFdH9l#i**OQX>#@;6m5z4z$q* zfwl1(l+pZbY_dCGZAySGH_zK-ZNS@_sWM%8%mE{2=-UIE&srKo8Liz+BX4Et~1RA3kW z{r;jw_uR%8Ac#R;hENZ<&B^ienK3PMPck)$_a;8#-$?JT>CO=>k z+595lEF;$nsLgvgCr78)O8xr}0YGPf-Sz@1&A~PKRJxiP$Uz`)Fat5jnILbm0Wrv1 z7N8&nf*7z;J&?~p%0S9N+Ca)d%3xYR^aQAuD(=ZrSz41FvP{fi@pC86AZU~J&R!0X zelSn~lAsuDI(9f%$B>1AiBSY70*b3o43j66OPHAftpP>l;?pxK=Vx8YWMZtd&@ +#include +#include "dal.h" + +static void _InitSQLite(const Napi::CallbackInfo& args) { + Napi::Buffer buf = args[0].As>(); + char * charstr = reinterpret_cast(buf.Data()); + InitSQLite(charstr); +} + +static Napi::Value Handle(const Napi::CallbackInfo& args) { + Napi::Buffer buf = args[0].As>(); + char * charstr = reinterpret_cast(buf.Data()); + GoSlice result = HandleQuery(charstr); + return Napi::Buffer::Copy(args.Env(), reinterpret_cast(result.data), result.len); +} + + +static Napi::Object Init(Napi::Env env, Napi::Object exports) { + exports["InitSQLite"] = Napi::Function::New(env, _InitSQLite); + exports["Handle"] = Napi::Function::New(env, Handle); + return exports; +} + +NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init) + diff --git a/cgo/dal.go b/cgo/dal.go index b2a9f7a..05b46e5 100644 --- a/cgo/dal.go +++ b/cgo/dal.go @@ -4,8 +4,8 @@ package main import "C" import ( "strings" - "unsafe" + _ "github.com/mattn/go-sqlite3" "l12.xyz/dal/facade" ) @@ -17,15 +17,11 @@ func InitSQLite(pragmas *C.char) { } //export HandleQuery -func HandleQuery(input *C.char) *C.char { +func HandleQuery(input *C.char) []byte { var in, out []byte - inPtr := unsafe.Pointer(input) - defer C.free(inPtr) - - in = C.GoBytes(inPtr, C.int(len(C.GoString(input)))) + in = []byte(C.GoString(input)) facade.HandleQuery(&in, &out) - output := C.CString(string(out)) - return output + return out } func main() {} diff --git a/cgo/dal.h b/cgo/dal.h index dab4483..4abe57e 100644 --- a/cgo/dal.h +++ b/cgo/dal.h @@ -79,7 +79,7 @@ extern "C" { #endif extern void InitSQLite(char* pragmas); -extern char* HandleQuery(char* input); +extern GoSlice HandleQuery(char* input); #ifdef __cplusplus } diff --git a/cgo/go.mod b/cgo/go.mod index f703f8f..c01c7e5 100644 --- a/cgo/go.mod +++ b/cgo/go.mod @@ -16,7 +16,10 @@ replace l12.xyz/dal/utils v0.0.0 => ../pkg/utils replace l12.xyz/dal/proto v0.0.0 => ../pkg/proto -require l12.xyz/dal/facade v0.0.0 +require ( + github.com/mattn/go-sqlite3 v1.14.22 + l12.xyz/dal/facade v0.0.0 +) require l12.xyz/dal/handler v0.0.0 // indirect diff --git a/dal/SQLite.ts b/dal/SQLite.ts new file mode 100644 index 0000000..29a42a1 --- /dev/null +++ b/dal/SQLite.ts @@ -0,0 +1,3 @@ +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); +export default require('../build/Release/dal.node'); \ No newline at end of file diff --git a/dal/__test__/sqlite.node.cjs b/dal/__test__/sqlite.node.cjs new file mode 100644 index 0000000..eb31662 --- /dev/null +++ b/dal/__test__/sqlite.node.cjs @@ -0,0 +1,6 @@ +const fs = require('fs'); +const dal = require('../../build/Release/dal.node'); +dal.InitSQLite(Buffer.from([])); +const buf = fs.readFileSync('./pkg/__test__/proto_test.msgpack'); +data = dal.Handle(buf); +console.log(data); \ No newline at end of file diff --git a/package.json b/package.json index 146a99a..89a978f 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "type": "module", "devDependencies": { "@types/bun": "latest", + "node-addon-api": "^8.1.0", + "node-gyp": "^10.2.0", "prettier": "^3.3.3" }, "peerDependencies": { @@ -16,6 +18,8 @@ "test:client": "bun test:*", "test:dal": "bun test dal/__test__", "test:serve": "cd dal/__test__/srv && go run main.go", - "fmt": "prettier --write ." + "fmt": "prettier --write .", + "cgo:prepare":"cd cgo && go build -buildmode=c-archive -o dal.a ./dal.go", + "cgo:build": "node-gyp configure build" } } diff --git a/pkg/__test__/proto_test.go b/pkg/__test__/proto_test.go index 2a36ce8..48c7844 100644 --- a/pkg/__test__/proto_test.go +++ b/pkg/__test__/proto_test.go @@ -1,6 +1,7 @@ package tests import ( + "fmt" "os" "testing" @@ -15,6 +16,7 @@ func TestProtoMessagePack(t *testing.T) { t.Fatalf("failed to read file: %v", err) } req := proto.Request{} + fmt.Println(message) req.UnmarshalMsg(message) query, err := req.Parse(adapter.CommonDialect{}) if err != nil { diff --git a/pkg/__test__/proto_test.msgpack b/pkg/__test__/proto_test.msgpack index 322ecf4..7e385a2 100644 --- a/pkg/__test__/proto_test.msgpack +++ b/pkg/__test__/proto_test.msgpack @@ -1 +1 @@ -‚¢db¯database.sqlite¨commands’‚¦method¢In¤args‘¤data‚¦method¤Find¤args‘‚¡a¡b£$gt \ No newline at end of file +ƒ¢id ¢db¯database.sqlite¨commands’‚¦method¢In¤args‘¤data‚¦method¤Find¤args‘‚¡a¡b£$gt \ No newline at end of file diff --git a/pkg/__test__/proto_test.ts b/pkg/__test__/proto_test.ts index 671d4d1..18b347f 100644 --- a/pkg/__test__/proto_test.ts +++ b/pkg/__test__/proto_test.ts @@ -2,6 +2,7 @@ import { encode } from "https://deno.land/x/msgpack@v1.2/mod.ts"; const Query = { + id: 9, db: "database.sqlite", commands: [ { method: "In", args: ["data"] }, diff --git a/pkg/facade/SQLIteShared.go b/pkg/facade/SQLIteShared.go index 720b06b..4a1ddab 100644 --- a/pkg/facade/SQLIteShared.go +++ b/pkg/facade/SQLIteShared.go @@ -31,6 +31,7 @@ func HandleQuery(input *[]byte, output *[]byte) int { req := proto.Request{} _, err := req.UnmarshalMsg(*input) if err != nil { + log.Println(*input) log.Printf("failed to unmarshal request: %v", err) return 1 } diff --git a/pkg/facade/go.mod b/pkg/facade/go.mod index e33992d..a1cc137 100644 --- a/pkg/facade/go.mod +++ b/pkg/facade/go.mod @@ -18,8 +18,8 @@ require ( github.com/tinylib/msgp v1.2.0 // indirect l12.xyz/dal/builder v0.0.0 // indirect l12.xyz/dal/filters v0.0.0 // indirect - l12.xyz/dal/proto v0.0.0 // indirect l12.xyz/dal/utils v0.0.0 // indirect + l12.xyz/dal/proto v0.0.0 ) replace l12.xyz/dal/proto v0.0.0 => ../proto