Files
MetonaSqlark/.zcode/plans/plan-sess_4951c8b8-27ba-4c84-a167-0c3422d65a2c.md
T
thzxx e6efa39d48
CI / test (20.x) (push) Successful in 9m58s
CI / test (18.x) (push) Successful in 10m0s
CI / test (22.x) (push) Successful in 10m0s
CI / test (24.x) (push) Successful in 9m56s
release: v0.2.1 生产加固 — WAL CRC/约束激活/Hybrid提交顺序/RESTRICT外键/浏览器兼容表/debug模式/onError回调
2026-07-27 20:47:30 +08:00

54 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v0.2.1 生产加固方案
## 核心原则
- **所有新增测试方法必须确保不会导致 CI 卡死**(无 setTimeout/setInterval 泄漏,无 fake-indexeddb 滥用,无无限循环)
- 优先级 P0 → P1 → P2 顺序执行
## P0 — Critical4项)
1. **Memory 引擎事务回滚修复**`src/engine/memory.ts` 的事务快照机制已存在但 TransactionManager 未正确调用。修复 `src/transaction/index.ts` 在 rollback 时调用引擎层 rollback。
2. **WAL CRC 校验验证**`src/engine/aria/wal/log.ts` decodeAllRecords 跳过 CRC,恢复时验证 CRC 不匹配则丢弃 + 告警。
3. **Hybrid 引擎提交顺序**`src/hybrid/index.ts` commit 先写磁盘再写内存,磁盘失败回滚内存。
4. **SSTableReader rangeScan 边界条件** — 修复多 block 场景下 startBlockIdx/endBlockIdx 可能越界。
## P1 — High6项)
5. **ColumnDef 约束激活**`src/table/schema.ts` checkFieldType 中激活 min/max/maxLength 校验。配套新增 schema 测试(纯同步,不会卡死)。
6. **查询结果上限**`DatabaseConfig` 增加 `maxRowsPerQuery` 默认 10000,所有引擎 find() 中截断。测试用 memory 引擎(纯同步)。
7. **`onError` 回调接入** — `src/core.ts` CRUD 操作 catch 块调用 `this.config.onError`。测试用 jest.fn() 验证(同步断言)。
8. **OPFS 引擎基础测试** — 补 5 个测试:open/close、createTable、insert、find、count。由于 OPFS 浏览器专属,测试用内存 fallback mock 方式,避免 jsdom 不具备 OPFS 导致卡死。
9. **MVCC gc() 定期调用** — AriaEngine `checkpointManager.tick()` 后每 N 次 op 调用一次 gc()。测试用 MVCC 单元测试(纯同步)。
10. **SSTable `get()` 返回 null 兜底** — 已修复(P0-4包含)
## P2 — Medium6项)
11. **LZ4 压缩修复 + 正确性测试** — 修复 compress/decompress 往返 bug,补 3 个往返正确性测试。**注意**:测试数据量控制在 500 字节以内,避免大循环。纯同步测试。
12. **debug 模式**`DatabaseConfig``debug: boolean`console.debug 输出关键操作日志。
13. **RESTRICT 外键行为修正** — cascadeDelete 检测到引用行时抛 `FOREIGN_KEY_VIOLATION` 而非静默保留孤儿。
14. **浏览器兼容表** — README 补充 Chrome 80+/Firefox 80+/Safari 14+/Edge 80+ 支持声明。
15. **React/Vue 集成去 @ts-nocheck** — 移除注释,补充完整类型声明。(测试仅验证编译不验证运行时,避免 jsdom 缺失 hooks 导致卡死)
16. **SQL 多语句防护** — Parser 检测到多余分号后还有有效 token 时报 `PARSE_ERROR`
## 严禁事项(新增测试必须遵守)
- ❌ 不使用 `setTimeout`/`setInterval` 除非配合 `jest.useFakeTimers()`
- ❌ 不使用 `fake-indexeddb` 进行多轮 open/close/reopen
- ❌ 不创建 IndexedDB 连接后不关闭
- ❌ 不使用 `done()` 回调模式
- ❌ 不对大数据集(>1000条)做 O(n²) 操作
- ✅ 优先使用 async/await + Memory Backend
- ✅ Mock 代替真实浏览器 API
- ✅ 每个 afterEach 确保资源清理