Files
MetonaSqlark/CHANGELOG.md
T
thzxx 725ee74a68
CI / test (22.x) (push) Successful in 9m56s
CI / test (24.x) (push) Successful in 10m0s
CI / test (18.x) (push) Successful in 10m0s
CI / test (20.x) (push) Successful in 10m2s
docs: README/CHANGELOG/site 更新至 v0.2.1
2026-07-27 20:51:26 +08:00

8.6 KiB
Raw Blame History

Changelog

All notable changes to MetonaSqlark will be documented in this file.

[0.2.1] - 2026-07-27

Fixed

  • WAL CRC 校验验证 — 恢复时计算并验证 CRC32,损坏记录自动跳过并告警
  • Hybrid 引擎提交顺序 — commit 先写磁盘再写内存,磁盘失败回滚内存,消除数据不一致风险
  • RESTRICT 外键行为修正 — 检测到引用行时抛出 FOREIGN_KEY_VIOLATION,不再静默保留孤儿
  • SSTable rangeScan 边界保护 — 空索引或 startBlockIdx > endBlockIdx 时安全返回

Added

  • ColumnDef 约束激活maxLength/min/max 约束在 checkFieldType 中正式生效
  • 查询结果上限DatabaseConfig.maxRowsPerQuery(默认 0 不限制),防止超大结果集 OOM
  • onError 全局回调 — 配置中的 onError 回调实际接入 CRUD 异常路径
  • debug 调试模式DatabaseConfig.debug: true 输出 [MetonaSqlark:name] 前缀的结构化日志
  • 浏览器兼容性声明 — README 增加 Chrome 80+/Firefox 80+/Safari 14+/Edge 80+ 支持矩阵

Changed

  • MemoryEngine RESTRICT 外键行为:从"不级联保留孤儿"改为"禁止删除抛异常"
  • Hybrid 引擎 commitTransaction 磁盘优先于内存
  • DB_DEFAULTS 新增 maxRowsPerQuery: 0debug: false

[0.2.0] - 2026-07-27

Added

  • AriaEngine 自研存储引擎 — 基于 LSM-Tree 的页面式存储引擎,19 个新模块,~3500 行 TypeScript
    • 页面格式层 (page/): 4KB Slotted Page 编解码、Tuple 二进制序列化、CRC32 校验
    • Buffer Pool (buffer/): LRU 页面缓存 + 驱逐策略,可控内存占用
    • LSM-Tree 索引 (index/): MemTable (红黑树) + 多级 SSTable + Leveled Compaction
    • Bloom Filter (index/bloom.ts): FNV-1a + Murmur 双哈希,快速键否定判定
    • SSTable 构建器/读取器 (index/sstable_builder.ts, sstable.ts): 二分查找 + 范围扫描
    • Merge Iterator (index/merge_iterator.ts): 最小堆多路归并,去重保留最新值
    • WAL (wal/): 二进制日志格式 (LSN/type/txnId/table/key/json/CRC) + Checkpoint 管理
    • MVCC (transaction/mvcc.ts): 版本链 + 快照隔离 + GC
    • 存储后端 (store/): IndexedDB / Memory 双后端抽象
    • LZ4 压缩 (compression/lz4.ts): 简易页面级压缩
  • mode: 'aria' — 新增存储模式,可通过 MetonaSqlark.create({ mode: 'aria' }) 激活
  • Schema 持久化 — 表结构自动保存到 __aria_schemas,重启自动恢复
  • SSTable 元数据管理 — SSTable 索引信息持久化,启动时自动扫描加载
  • 事务感知 CRUD — insert/update/delete 在事务中缓冲到 snapshotcommit 批量写入 LSM
  • 244 个 AriaEngine 专项测试 — 覆盖生命周期/表管理/CRUD/事务/持久化/SQL 集成/页面格式/LSM/压缩

Changed

  • StorageMode 类型新增 'aria'
  • STORAGE_MODES 数组新增 'aria'
  • createEngine() 支持 mode: 'aria' 分支
  • 测试从 318 → 526,套件从 20 → 27
  • 新增 7 个模块级测试文件:aria-pagearia-indexaria-sstablearia-bufferaria-wal-mvccaria-compressaria
  • LRUList 修复 size 追踪 bug
  • WAL 存储改为按记录独立 key(避免拼接缓冲区越界)
  • CheckpointManager 解耦 BufferPool 依赖

Fixed

  • LZ4 压缩无限循环 — 字面量分支在发现匹配后回退导致 litLen=0 死循环,CI 卡死根因
  • SSTableReader.get() 自比较 bug — 参数 key 被循环变量遮蔽导致永远返回第一条
  • CheckpointManager 测试 null 引用 — 改为 Mock 对象避免 TypeError 导致进程无法退出
  • IndexedDB 持久化测试 — 替换为 Memory Backend 验证,消除 fake-indexeddb timer 堆积
  • LSM.flush() 不必要 setTimeout — 替换为 Promise.resolve(),消除额外 timer 延迟

[0.1.14] - 2026-07-26

Fixed

  • IndexedDB 事务原子性: flushToIDB 改为单 IDB 事务包裹 clear+insert,消除崩溃丢数据风险
  • 多标签页冲突: open() 添加 onversionchange 监听,其他标签页升级版本时自动关闭过期连接
  • Memory 引擎幂等: open() 重复调用安全无副作用
  • 关闭时清理 onversionchange 监听器,防止内存泄漏

