Fix message_user_initiated

This commit is contained in:
Fedor Indutny 2022-01-06 11:53:30 -08:00 committed by GitHub
parent e94896b388
commit 4f7a61853b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 0 deletions

View File

@ -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!');
}

View File

@ -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 {

View File

@ -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=?)'
);
});
});
});