thzxx
|
799560ea05
|
docs(G6): 宣称与实现一致性收口 —— priority 真正生效、MVCC/backup/引擎数/打包 全部对齐
独立核验(12 条宣称逐条对源码验证)发现 5 处**硬伤**与 2 处**数字过期**,
本提交按"能改代码就让宣称成立、改不动就如实描述"的原则全部收口。
让实现符合文档(2 处):
1. **插件 priority 此前不生效** — `register()` 虽按 priority 插入数组,但
`install()` 在 register 内**立即**执行,因此 install 与钩子顺序 = config 数组
顺序(实测 priority low=1/high=100/mid=50 时钩子按 low→high→mid 触发,
只有 `getPlugins()` 是 high,mid,low)。而 README/CONTRIBUTING/constants
一直宣称"越大越先执行"。
现在 Core 注册前按 priority **稳定降序**排序(同优先级保持数组顺序),
install 与钩子都按优先级执行 → 宣称成立。新增
`tests/v080-plugin-priority.test.ts` 锁定 install 顺序、钩子顺序、稳定性、缺省值。
2. **连接池静态方法不在类型系统里** — `MetonaSqlark.connect/disconnect/
disconnectAll/getActiveConnections` 由 connection-manager 用
`as unknown as Record<string, unknown>` 注入,README 的连接池表格在
TypeScript 下全部 TS2339。现在在类上声明为可选静态成员,注入处去掉断言。
如实描述(3 处):
3. **MVCC 快照隔离**(README 三处 + 实现对照)— `snapshotLsn` / `prevVersion`
只写不读,事务读走 `txnSnapshot`+LSM,commit 即清理版本链,并发
`beginTransaction` 抛 `TX_ACTIVE`。改为"快照回滚(事务串行,非 MVCC 隔离)",
并在 README 架构图与维护语句表里同步措辞。
4. **"存储引擎(5 种)"** — 实际是 4 种模式 + 3 种后端,引擎类只有 4 个
(Memory / KVStore / Hybrid / Aria),OPFS 是后端而非引擎。标题与条目已改写,
并写明"`disk`/`hybrid` 恒用 KVStore"。
5. **`diskEngine` 生效范围** — 仅 `mode:'aria'` 生效;`constants.ts` 的注释
此前写成"仅 mode='disk'|'hybrid' 时生效"(正好写反),已改正;README 配置表、
快速开始示例与 Aria 示例同步标注。
数字口径统一(可复现):
- 测试 1872(90 套件)+ 14 e2e,另 4 个重型套件在独立 CI job 串行运行;
- 覆盖率 语句 90.43% / 分支 82.21% / 函数 94.27% / 行 93.44%;
- README 明确写出**产出这些数字的完整命令**(与 CI 常规 job 一致),
并要求改动覆盖范围/阈值时同步更新表格(G5)。
- CHANGELOG 0.8.0 条目与 site 首页/文档页同步。
另修 **CONTRIBUTING 的钩子契约**:明确写出"返回值被忽略(不能取消/改写)、
就地改参数在 Table API 生效、抛异常可取消、SQL 路径的 beforeInsert 收到副本"
—— 此前只写 "allow intercepting",容易被理解为返回值可改变行为。
验证:全量 90 套件 / 1872 测试通过(+4 重型套件);覆盖率四项均高于阈值;
typecheck(src+tests)、lint、build 零错误零告警;e2e 14 项通过;dist 已重建。
|
2026-09-15 08:06:23 +08:00 |
|
thzxx
|
4ab04df882
|
fix(A15): 三值逻辑求值器统一 —— 消除 WHERE 的第二套语义(静默错值根治)
背景(PLAN-v0.7.5.md 根因 1/7、缺陷 A15):
项目里 `matchWhere`(布尔版,自带 matchField)与三值求值器并存。同一条 SQL 的
语义取决于走哪个函数,实测三类静默错值:
- `WHERE n = NULL` 命中 NULL 行、`WHERE n != NULL` 返回所有非 NULL 行;
- `WHERE s NOT LIKE 'x'` 会把 NULL 行判真(布尔取反);
- `WHERE n NOT BETWEEN 1 AND 2` 恒空集 —— parser 生成的字段级
`{ n: { $or: [ {$lt:1}, {$gt:2} ] } }` 递归进了 where 子句级求值器,
子项 `{ $lt: 1 }` 被当成"查询列 `$lt`" → 每行 UNKNOWN。
根治方式(不是打补丁,而是取消第二套实现):
1. where-matcher.ts 重写为**唯一一个递归求值器**,同时理解 where 子句级
(键是列名/逻辑连接词)与操作符级(键是 `$gt` …),位置由上下文承载而非
由另一个函数承载;`matchWhere` 退化为"三值结果是否恰为 TRUE"。
行上下文随求值上下文下传,`$col` 在任意嵌套深度都能解析。
2. parser:`IS NULL` / `IS NOT NULL` 生成 `$isNull` / `$isNotNull` **谓词**
(此前与 `= NULL` / `!= NULL` 共用 `$eq: null` / `$ne: null`,两者语义无法区分);
`BETWEEN` 生成真正的范围条件(此前把同一对象同时当操作符对象与操作数);
`NOT BETWEEN` 展开为 `$or: [{$lt}, {$gt}]`。
3. executor 新增 enginePreFilter:逐行求值谓词(`$col` / `$exists` / CASE 键)
必须整体移出引擎层 —— 引擎无外层行上下文,会把它们判 UNKNOWN 并把**所有行**
过滤掉,逐行求值再正确也无行可算。粒度按连接词决定:`$and` 成员可单独移除,
`$or`/`$not` 成员一移除就改变结果集(漏行/多行),故整条下推放弃。
契约变更(旧测试编码了错误语义,已按 SQL 标准改正并注明理由):
- a) `{ $eq: null }` 不再命中 NULL 行(`= NULL` 恒 UNKNOWN)→ 用 `$isNull`;
- b) `IN` 列表含 NULL:`x IN (NULL, 'a')` 只命中 'a'(`null = NULL` 为 UNKNOWN),
未命中的行仍因 UNKNOWN 不保留。
- c) 引擎层 `$in: [null, ...]` 与 `$eq: null` 的断言同步修正。
验证:
- 新增 tests/v080-sql-three-valued.test.ts:26 条 SQL 语义矩阵 × 4 引擎
(memory/disk/hybrid/aria)+ UPDATE/DELETE 写路径,共 104 断言;
- 全量 83 套件 / 1458 测试通过(含 Aria 生产负载 10 万行);
- typecheck(src+tests) 与 lint 零错误。
|
2026-09-14 23:22:26 +08:00 |
|
thzxx
|
674da6b7b7
|
fix(A9/A10): 发布订阅接线 + 列对列比较与关联子查询(静默空结果根治)
A9 db.subscribe 对本地写入永不触发
全库唯一调用 emit 的地方在 BroadcastChannel 收到**其它标签页**消息的分支里,
于是 README:232「订阅表变更」与 site/docs.html:667-679 的示例
(event.type: 'insert'|'update'|'delete'、event.row)全部不成立。
根治方式:新增 src/engine/change-notifier.ts —— IStorageEngine 装饰器,
把变更通知收敛到**引擎接口**这一个位置(三个写入入口 SQL/Table/Builder 与
事务内写入都必须经过它),避免在三条路径上各写一份变更描述逻辑。
事件语义(兑现文档承诺):INSERT 逐行带 row+key;UPDATE/DELETE 写入前快照
受影响行、成功后逐行发事件并带更新后/删除前的行;CLEAR/DDL 表级事件。
订阅者返回 Promise 时被 await;订阅者抛错不影响写入结果(只上报 onError)。
两个实现细节值得记录:
1. 引擎被装饰后,core 里 `this.engine instanceof HybridEngine` 恒为 false
→ Hybrid 跨标签页重载静默失效。新增 unwrapEngine() 对**内层**引擎做能力探测。
2. 外部事件(external)绝不能重新广播 —— 否则 A↔B 互相转发形成无限循环
(实测 8 次以上且不终止)。已分离 emitExternal 路径。
A10 列对列比较与关联 IN 子查询静默空结果
1) `WHERE t.x = t.y`(唯一可解析的列对列写法)返回 []:
- 引擎层 matchWhere 无 $col 上下文,把 `{ $col: ... }` 当普通对象比较;
- executor.filterCorrelated 调用 matchWhere 时**没传** `{ $col: true }`。
修复:engine 层遇到未解析操作数($col/$subquery)时**放行**而非判假 ——
引擎的过滤只允许缩小候选集,最终判定始终由带上下文的 executor 完成;
executor 侧补上 `{ $col: true }`。
同时修正 MemoryEngine/AriaEngine 的索引下推:非原始值(对象)不走索引,
否则 String({...}) 得到无意义键、查找为空并短路全表扫描 → 静默空结果。
2) `WHERE id IN (SELECT user_id FROM o WHERE o.user_id = u.id)` 返回 []:
子查询执行**不传外层行上下文**,`u.id` 绑定为 null → 子查询空集 → `$in: []`。
(结构相同的 EXISTS 走另一条分支、结果正确 —— 又一处"同一语义两条路径"。)
修复:resolveOperatorSubqueries 接收并传递 contextRow;bindColumnRefs 递归
进入 $subquery 绑定外层引用;新增 lookupOuterValue 先剥外层表名/别名前缀
再取值(外层行键不带前缀,否则 `u.id` 取 undefined 被 `?? null` 静默成 null)。
ChangeNotifierEngine 能力转发
装饰器只实现 IStorageEngine 声明的成员,导致:
- 可选能力缺失时抛原生 Error,破坏 `NOT_SUPPORTED` 错误码契约(14 个用例失败)
→ 新增 requireCapability,统一抛 NOT_SUPPORTED 并保留方法名;
- 接口外方法(analyzeTable/reindexTable/vacuum)在被包装后静默消失
→ 新增 requireOptionalMethod 显式转发(ANALYZE/REINDEX/VACUUM 恢复可用)。
新增 tests/v080-subscribe.test.ts(5 用例,四引擎 × 三种入口)、
tests/v080-correlated.test.ts(4 用例,含"关联 IN 与等价 EXISTS 结果一致"护栏)。
|
2026-09-14 22:29:51 +08:00 |
|
thzxx
|
074afd3f1e
|
fix(A8 + LSM 读自洽): 行所有权根治 + 读取路径不再依赖 prefetch
A8 行引用泄漏(调用方改查询结果即改写存储)
实测:rows[0].tag = 'HACKED' 后,tag='HACKED' 与 tag='x' 两条索引查询都返回 0 行 ——
行与索引失配、该行永久查不出来;嵌套 json 值同样按引用共享。
Aria 因走反序列化路径反而幸免,又形成跨引擎差异。
根治:在 IStorageEngine 契约层写入**行所有权约定**(engine/interface.ts)
—— 读出的行是副本、写入接收的行也是副本;新增 cloneRow/cloneRows
(优先 structuredClone,退化路径处理 Date/嵌套对象/二进制)。
Memory/KVStore/Hybrid:find、findStream、getRow 全部返回副本。
Aria:getAllRows 此前只做 `{ ...value }` 浅拷贝(嵌套 json 仍共享引用),
改为深拷贝;find/findStream 返回副本。
实测四种引擎:修改返回值后重读不变、索引两条查询均正确。
LSM 读取自洽(审计 P1-1:缓存未命中 = 静默丢数据)
此前 loadSSTableReader 缓存未命中返回 null,而所有调用方都是
const reader = this.loadSSTableReader(meta); if (!reader) continue;
于是**未命中就静默跳过整个 SSTable**。实测:缓存上限 4KB 而 SSTable 更大时,
300 行只能查回 59 行,且不报错。
同时"读路径必须先 prefetch"这个隐式约定,是每次读都要 drainChain + prefetch
的原因(性能悬崖的另一半)。
根治:LSM.get / rangeScan / rangeScanLazy 改为 async,未命中即
`await sstableStore.load()` 回源 + CRC 校验(损坏则自愈清理 meta),
只有数据确实不存在才返回 null。checkUniqueSync 相应改名 checkUnique 并 async
(原命名正是因为依赖 prefetch 约定)。引擎侧 12 处调用点补 await。
附带修正的缓存语义:
- tryCacheSSTable:单个 SSTable 超过缓存上限时标记为常驻(pinned),
不参与驱逐 —— 驱逐它等价于静默丢数据;内存上限因此是
cacheLimit + 单个最大 SSTable,已在代码与测试中明确。
- trimCache 跳过 pinned 条目(此前会把全部缓存一次性清空)。
- 新增 getCacheSize/getCacheLimit/getOversizedCount/setCacheLimit 访问器
(测试此前直接读私有字段 cacheSize/cacheLimitBytes —— 那是 TS 错误,
只因测试不做类型检查才没暴露)。
queryStream async 回调
此前用 constructor.name === 'AsyncFunction' 判定,对"普通函数返回 Promise"
完全失效(Promise 被静默丢弃)。现改为双条件识别并走物化路径逐行 await,
async 回调被真正等待。
测试契约修正:
- aria-cache:'缓存大小受上限约束' 在极小缓存下是不可成立的契约,改为断言
真正重要的不变量(数据完整;可装入时受上限约束),并新增"超大 SSTable 常驻"
用例;'缓存驱逐后全表扫描仍返回完整数据' 保留 300 行断言(此前会失败)。
- hybrid:磁盘引擎标签断言从 indexeddb(v0.6.0 已移除)改为 opfs。
|
2026-09-14 21:43:21 +08:00 |
|
thzxx
|
752bdea97d
|
fix(A5/A6/A7/A16/A18/A24/A28): 查询层语义根治 —— LIMIT 双重应用、未知列静默、聚合崩溃与空集语义
A6 LIMIT/OFFSET 被应用两次(丢行)
compileSelect 无条件下推 limit/offset,引擎切一次,executeSelect 末尾又切一次。
实测 4 行表:LIMIT 2 OFFSET 1 只返回 1 行;LIMIT 10 OFFSET 3 返回空。
JOIN/派生表路径因不走 plan 反而正确,同一 executor 内自相矛盾。
现引入 analyzeSelect() 统一判定 limitPushdownSafe,两条路径互斥且只应用一次。
实测 10 种查询形态(含 DISTINCT/GROUP BY/别名/深 OFFSET/LIMIT 0)全部正确。
A7 queryStream 与 query 结果不一致(四类静默分歧)
core.ts 自己重写了一套能否走引擎快路径/如何投影的规则,与 executor 各写一份:
SELECT id AS x FROM t query [{x}],stream [{id,v}](全列+原列名)
SELECT t.id FROM t query [{id}],stream [{}](空对象)
LIMIT 2 OFFSET 1 query 1 行,stream 2 行
LIMIT 0 query 0 行,stream 1 行(Aria 又是 0 行)
且流式路径不触发 beforeQuery/afterQuery、不受 maxRowsPerQuery 约束。
现由 executor.analyzeSelect() 做单一事实来源;不可流式一律回退物化路径;
列引用剥离主表别名前缀;LIMIT 0 短路;回调返回 Promise 时显式报错
(此前用 constructor.name === 'AsyncFunction' 判定,普通函数返回 Promise 会静默丢弃)。
实测 16 种查询形态 × 4 引擎 = 64 组,query 与 queryStream 逐值相等。
A5 MIN/MAX 栈溢出(崩溃)
Math.min(...arr) 展开实参:20 万行同组直接 RangeError。改为单次遍历归约 reduceNumeric。
A24 空集聚合语义
SUM/AVG/MIN/MAX 对空集返回 0(使 和为 0 与 无数据 不可区分),改为 SQL 标准的 NULL;
COUNT 仍返回 0。
A18 未知列静默产出空对象行
SELECT bogus FROM t 返回 [{},{},...](行数对、内容空、无报错);SELECT NAME(列名 name)
同样静默空。新增 assertProjectionColumnsExist:投影前校验列存在性,
未知列抛 COLUMN_NOT_FOUND;同一后缀命中多个表别名时抛歧义错误。空结果集不误报。
A16 INSERT 列/值个数不校验(静默丢弃/写半行)
显式列名时在解析期校验每行值个数与列数一致:
INSERT INTO t (id,name) VALUES ('4','z',9) 此前静默丢弃 9,现报错。
A28 UPDATE SET __proto__ 静默吞掉
sets['__proto__'] 触发原型 setter,sets 变空对象,既不写入也不被未知列预检看到,
表现为返回成功但什么都没发生。parser 的列名映射统一改为 Object.create(null)。
附带修复(A18 验证时发现):
SELECT 1 AS one FROM t 返回 [{}] —— parseColumnRef 的数字分支提前 return 吞掉别名;
裸 SELECT 1 同样产出空对象 —— 投影未处理匿名常量列。现按 SQLite 语义以表达式原文为键。
|
2026-09-14 21:19:49 +08:00 |
|
thzxx
|
d4a3f4acd2
|
fix: v0.7.4 写语句子查询 / 约束硬化 / 真惰性流式 — UPDATE-DELETE WHERE 子查询静默 0 行(四引擎,关联引用显式 NOT_SUPPORTED + EXPLAIN 同步)/ 主键 NULL-undefined 强制拒绝 / DROP INDEX 保留建表 UNIQUE(仅索引来源可解除)/ GROUP BY-DISTINCT-UNION 键类型安全编码 / UPDATE 未知列报错 / queryStream 多语句拒绝 / KVStore 后台错误跨 reopen 清理 + Hybrid begin 补偿 / RB-Tree 删除双黑修复 + LSM 死代码清理 / findStream 迭代器化真惰性(limit 早停 O(1) 内存)/ REINDEX 单次扫描 + 48 回归
|
2026-08-15 15:08:33 +08:00 |
|
thzxx
|
50468b9b0e
|
fix: v0.7.3 数据正确性与边界窗口收尾 — INSERT 语句级原子(三引擎+Aria PK 批内重复)/ 索引列 IS NULL 恒空 / delete RESTRICT 破坏索引 / queryStream 子查询静默空结果 / ALTER DROP 索引残留 / UNIQUE INDEX 存量校验 / SELECT * 别名投影 / WAL BEGIN/ROLLBACK 事务边界 / aria $in 与级联重复扫描性能 / $and 等值下推 / ANALYZE 索引统计 / React-Vue hooks 生命周期 / 迁移主键兜底 + 58 回归
CI / test (18.x) (push) Successful in 17m43s
CI / test (22.x) (push) Successful in 13m45s
CI / test (20.x) (push) Successful in 15m33s
CI / test (24.x) (push) Successful in 24m46s
CI / e2e (push) Successful in 52s
|
2026-08-14 22:53:46 +08:00 |
|
thzxx
|
cbe407eb49
|
fix: v0.7.1 API 修复与防御统一 — static create / 未 open 防护 / 原型污染 / lint 清零
CI / test (22.x) (push) Successful in 17m24s
CI / e2e (push) Successful in 10m39s
CI / test (18.x) (push) Successful in 19m5s
CI / test (20.x) (push) Successful in 18m4s
CI / test (24.x) (push) Successful in 23m19s
- MetonaSqlark.create 静态工厂(README 示例在 ESM/Node 下此前 TypeError),
独立 create 函数委托静态实现
- close 未初始化防御(engine undefined 不再崩溃)
- AriaEngine hasTable/getTableNames/getTableSchema 统一 ensureOpen
- 事务回滚失败不掩盖原始错误
- __proto__ 列名防护:Executor 列映射 Object.create(null) + schema 校验拒绝
- lint 清零(移除 5 处未使用导入)
测试 1147 → 1155(73 套件);行覆盖率 89.8%;版本 0.7.1
|
2026-08-13 11:14:42 +08:00 |
|
thzxx
|
57415975ea
|
feat: v0.7.0 参数化查询 + 事务增量 flush + 复合主键语义硬化 + EXPLAIN 真实索引信息
CI / test (22.x) (push) Successful in 17m29s
CI / test (24.x) (push) Failing after 17m32s
CI / e2e (push) Successful in 9m53s
CI / test (18.x) (push) Successful in 19m17s
CI / test (20.x) (push) Successful in 18m15s
- 参数化查询 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
|
2026-08-13 10:57:26 +08:00 |
|
thzxx
|
25bab0f9aa
|
feat: v0.6.1 — AriaEngine 可选自研 KVStore 后端(storageBackend: 'kv')+ KVStore APPEND 日志类型 + 10 个 aria+kv 集成测试 + 文档全量同步
CI / test (20.x) (push) Successful in 10m55s
CI / test (22.x) (push) Successful in 10m49s
CI / e2e (push) Successful in 9m54s
CI / test (18.x) (push) Successful in 10m58s
CI / test (24.x) (push) Successful in 10m41s
|
2026-08-10 14:52:38 +08:00 |
|
thzxx
|
24b3ca1079
|
release: v0.6.0 — 完全移除 IndexedDB,自研 KVStore 事务存储引擎(多key原子写/快照日志恢复/CRC自愈)+ KVStoreEngine + 旧库迁移工具 + 10万级压力验证 + 崩溃注入e2e
CI / test (20.x) (push) Successful in 10m53s
CI / test (22.x) (push) Successful in 10m47s
CI / test (24.x) (push) Successful in 10m42s
CI / e2e (push) Successful in 10m27s
CI / test (18.x) (push) Successful in 11m1s
|
2026-08-10 13:56:04 +08:00 |
|
thzxx
|
334067d89e
|
release: v0.5.1 — 存储后端生产级硬化(CRC-32/全库加密/WAL分片/页面化存储/多标签页锁/e2e)+ 深度审查修复(假实现接线/死代码清理)
CI / test (18.x) (push) Successful in 10m10s
CI / test (20.x) (push) Successful in 10m10s
CI / test (22.x) (push) Successful in 10m6s
CI / e2e (push) Successful in 9m51s
CI / test (24.x) (push) Successful in 10m28s
|
2026-08-10 12:07:00 +08:00 |
|
thzxx
|
22b0b1fad4
|
release: v0.4.2 — 生产就绪与崩溃自愈 + 问题清单修复 + 版本迭代
CI / test (18.x) (push) Successful in 10m7s
CI / test (20.x) (push) Successful in 10m6s
CI / test (22.x) (push) Successful in 10m2s
CI / test (24.x) (push) Successful in 10m0s
|
2026-08-09 19:15:37 +08:00 |
|
thzxx
|
a1e4f5071c
|
release: v0.4.1 — Aria 级联/ALTER/clearAll + 流式查询/派生表 + 正确性加固
CI / test (20.x) (push) Successful in 10m4s
CI / test (22.x) (push) Successful in 10m8s
CI / test (24.x) (push) Successful in 9m55s
CI / test (18.x) (push) Successful in 10m9s
新增:
- AriaEngine 外键级联(CASCADE/SET NULL/RESTRICT)+ clearAll() 重置 API
- 引擎级 alterTable:Aria DROP COLUMN 重写存储行 + schema 持久化
- 流式查询 queryStream / findStream(LSM 惰性扫描不物化)
- FROM 派生表 / 多列 ON 哈希连接 / COUNT(DISTINCT) / NULLS FIRST/LAST
- 普通列别名 + ORDER BY 别名 + 无表查询 + 字符串常量列
- 演示页引擎切换器(Memory/Aria)+ 预设自动重置
修复:
- Aria WAL DROP_TABLE 崩溃恢复(删表复活)+ 恢复后 WAL 截断
- Memory update/delete 索引维护(unique 约束绕过)
- 关联 EXISTS 绑定失效 / HAVING 标量子查询 / INSERT SELECT 位置错位
- 裸布尔列条件(WHERE done / CASE WHEN done)
- Aria $in 重复行 / JOIN 主表 WHERE 下推 / DROP INDEX 报错
- ORDER BY/GROUP BY/SELECT 表前缀列 + SQL '' 标准转义
质量:894 测试 · 47 套件 · 81.5% 覆盖率
|
2026-08-08 13:36:34 +08:00 |
|
thzxx
|
d544501e1c
|
release: v0.3.2 — 质量加固 + SQL扩展 + 表达式 + 并发同步
CI / test (18.x) (push) Failing after 5m11s
CI / test (20.x) (push) Failing after 5m8s
CI / test (22.x) (push) Successful in 9m58s
CI / test (24.x) (push) Successful in 9m56s
v0.2.6 质量加固:
- 修复 AriaEngine 二级索引 SSTable 互相覆盖(命名空间隔离)
- 修复 LSM 多版本读取顺序错误 + MergeIterator 取最新来源
- 重写 LZ4 压缩器(往返一致性 + 缓冲区溢出)
- sstableCache LRU 上限 + 预加载兜底(BufferPool 配置生效)
- 修复 React/Vue 集成 import type 运行时 bug + exports 子路径
- 新增 38 个测试(LZ4往返/Crypto/集成), 删除伪测试
v0.3.0 SQL 功能扩展:
- 多语句 parseAll + 事务语句 BEGIN/COMMIT/ROLLBACK
- INSERT INTO ... SELECT + UNION/UNION ALL + EXISTS 关联子查询
- CREATE/DROP INDEX 五引擎实现 + 别名 WHERE 修复
- benchmark 页面 + 36 个新测试
v0.3.1 表达式与性能:
- CASE WHEN 表达式(SELECT 列/WHERE/聚合)
- JOIN + 关联子查询逐行绑定
- WAL 批量组提交(写放大 O(N)→O(1))
- 修复 pending frozen 可见性 + flush 缓存竞争
v0.3.2 并发:
- CASE WHEN 用于 WHERE/聚合 + JOIN 哈希连接
- 多标签页同步(multiTabSync + BroadcastChannel)
- IndexedDB schema 持久化(reopen 后表结构恢复)
- 修复 where-matcher 顶层 $not
- 修复 CJS 产物 .js 被 ESM 解析(exports 空) — .cjs 后缀 + exports 修正
- 836 测试 / 44 套件 / 81.0% 覆盖率
|
2026-08-08 10:41:30 +08:00 |
|
thzxx
|
eb79b2198e
|
release: v0.2.5 — 质量加固 + Bug修复 + 性能优化 + SQL扩展
CI / test (18.x) (push) Successful in 10m4s
CI / test (20.x) (push) Successful in 10m0s
CI / test (22.x) (push) Successful in 9m58s
CI / test (24.x) (push) Successful in 9m58s
|
2026-07-29 21:50:53 +08:00 |
|
thzxx
|
82e6baaae9
|
feat: v0.2.4 异步Compaction + 槽位压缩 + EXPLAIN + 慢查询日志
CI / test (18.x) (push) Failing after 5m0s
CI / test (20.x) (push) Failing after 4m58s
CI / test (22.x) (push) Failing after 4m58s
CI / test (24.x) (push) Failing after 4m57s
|
2026-07-27 21:53:13 +08:00 |
|
thzxx
|
e6efa39d48
|
release: v0.2.1 生产加固 — WAL CRC/约束激活/Hybrid提交顺序/RESTRICT外键/浏览器兼容表/debug模式/onError回调
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
|
2026-07-27 20:47:30 +08:00 |
|
thzxx
|
f84673e519
|
feat: v0.2.0 AriaEngine 自研存储引擎
CI / test (20.x) (push) Canceled after 0s
CI / test (22.x) (push) Canceled after 0s
CI / test (24.x) (push) Canceled after 0s
CI / test (18.x) (push) Canceled after 1h26m17s
- 新增 AriaEngine: LSM-Tree 页面式存储引擎,19 个模块,~3500 行 TS
- page/: Slotted Page 格式 (header/slot/tuple/format) + CRC32
- buffer/: Buffer Pool (LRU 缓存 + 驱逐策略)
- index/: LSM-Tree (MemTable 红黑树 + SSTable + Bloom Filter + Merge Iterator)
- wal/: WAL 日志 (二进制格式) + Checkpoint 管理
- transaction/: MVCC 版本链 + 快照隔离
- store/: IndexedDB / Memory 双后端抽象
- compression/: LZ4 页面压缩
- 完整持久化: Schema 自动保存、SSTable 元数据管理、WAL 恢复
- 事务感知 CRUD: insert/update/delete 在事务中缓冲到 snapshot
- mode: 'aria' 激活自研引擎
- 新增 7 个测试文件,测试数 318 → 524,套件 20 → 27
- aria-page.test.ts (32 tests): Page 格式单元测试
- aria-index.test.ts (26 tests): Bloom Filter + MemTable
- aria-sstable.test.ts (9 tests): SSTable Builder + Reader
- aria-buffer.test.ts (25 tests): LRU + Eviction + Buffer Pool
- aria-wal-mvcc.test.ts (22 tests): WAL 编解码 + MVCC 事务
- aria-compress.test.ts (11 tests): LZ4 + Merge Iterator
- aria.test.ts (80 tests): AriaEngine 集成 + 边界测试
- Bug 修复: LRUList size 跟踪、WAL 缓冲区越界、ColumnEncoding 导入
- 全面更新 README.md + site/ 站点文件 (index/docs/demo)
|
2026-07-27 16:40:29 +08:00 |
|
thzxx
|
e2a590c5b1
|
feat: metona-sqlark v0.1.12 — 前端TypeScript关系型数据库
- 4种存储引擎:Memory / IndexedDB / OPFS / Hybrid
- 完整SQL支持:SELECT/INSERT/UPDATE/DELETE/JOIN/GROUP BY/HAVING/DISTINCT
- Query Builder链式API + TypeScript泛型支持
- 聚合函数:COUNT/SUM/AVG/MIN/MAX
- 事务、插件系统(14 hooks)、发布订阅、数据迁移、导入导出
- React/Vue框架集成
- 264个测试用例,93.46%覆盖率
- 零运行时依赖
|
2026-07-26 15:00:01 +08:00 |
|