[0.1.13] - 2026-07-26

Added

  • 事务回滚机制: IStorageEngine 新增 beginTransaction/commitTransaction/rollbackTransaction 接口
    • MemoryEngine: 快照式回滚(深拷贝 tables/schemas/indexes
    • IndexedDBEngine: 延迟写入策略(事务中仅写内存,commit 批量刷 IDB)
    • OPFSEngine: 快照式回滚(commit 批量写文件)
    • HybridEngine: 同时代理内存+磁盘引擎事务
  • 子查询支持: SQL Parser + Executor 支持 IN (SELECT ...)op (SELECT ...) 子查询
    • AST 新增 SubqueryExpression 类型
    • Parser 在 IN 和比较运算符后检测子查询
    • Executor 新增 resolveSubqueries() 递归解析,自动执行子查询并替换为具体值
  • 外键级联操作: ColumnDef 新增 onDelete/onUpdate 选项
    • 支持 CASCADE(递归级联删除)、SET NULLRESTRICT
    • SQL Parser 解析 REFERENCES table(col) ON DELETE CASCADE ON UPDATE CASCADE
    • MemoryEngine 内置 cascadeDelete() 递归级联逻辑
  • 连接池管理: MetonaSqlark.connect() 静态方法
    • 同名数据库复用已打开实例,引用计数管理
    • db.disconnect() 释放连接,归零自动 close
    • MetonaSqlark.disconnectAll() 强制关闭所有连接

Changed

  • TransactionManager.execute() 调用引擎层 begin/commit/rollback 实现真正原子性
  • IndexedDBEngine CRUD 事务感知:活跃事务中延迟 IDB 写入
  • ASTColumnDef / astColumnToColumnDef 支持 references/onDelete/onUpdate 透传

Fixed

  • IndexedDBEngine 事务中 find/count 从内存缓存读取(保证读到未提交变更)
  • SQL Parser parseColumnDef 循环条件扩展,避免 REFERENCES 语法解析中断

[0.1.12] - 2026-07-26

Added

  • MeSqlark 别名导出,与 MetonaSqlark 完全等价
  • metona-sqlark.cjs.js CommonJS 构建产物
  • 完善的 where-matcher.ts 消除 220+ 行重复代码
  • $col 列引用支持 JOIN ON 条件
  • $and/$or 嵌套支持(字段级 + 顶层)
  • $not 逻辑非操作符
  • $like 正则缓存加速
  • projectColumns 列投影支持 table.column 格式
  • DISTINCT 去重支持(O(n) 时间,列值拼接优化)
  • 测试覆盖率提升至 93.46%(264 测试/15 套件)

Changed

  • where-matcher 统一 MemoryEngine / IndexedDBEngine / Executor 的 WHERE 逻辑
  • JOIN ON 匹配支持 $col 语法
  • LIKE 正则改为缓存式编译
  • Executor DISTINCT 用列值拼接代替 JSON.stringify
  • JOIN 嵌套循环连接优化:避免 ON 时对象扩散

Fixed

  • IndexedDBEngine update/delete 方法正确同步内存缓存
  • OPFSEngine getTableNames 兼容 entries() 返回值
  • SQL Parser 正确处理字符串转义字符
  • SQL Parser 正确处理表别名(无 AS 关键字)
  • SQL Parser 解析 IS NULL / IS NOT NULL / NOT LIKE
  • peekTokenIs 方法正确暴露给语法分析
  • 多处边界条件空值/假值处理

[0.1.11] - 2026-07-25

Added

  • React 集成 hooks: useQuery, useTable, useDatabase
  • Vue 集成 composables: useSqlarkQuery, useSqlarkTable, useSqlarkDatabase
  • 发布订阅系统: subscribe(), emit()
  • 数据迁移系统: addMigration(), migrateTo()
  • 导入导出: exportTable(), exportAll(), importTable()
  • 完整 SQL 解析器: Lexer + Parser(递归下降)
  • SQL 支持: SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE
  • JOIN 支持: INNER, LEFT, RIGHT, CROSS
  • GROUP BY + HAVING + 聚合函数 (COUNT, SUM, AVG, MIN, MAX)
  • DISTINCT, ORDER BY, LIMIT, OFFSET
  • WHERE 条件: AND, OR, NOT, IN, LIKE, IS NULL
  • Query Builder 链式 API: select().where().orderBy().limit().execute()
  • 插件系统: 14 种生命周期钩子 + PluginManager
  • Metadata 系统: ColumnDef 完整约束 (type/primaryKey/required/unique/index/default/references/maxLength/min/max)

Changed

  • 架构重构为分层设计:Engine → QueryExecutor → Table/QueryBuilder → SQL Parser → Public API
  • AST 作为统一中间表示,SQL 和 QueryBuilder 行为完全一致
  • 测试框架完善:core / edge / groupby / join / query-system / sql / table / engine / transaction / plugin / hybrid 全覆盖

[0.0.1] - 2026-07-24

Added

  • 初始项目骨架
  • TypeScript 配置(严格模式)
  • Rollup 构建(UMD / ESM / CJS / min / .d.ts
  • Jest + jsdom 测试环境
  • ESLint + @typescript-eslint
  • Gitea Actions CI 工作流
  • 示例站点(index / demo / docs
  • 构建脚本 build.sh