From 7d4a229d1fc35e7e223b1919e1cb6bc233454577 Mon Sep 17 00:00:00 2001 From: pa Date: Mon, 23 Mar 2026 09:29:57 +0900 Subject: [PATCH] upgrade db version --- src/plugins/router.js | 12 +++++----- src/services/database/index.js | 15 +++++++++++++ src/services/database/tableAlter.js | 34 +++++++++++++++++++++++++++++ src/stores/vrcx.js | 33 +++++++++++++++------------- 4 files changed, 73 insertions(+), 21 deletions(-) diff --git a/src/plugins/router.js b/src/plugins/router.js index a09578b8..9d758079 100644 --- a/src/plugins/router.js +++ b/src/plugins/router.js @@ -109,12 +109,12 @@ const routes = [ component: () => import('./../views/Charts/components/MutualFriends.vue') }, - { - path: 'charts/hot-worlds', - name: 'charts-hot-worlds', - component: () => - import('./../views/Charts/components/HotWorlds.vue') - }, + // { + // path: 'charts/hot-worlds', + // name: 'charts-hot-worlds', + // component: () => + // import('./../views/Charts/components/HotWorlds.vue') + // }, { path: 'tools', name: 'tools', component: Tools }, { path: 'tools/gallery', diff --git a/src/services/database/index.js b/src/services/database/index.js index c792fb72..b6c47082 100644 --- a/src/services/database/index.js +++ b/src/services/database/index.js @@ -148,6 +148,9 @@ const database = { await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS ${dbVars.userPrefix}_friend_log_history (id INTEGER PRIMARY KEY, created_at TEXT, type TEXT, user_id TEXT, display_name TEXT, previous_display_name TEXT, trust_level TEXT, previous_trust_level TEXT, friend_number INTEGER)` ); + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS ${dbVars.userPrefix}_friend_log_history_user_id_idx ON ${dbVars.userPrefix}_friend_log_history (user_id)` + ); await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS ${dbVars.userPrefix}_notifications (id TEXT PRIMARY KEY, created_at TEXT, type TEXT, sender_user_id TEXT, sender_username TEXT, receiver_user_id TEXT, message TEXT, world_id TEXT, world_name TEXT, image_url TEXT, invite_message TEXT, request_message TEXT, response_message TEXT, expired INTEGER)` ); @@ -178,9 +181,21 @@ const database = { await sqliteService.executeNonQuery( `CREATE INDEX IF NOT EXISTS gamelog_location_created_at_idx ON gamelog_location (created_at)` ); + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_location_world_created ON gamelog_location (world_id, created_at)` + ); await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS gamelog_join_leave (id INTEGER PRIMARY KEY, created_at TEXT, type TEXT, display_name TEXT, location TEXT, user_id TEXT, time INTEGER, UNIQUE(created_at, type, display_name))` ); + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_location ON gamelog_join_leave (location)` + ); + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_user_created ON gamelog_join_leave (user_id, created_at)` + ); + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_display_created ON gamelog_join_leave (display_name, created_at)` + ); await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS gamelog_portal_spawn (id INTEGER PRIMARY KEY, created_at TEXT, display_name TEXT, location TEXT, user_id TEXT, instance_id TEXT, world_name TEXT, UNIQUE(created_at, display_name))` ); diff --git a/src/services/database/tableAlter.js b/src/services/database/tableAlter.js index 1b1f594e..f17aa51b 100644 --- a/src/services/database/tableAlter.js +++ b/src/services/database/tableAlter.js @@ -10,6 +10,7 @@ const tableAlter = { await this.updateTableForGroupNames(); await this.addFriendLogFriendNumber(); await this.updateTableForAvatarHistory(); + await this.addPerformanceIndexes(); // 16 // } // await sqliteService.executeNonQuery('PRAGMA user_version = 1'); }, @@ -82,6 +83,39 @@ const tableAlter = { } }, + async addPerformanceIndexes() { + // gamelog_location: covers getLastVisit, getVisitCount, getTimeSpentInWorld, getPreviousInstancesByWorldId, getMyTopWorlds + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_location_world_created ON gamelog_location (world_id, created_at)` + ); + // gamelog_join_leave: covers getPlayersFromInstance, getPlayerDetailFromInstance + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_location ON gamelog_join_leave (location)` + ); + // gamelog_join_leave: covers getUserStats, getAllUserStats, getLastSeen, getPreviousInstancesByUserId, getPreviousDisplayNamesByUserId + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_user_created ON gamelog_join_leave (user_id, created_at)` + ); + // gamelog_join_leave: covers getUserStats, getLastSeen for display_name OR path + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS idx_gamelog_jl_display_created ON gamelog_join_leave (display_name, created_at)` + ); + + // per-user friend_log_history: covers getFriendLogHistoryForUserId + var tables = []; + await sqliteService.execute((dbRow) => { + tables.push(dbRow[0]); + }, `SELECT name FROM sqlite_schema WHERE type='table' AND name LIKE '%_friend_log_history'`); + for (var tableName of tables) { + try { + await sqliteService.executeNonQuery( + `CREATE INDEX IF NOT EXISTS ${tableName}_user_id_idx ON ${tableName} (user_id)` + ); + } catch (e) { + console.error(e); + } + } + } }; export { tableAlter }; diff --git a/src/stores/vrcx.js b/src/stores/vrcx.js index a8b89055..ce2d9e2f 100644 --- a/src/stores/vrcx.js +++ b/src/stores/vrcx.js @@ -98,17 +98,22 @@ export const useVrcxStore = defineStore('Vrcx', () => { try { if (LINUX) { try { - window.electron.ipcRenderer.on('launch-command', (command) => { - if (command) { - eventLaunchCommand(command); + window.electron.ipcRenderer.on( + 'launch-command', + (command) => { + if (command) { + eventLaunchCommand(command); + } } - }); + ); - window.electron.onWindowPositionChanged((event, position) => { - state.locationX = position.x; - state.locationY = position.y; - debounce(saveVRCXWindowOption, 300)(); - }); + window.electron.onWindowPositionChanged( + (event, position) => { + state.locationX = position.x; + state.locationY = position.y; + debounce(saveVRCXWindowOption, 300)(); + } + ); window.electron.onWindowSizeChanged((event, size) => { state.sizeWidth = size.width; @@ -156,11 +161,9 @@ export const useVrcxStore = defineStore('Vrcx', () => { await VRCXStorage.Set('VRCX_DisableGpuAcceleration', 'false'); } if ( - ( - await VRCXStorage.Get( - 'VRCX_DisableVrOverlayGpuAcceleration' - ) - ) === '' + (await VRCXStorage.Get( + 'VRCX_DisableVrOverlayGpuAcceleration' + )) === '' ) { await VRCXStorage.Set( 'VRCX_DisableVrOverlayGpuAcceleration', @@ -219,7 +222,7 @@ export const useVrcxStore = defineStore('Vrcx', () => { */ async function updateDatabaseVersion() { // requires dbVars.userPrefix to be already set - const databaseVersion = 15; + const databaseVersion = 16; if (state.databaseVersion < databaseVersion) { databaseUpgradeState.value = { visible: state.databaseVersion > 0,