From 9d04daff5f262eb9bb39c67602f62e2db1d72304 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Tue, 21 Dec 2021 22:49:40 +0100 Subject: [PATCH] Fix message_user_initiated --- .../migrations/48-fix-user-initiated-index.ts | 30 +++++++++++++++++++ ts/sql/migrations/index.ts | 2 ++ ts/test-node/sql_migrations_test.ts | 29 ++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 ts/sql/migrations/48-fix-user-initiated-index.ts diff --git a/ts/sql/migrations/48-fix-user-initiated-index.ts b/ts/sql/migrations/48-fix-user-initiated-index.ts new file mode 100644 index 0000000000..3cce8492bc --- /dev/null +++ b/ts/sql/migrations/48-fix-user-initiated-index.ts @@ -0,0 +1,30 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import type { Database } from 'better-sqlite3'; + +import type { LoggerType } from '../../types/Logging'; + +export default function updateToSchemaVersion48( + currentVersion: number, + db: Database, + logger: LoggerType +): void { + if (currentVersion >= 48) { + return; + } + + db.transaction(() => { + db.exec( + ` + DROP INDEX message_user_initiated; + + CREATE INDEX message_user_initiated ON messages (conversationId, isUserInitiatedMessage); + ` + ); + + db.pragma('user_version = 48'); + })(); + + logger.info('updateToSchemaVersion48: success!'); +} diff --git a/ts/sql/migrations/index.ts b/ts/sql/migrations/index.ts index 92b6e930f6..c5c8a8e687 100644 --- a/ts/sql/migrations/index.ts +++ b/ts/sql/migrations/index.ts @@ -23,6 +23,7 @@ import updateToSchemaVersion44 from './44-badges'; import updateToSchemaVersion45 from './45-stories'; import updateToSchemaVersion46 from './46-optimize-stories'; import updateToSchemaVersion47 from './47-further-optimize'; +import updateToSchemaVersion48 from './48-fix-user-initiated-index'; function updateToSchemaVersion1( currentVersion: number, @@ -1909,6 +1910,7 @@ export const SCHEMA_VERSIONS = [ updateToSchemaVersion45, updateToSchemaVersion46, updateToSchemaVersion47, + updateToSchemaVersion48, ]; export function updateSchema(db: Database, logger: LoggerType): void { diff --git a/ts/test-node/sql_migrations_test.ts b/ts/test-node/sql_migrations_test.ts index 0df4e707c5..aeaad914ed 100644 --- a/ts/test-node/sql_migrations_test.ts +++ b/ts/test-node/sql_migrations_test.ts @@ -1263,4 +1263,33 @@ describe('SQL migrations test', () => { ); }); }); + + describe('updateToSchemaVersion48', () => { + it('creates usable index for hasUserInitiatedMessages', () => { + updateToVersion(48); + + const details = db + .prepare( + ` + EXPLAIN QUERY PLAN + SELECT COUNT(*) as count FROM + ( + SELECT 1 FROM messages + WHERE + conversationId = 'convo' AND + isUserInitiatedMessage = 1 + LIMIT 1 + ); + ` + ) + .all() + .map(({ detail }) => detail) + .join('\n'); + + assert.include( + details, + 'SEARCH messages USING INDEX message_user_initiated (conversationId=? AND isUserInitiatedMessage=?)' + ); + }); + }); });