105 lines
4.4 KiB
Markdown
105 lines
4.4 KiB
Markdown
# 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
|