feat: v0.7.0 参数化查询 + 事务增量 flush + 复合主键语义硬化 + EXPLAIN 真实索引信息
CI / test (22.x) (push) Successful in 17m29s
CI / test (24.x) (push) Failing after 17m32s
CI / e2e (push) Successful in 9m53s
CI / test (18.x) (push) Successful in 19m17s
CI / test (20.x) (push) Successful in 18m15s

- 参数化查询 db.query(sql, params):词法层 ? 绑定 + SQL 字面量安全编码
  ('' 转义/注入防护);参数计数不匹配 PARAM_ERROR;对象参数显式拒绝
- KVStoreEngine 事务增量 flush:行级变更追踪,commit 仅写改动行
  (1000 行表改 1 行:日志 1 条目 vs 整表 1000 条目);级联影响表漏写修复
  (txFullTables 同步加入 txDirtyTables);移除每次 commit 全量 checkpoint
  (阈值自动 checkpoint + close 统一截断)
- 复合主键显式拒绝:createSchema 校验期 SCHEMA_ERROR + ALTER ADD 主键列防护
  (此前静默取第一个主键,其余标记失效)
- EXPLAIN usingIndex 真实命中信息:pk / index:col / none

测试 1126 → 1147(72 套件);行覆盖率 89.8%;版本 0.7.0
This commit is contained in:
thzxx
2026-08-13 10:57:26 +08:00
parent f97c5a6001
commit 57415975ea
20 changed files with 1542 additions and 69 deletions
+46
View File
@@ -2,6 +2,52 @@
All notable changes to MetonaSqlark will be documented in this file.
## [0.7.0] - 2026-08-13
### 参数化查询 / 事务性能 / 语义硬化
> 深度审计第三阶段:能力补全(参数化查询)、大库事务性能、
> 复合主键语义陷阱显式化、EXPLAIN 真实索引信息。
### Added
- **参数化查询** — `db.query(sql, params)` 位置参数(`?`):
- 绑定在词法层完成(仅替换字符串字面量之外的 `?``''` 转义与原样保留)
- 值按 SQL 字面量安全编码(字符串 `''` 转义 / 数字 / 布尔 / NULL),
注入防护从根上成立(`'x'; DROP TABLE users; --` 作为字面量原样入库)
- 参数数量不匹配 → `PARAM_ERROR`;对象/数组参数显式拒绝(SQL 方言无 json
字面量,防静默类型错配);NaN/Infinity → NULL
- **EXPLAIN 真实索引信息** — `usingIndex` 从 'auto' 占位升级为真实命中判定:
主键条件 → `pk`、索引/唯一列条件 → `index:col`、无索引 → `none`
(引擎无关启发式:按 schema 标记判定,与各引擎 tryIndexLookup 路径一致)
### Changed
- **KVStoreEngine 事务增量 flush(性能)** — commit 时此前对每个 dirty 表整表
diff(大表事务改 1 行也 O(表大小))。现在行级变更追踪:普通 insert/update/delete
仅写事务内改动行(单次全表扫描 + 变更集合过滤);主键变更/级联影响表整表 diff
兜底;事务内 clear/drop 只删 KV 行;clear 后写入自动切换兜底。实测:1000 行表
事务改 1 行 commit 日志仅 1 条记录 1 个条目(此前 1000 条目)
- **移除每次 commit 的强制全量 checkpoint** — KVStore 按日志阈值自动 checkpoint
(日志重放保证崩溃恢复),close() 时统一 checkpoint 截断(重开更快);
大库高频事务不再 O(库大小)
- **复合主键显式拒绝(语义陷阱)** — 此前 schema 允许多个 primaryKey 但引擎
静默取第一个(其余标记失效)。createSchema 校验期抛 `SCHEMA_ERROR`
(含明确指引);ALTER TABLE ADD 主键列同样防护(防绕过建表校验)。
复合主键列入 v0.8 路线图
### Fixed
- 事务级联影响表漏写 — delete/update 的级联影响表加入 txFullTables 但未加入
txDirtyTables → commit 循环不处理 → 级联改动(SET NULL 等)不落盘
### Changed(测试)
- 测试 1126 → **1147**72 套件,+21 个 v0.7.0 回归);新增 `tests/v070-features.test.ts`
(复合主键拒绝 ×3 / 参数化 ×7 / 事务增量 flush ×8 / EXPLAIN ×2
---
## [0.6.3] - 2026-08-13
### 原子性 / 一致性 / 资源治理