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 回归
This commit is contained in:
@@ -278,11 +278,13 @@ export class KVStoreEngine implements IStorageEngine {
|
||||
// 增量持久化(原子 putMany)
|
||||
const schema = await this.memory.getTableSchema(tableName);
|
||||
if (!schema) throw new DatabaseError(`Table "${tableName}" does not exist`, 'TABLE_NOT_FOUND');
|
||||
const pkCol = this.getPK(schema);
|
||||
// v0.7.3: 持久化内存中的 validated 行(含 default 值/类型归一/列投影)——
|
||||
// 此前写原始入参 row:default 不落盘、schema 外列被持久化,重启后行不一致
|
||||
const puts: Record<string, ArrayBuffer> = {};
|
||||
rows.forEach((row, i) => {
|
||||
puts[this.rowKey(tableName, String(pks[i] ?? row[pkCol]))] = enc(JSON.stringify(row));
|
||||
});
|
||||
for (const pk of pks) {
|
||||
const row = this.memory.getRow(tableName, pk);
|
||||
if (row) puts[this.rowKey(tableName, pk)] = enc(JSON.stringify(row));
|
||||
}
|
||||
await this.kv.putMany(puts);
|
||||
return pks;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user