From 47ab856f3c42c53337b49437458ebcb9eacfab3e Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Sat, 30 May 2026 19:27:02 +0800 Subject: [PATCH] feat: register context-aware db capabilities to jsmod --- CHANGELOG.md | 4 +++ auto_detect.db-shm | Bin 0 -> 32768 bytes auto_detect.db-wal | Bin 0 -> 49472 bytes go.mod | 1 + go.sum | 2 ++ id_test.db-shm | Bin 0 -> 32768 bytes id_test.db-wal | Bin 0 -> 45352 bytes js_export.go | 84 +++++++++++++++++++++++++++++++++++++++++++++ test_fts.db-shm | Bin 0 -> 32768 bytes test_fts.db-wal | Bin 0 -> 144232 bytes test_schema.db-shm | Bin 0 -> 32768 bytes test_schema.db-wal | Bin 0 -> 65952 bytes 12 files changed, 91 insertions(+) create mode 100644 auto_detect.db-shm create mode 100644 auto_detect.db-wal create mode 100644 id_test.db-shm create mode 100644 id_test.db-wal create mode 100644 js_export.go create mode 100644 test_fts.db-shm create mode 100644 test_fts.db-wal create mode 100644 test_schema.db-shm create mode 100644 test_schema.db-wal diff --git a/CHANGELOG.md b/CHANGELOG.md index 762d127..aaa8f92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # 变更记录 - @go/db +## [1.3.5] - 2026-05-30 +- **新增**: 注册到 `jsmod`。 +- **安全性**: 引入基于 Context 的细粒度权限控制。在 `SafeMode` 下,仅允许读取操作(Query),所有写操作(Exec/Insert/Update/Delete/Replace)将被拦截并返回错误。严禁通过 JS 动态创建连接或同步 Schema。 + ## [1.0.12] - 2026-05-17 - **SQLite 极致优化 (超高并发支持)**: - **读写分离与零锁读取**: 读操作 (`Query`) 实现零锁定,配合 WAL 模式彻底解决读写互斥问题;写操作由应用层 `sync.Mutex` 统一排队,规避 `database is locked` 错误。 diff --git a/auto_detect.db-shm b/auto_detect.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..a2fca51def15f42603ae81a1a107ad5da2f8aeb5 GIT binary patch literal 32768 zcmeI)A#OrJ5CG5t+QKggLDHL0|}1z*e+LFVG7#NREN#E>&CsMP~_++V9BE zn`HiMCcA&L?*KFUeTx!LnXQQ7AZsV{^SycczWKC0^P*d^$T}nezP9l}iOn z9OMD{)y2Mrm2LJKEw(7^7XtzaAb-HC*D(JGvqG%fS0HCC9hru-SbFK49lhRmmrW)0~tmb)j4GIJ_# z3>Y~%l*g+?M|h%*~X6iv7)KE^^1Pby|*CJykp;6y>18p|IZgt*Z2`HU*KW?=ef1& z#~Aqnp*|TocmxnY009ILKmY**5I_I{1cC~v{(e6$@Zo#!@#(%fqjv9qRm7@6zlQA) zKmY**5I_I{1Q0*~0R#|0AWQ$pm5I_I{ z1Q0*~0R#|0009Jo3%GHChWiMhn=jxLAM~D6czgNf&o{G= zo>6zOLr-IxjQ|1&Ab6}ohRCq) zebQ)FtGiw8D_}<7lgMeOYD5eNsTZlrzv{TD_Fv=Q<>IiLeyl#Xv!C^8K6>%{bksHZ z-19?j+xM34j%KQS_p^Tg$$|g@0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK;WMXKFXhkP_ zQP%VMUR`T}BF#MNMnCdoA|XJ4009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF g5FkK+009C72oNAZfB*pk1PBlyK!5-N0`Dbo0S%BTA^-pY literal 0 HcmV?d00001 diff --git a/id_test.db-wal b/id_test.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..336c6369d58488d4010edf7eba78ea45eb586c70 GIT binary patch literal 45352 zcmeI*O-K}B9LMo_S)>$sjD$7zGEqwkTI@<%UUHO;UMzB5ER|Tcc7zpOQAhEV(JAOq zhk~GEWJFRB^h#@|Ai<(TT>=q;AR@#=hah@+p50Y@RIrX%ywI$&?R(Jnk zU(B^?<=%#&HCmS3){rk#?UOCFzh_}Zw&~;LtS{F!w4GO8l!~vKAzV$kVrsdK7()O7 z1Q0*~0R#|0009ILK%fu>+Vmo?&!>;Mu~WT{>kPTkL_FIV&Eb$830V=lsU>7(2d&CP z+-g2xhbsfYD(hJI;1N6AVI2;2R9nedpJPQrCn8lfMv>R{=~^NgcSeT>dgWbxG&bz^ zr`My|BSiz*j=HbkkhN9!`HS-fyUd3VtS56NrD`xUm7sbQ0tg_000IagfB*srAbybarDQXh)dxiT+Mm{**$LI42-5I_I{1Q0*~0R#|0U`Ze^FYvrE z)z#BKVW_--EQr995N~8&K)z83Abqe2DJIi-0ohOpAbT{hQ~Fq_U_~ZUO zYEZo#-@eqx>gSkuM?F){6PZS)nQ3Lp_mu0yl>5H#`R&?I=MT@w;}rn{1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfWSxuYWa`ERQ`Q26PvL&k{ew@U|a<1F&hi98vEn&AnzbBGJ!_S#bT_* zR+N7pDFRgzXvTajMG@OoYFe)Z1_G_<#B!|14i5sA6KF>_R$?P|E7!S(2~0*00s#U9 y2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=DiD)0_a@hABJ literal 0 HcmV?d00001 diff --git a/test_fts.db-wal b/test_fts.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..25dbbe7fe58e86cbbde6acc99b2c91626ad25d57 GIT binary patch literal 144232 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 EACpET(EtDd literal 0 HcmV?d00001 diff --git a/test_schema.db-wal b/test_schema.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..b224a01238e80351f5f63ef5114b71f374e3e963 GIT binary patch literal 65952 zcmeI*UuauZ9Ki9Lq+M;We-LIx9G+e+HquJk+78AZOxsMu(zMNz(QXeRP43d`+FM9& z_D8{ys!s|c>J<7Q=$rLHu#cixWbS1zVxhk1>Wd0{5Oibci|3@d&7WDff?+Ox4@vLe zbMC#Ln>^(7ckb`tg?-Cf|Bnx8TBoK;;4a_M?1Y`1TQCw< za?vO+dd8x`KrATYkQxE=}+1U^!7~QHsc5? z#|@}{h05hUjU({1T`P_wkP`|52q1s}0tg_000IagfIyuE3a30WzJ9>9e6}X!J&`sR zWN>}D9Qy98Y1%CW-q}G0)NhBvTlqyJYo?q?_F|B|s99MR0$;Pu34O0wT{^Qw($+;f zX&bh=XcUhj#)C%!@o-Fx#iP++B$kMUCW6Oefr%-vk8uQh8AqUg(>FQs0&nG?9LZd{ z{w?DO>ilJ-c?1wZ009ILKmY**5I_I{1pXTWRnHeV_{Qg(uLXYBRKI|$fmTT|aP4cA z&k`6?4-**l503Qvhx>>8VqoCV;K-q;howVRp2BCt)`!D4VxxDEr%?4LsJg{|g$mC- zKcDO@lTDuH4-AET#~hcO-rO~->G6d4cB z2t9u~QQoCkLl=_~p_f<6^o)8j6{D|k*wxb2-R)W)t4aP?-r2odvd5hykEUfC86ztq zld*5$&Y2lmSLCgnnX!ztvyYSX(KfB~YI`Ie4)=MdqM?aE zbXFV<&dSp_)4I>=lb^S$c!8O()>l%$ZXR$xhr|mw5=;?5009ILKmY**5I_I{1Q56f z1@;&(@cny*7yC|Re!jza0hP<3S-w@@f>ZVsFQ9d5TKh)(M%y)~I#UD?KmY**5I_I{ z1Q0*~fqDrLFHnbg0eQ2&xVPg4s`3%6T~7GJ&)xS2`3UOuEu>up5I_I{1Q0*~0R#|0 z009K