# Changelog All notable changes to MetonaSqlark will be documented in this file. ## [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 NULL`、`RESTRICT` - 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