合并sql语句

pull/1123/head
lyswhut 2023-01-02 13:40:46 +08:00
parent 3d93d88bf0
commit 44407585fa
2 changed files with 29 additions and 40 deletions

View File

@ -6,19 +6,14 @@ let db: Database.Database
const initTables = (db: Database.Database) => { const initTables = (db: Database.Database) => {
db.exec(` const sql = `
CREATE TABLE "db_info" ( CREATE TABLE "db_info" (
"id" INTEGER NOT NULL UNIQUE, "id" INTEGER NOT NULL UNIQUE,
"field_name" TEXT, "field_name" TEXT,
"field_value" TEXT, "field_value" TEXT,
PRIMARY KEY("id" AUTOINCREMENT) PRIMARY KEY("id" AUTOINCREMENT)
)`) );
db.prepare(`INSERT INTO "main"."db_info" ("field_name", "field_value") VALUES
('version', '1')
`).run()
db.exec(`
CREATE TABLE "my_list" ( CREATE TABLE "my_list" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"name" TEXT NOT NULL, "name" TEXT NOT NULL,
@ -27,17 +22,8 @@ const initTables = (db: Database.Database) => {
"position" INTEGER NOT NULL, "position" INTEGER NOT NULL,
"locationUpdateTime" INTEGER, "locationUpdateTime" INTEGER,
PRIMARY KEY("id") PRIMARY KEY("id")
)`) );
// const insert = db.prepare(`INSERT INTO "main"."my_list" ("id", "name", "source", "sourceListId", "locationUpdateTime") VALUES
// (@id, @name, @source, @sourceListId, @locationUpdateTime)`)
// db.transaction((cats) => {
// for (const cat of cats) insert.run(cat)
// })([
// { id: 'default', name: '默认列表', source: null, sourceListId: null, locationUpdateTime: null },
// { id: 'love', name: '收藏列表', source: null, sourceListId: null, locationUpdateTime: null },
// { id: 'temp', name: '临时列表', source: null, sourceListId: null, locationUpdateTime: null },
// ])
db.exec(`
CREATE TABLE "my_list_music_info" ( CREATE TABLE "my_list_music_info" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"listId" TEXT NOT NULL, "listId" TEXT NOT NULL,
@ -47,26 +33,22 @@ const initTables = (db: Database.Database) => {
"interval" TEXT, "interval" TEXT,
"meta" TEXT NOT NULL, "meta" TEXT NOT NULL,
UNIQUE("id","listId") UNIQUE("id","listId")
)`) );
db.exec(`
CREATE INDEX "index_my_list_music_info" ON "my_list_music_info" ( CREATE INDEX "index_my_list_music_info" ON "my_list_music_info" (
"id", "id",
"listId" "listId"
)`) );
db.exec(`
CREATE TABLE "my_list_music_info_order" ( CREATE TABLE "my_list_music_info_order" (
"listId" TEXT NOT NULL, "listId" TEXT NOT NULL,
"musicInfoId" TEXT NOT NULL, "musicInfoId" TEXT NOT NULL,
"order" INTEGER NOT NULL "order" INTEGER NOT NULL
)`) );
db.exec(`
CREATE INDEX "index_my_list_music_info_order" ON "my_list_music_info_order" ( CREATE INDEX "index_my_list_music_info_order" ON "my_list_music_info_order" (
"listId", "listId",
"musicInfoId" "musicInfoId"
)`) );
db.exec(`
CREATE TABLE "music_info_other_source" ( CREATE TABLE "music_info_other_source" (
"source_id" TEXT NOT NULL, "source_id" TEXT NOT NULL,
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
@ -76,29 +58,25 @@ const initTables = (db: Database.Database) => {
"meta" TEXT NOT NULL, "meta" TEXT NOT NULL,
"order" INTEGER NOT NULL, "order" INTEGER NOT NULL,
UNIQUE("source_id","id") UNIQUE("source_id","id")
)`) );
db.exec(`
CREATE INDEX "index_music_info_other_source" ON "music_info_other_source" ( CREATE INDEX "index_music_info_other_source" ON "music_info_other_source" (
"source_id", "source_id",
"id" "id"
)`) );
// TODO "meta" TEXT NOT NULL, -- TODO "meta" TEXT NOT NULL,
db.exec(`
CREATE TABLE "lyric" ( CREATE TABLE "lyric" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"source" TEXT NOT NULL, "source" TEXT NOT NULL,
"type" TEXT NOT NULL, "type" TEXT NOT NULL,
"text" TEXT NOT NULL "text" TEXT NOT NULL
)`) );
db.exec(`
CREATE TABLE "music_url" ( CREATE TABLE "music_url" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"url" TEXT NOT NULL "url" TEXT NOT NULL
)`) );
db.exec(`
CREATE TABLE "download_list" ( CREATE TABLE "download_list" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"isComplate" INTEGER NOT NULL, "isComplate" INTEGER NOT NULL,
@ -114,7 +92,12 @@ const initTables = (db: Database.Database) => {
"musicInfo" TEXT NOT NULL, "musicInfo" TEXT NOT NULL,
"position" INTEGER NOT NULL, "position" INTEGER NOT NULL,
PRIMARY KEY("id") PRIMARY KEY("id")
)`) );
INSERT INTO "main"."db_info" ("field_name", "field_value") VALUES ('version', '1');
`
db.exec(sql)
} }
@ -143,7 +126,7 @@ export const init = (lxDataPath: string): boolean => {
// if (dbFileExists) migrateData(db) // if (dbFileExists) migrateData(db)
// https://www.sqlite.org/pragma.html#pragma_optimize // https://www.sqlite.org/pragma.html#pragma_optimize
db.exec('PRAGMA optimize;') if (dbFileExists) db.exec('PRAGMA optimize;')
// https://www.sqlite.org/lang_vacuum.html // https://www.sqlite.org/lang_vacuum.html
// db.exec('VACUUM "main"') // db.exec('VACUUM "main"')

View File

@ -1,8 +1,9 @@
import Database from 'better-sqlite3' import Database from 'better-sqlite3'
const migrateV1 = (db: Database.Database) => { const migrateV1 = (db: Database.Database) => {
db.exec('DROP TABLE "main"."download_list"') const sql = `
db.exec(` DROP TABLE "main"."download_list";
CREATE TABLE "download_list" ( CREATE TABLE "download_list" (
"id" TEXT NOT NULL, "id" TEXT NOT NULL,
"isComplate" INTEGER NOT NULL, "isComplate" INTEGER NOT NULL,
@ -18,11 +19,16 @@ const migrateV1 = (db: Database.Database) => {
"musicInfo" TEXT NOT NULL, "musicInfo" TEXT NOT NULL,
"position" INTEGER NOT NULL, "position" INTEGER NOT NULL,
PRIMARY KEY("id") PRIMARY KEY("id")
)`) );
`
db.exec(sql)
db.prepare('UPDATE "main"."db_info" SET "field_value"=@value WHERE "field_name"=@name').run({ name: 'version', value: '2' }) db.prepare('UPDATE "main"."db_info" SET "field_value"=@value WHERE "field_name"=@name').run({ name: 'version', value: '2' })
} }
export default (db: Database.Database) => { export default (db: Database.Database) => {
// PRAGMA user_version = x
// console.log(db.prepare('PRAGMA user_version').get().user_version)
// https://github.com/WiseLibs/better-sqlite3/issues/668#issuecomment-1145285728
const version = db.prepare('SELECT "field_value" FROM "main"."db_info" WHERE "field_name" = ?').get('version').field_value const version = db.prepare('SELECT "field_value" FROM "main"."db_info" WHERE "field_name" = ?').get('version').field_value
switch (version) { switch (version) {
case '1': case '1':