lx-music-desktop/src/main/worker/dbService/db.ts
2023-08-17 17:49:47 +08:00

60 lines
1.5 KiB
TypeScript

import Database from 'better-sqlite3'
import path from 'path'
import tables from './tables'
import verifyDB from './verifyDB'
// import migrateData from './migrate'
let db: Database.Database
const initTables = (db: Database.Database) => {
db.exec(`
${Array.from(tables.values()).join('\n')}
INSERT INTO "main"."db_info" ("field_name", "field_value") VALUES ('version', '1');
`)
}
// 打开、初始化数据库
export const init = (lxDataPath: string): boolean | null => {
const databasePath = path.join(lxDataPath, 'lx.data.db')
const nativeBinding = path.join(__dirname, '../node_modules/better-sqlite3/build/Release/better_sqlite3.node')
let dbFileExists = true
try {
db = new Database(databasePath, {
fileMustExist: true,
nativeBinding,
// verbose: process.env.NODE_ENV !== 'production' ? console.log : undefined,
})
} catch (error) {
console.log(error)
db = new Database(databasePath, {
nativeBinding,
// verbose: process.env.NODE_ENV !== 'production' ? console.log : undefined,
})
initTables(db)
dbFileExists = false
}
// if (dbFileExists) migrateData(db)
// https://www.sqlite.org/pragma.html#pragma_optimize
if (dbFileExists) db.exec('PRAGMA optimize;')
if (!verifyDB(db)) {
db.close()
return null
}
// https://www.sqlite.org/lang_vacuum.html
// db.exec('VACUUM "main"')
process.on('exit', () => db.close())
console.log('db inited')
// require('./test')
return dbFileExists
}
// 获取数据库实例
export const getDB = (): Database.Database => db