diff --git a/server/src/db/index.ts b/server/src/db/index.ts index 81135fe..da3dbe3 100644 --- a/server/src/db/index.ts +++ b/server/src/db/index.ts @@ -31,8 +31,20 @@ function wrapStmt(db: Database & any, sql: string): StmtCompat { try { stmt.bind(bindArray(params)); stmt.step(); - const changes = db.getRowsModified(); - const lastInsertRowid = (db as any).lastInsertRowid?.() ?? 0; + const changes = Number(db.getRowsModified?.() ?? db.rowsModified ?? 0); + let lastInsertRowid = 0; + try { + const prop = db.lastInsertRowid; + if (typeof prop === 'number') lastInsertRowid = prop; + else if (typeof prop === 'bigint') lastInsertRowid = Number(prop); + else if (typeof prop === 'function') lastInsertRowid = Number(prop() ?? 0); + } catch {} + if (lastInsertRowid === 0 && changes > 0) { + try { + const tmp = db.exec('SELECT last_insert_rowid() AS id'); + if (tmp && tmp[0] && tmp[0].values && tmp[0].values[0]) lastInsertRowid = Number(tmp[0].values[0][0]); + } catch {} + } return { changes, lastInsertRowid }; } finally { stmt.free(); @@ -88,10 +100,7 @@ export async function initDb() { extended.prepareCompat = function (sql: string) { return wrapStmt(extended, sql); }; extended.execCompat = function (sql: string) { extended.exec(sql); }; extended.pragmaCompat = function (expr: string) { - if (/foreign_keys\s*=\s*ON/i.test(expr)) { - // sql.js 默认开启 FK?尝试显式设置 - try { extended.exec('PRAGMA foreign_keys = ON;'); } catch {} - } + try { extended.exec(`PRAGMA ${expr};`); } catch {} }; extended.save = function () { const data = extended.export(); @@ -101,6 +110,8 @@ export async function initDb() { db = extended; const d = extended; + try { d.pragmaCompat('foreign_keys = ON'); } catch {} + const schemaPath = path.join(__dirname, 'schema.sql'); const schema = fs.readFileSync(schemaPath, 'utf-8'); try { d.execCompat(schema); d.save(); } catch (e) { console.error('Schema init error', e); }