feat: v0.7.0 参数化查询 + 事务增量 flush + 复合主键语义硬化 + EXPLAIN 真实索引信息
- 参数化查询 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:
@@ -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
|
||||
|
||||
### 原子性 / 一致性 / 资源治理
|
||||
|
||||
Reference in New Issue
Block a user