diff --git a/package.json b/package.json index 7f5ed47..733a9a1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "license": "MIT", "dependencies": { "@metona-team/metona-editor": "^0.4.0", - "@metona-team/metona-sqlark": "^0.4.1", + "@metona-team/metona-sqlark": "0.4.2", "@metona-team/metona-toast": "^0.5.0", "mermaid": "^10.9.6", "nanoid": "^5.1.5", diff --git a/src/renderer/db/schema.ts b/src/renderer/db/schema.ts index 022b60a..a142b57 100644 --- a/src/renderer/db/schema.ts +++ b/src/renderer/db/schema.ts @@ -45,9 +45,8 @@ const DB_NAME = 'MarkLiteV2' /** * v0.6.0: 表结构定义 — 幂等建表(getTableNames 检查)。 - * 注意: sqlark 的 IndexedDBEngine 每次建表会把 IDB 版本号 +1,且打开时使用 - * 配置的固定版本,重启后配置版本低于库当前版本会抛 IDB_OPEN_ERROR(VersionError)。 - * 因此启动时先用 indexedDB.open(无版本) 解析库当前版本,再以该版本打开。 + * v0.6.1: sqlark 0.4.2 已修复 IndexedDBEngine 版本管理(打开时自动自适应当前版本), + * 使用标准配置 version: 1 即可,不再需要手动解析 IDB 版本号。 * 未来 schema 变更: 在 createDatabase 的幂等建表段追加增量变更逻辑。 */ const TAB_SNAPSHOTS_COLUMNS: Record = { @@ -120,40 +119,13 @@ async function resetCorruptDatabaseIfNeeded(): Promise { } } -/** - * 解析 IDB 库当前版本号。 - * sqlark 的 IndexedDBEngine 建表时会把版本号 +1,重启若用配置的固定版本打开 - * 会抛 VersionError(IDB_OPEN_ERROR),因此必须用库当前版本打开。 - * indexedDB.open(dbName) 不带版本参数 = 以任意版本打开,可读取当前版本。 - */ -function resolveDbVersion(): Promise { - return new Promise(resolve => { - try { - const req = indexedDB.open(DB_NAME) - req.onsuccess = () => { - const version = req.result?.version ?? 1 - try { - req.result?.close() - } catch { - /* 忽略 */ - } - resolve(version || 1) - } - req.onerror = () => resolve(1) - req.onblocked = () => resolve(1) - } catch { - resolve(1) - } - }) -} - async function createDatabase(): Promise { - const version = await resolveDbVersion() const db = await create({ name: DB_NAME, mode: 'hybrid', // HybridEngine: write-through — 内存读写 + 直写 IndexedDB(每行单 key 原子写入,强杀不损坏) diskEngine: 'indexeddb', - version, + // v0.6.1: sqlark 0.4.2 版本自适应打开(VersionError 时自动解析当前版本重试) + version: 1, onError: (err: Error) => logError('数据库错误', err), })