Files
Desktop/ts/test-node/sql/migration_1530_test.node.ts
2025-11-12 11:02:36 -05:00

94 lines
2.7 KiB
TypeScript

// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { type WritableDB } from '../../sql/Interface.std.js';
import { sql, sqlFragment } from '../../sql/util.std.js';
import { createDB, explain, updateToVersion } from './helpers.node.js';
describe('SQL/updateToSchemaVersion1530', () => {
let db: WritableDB;
beforeEach(() => {
db = createDB();
updateToVersion(db, 1530);
});
afterEach(() => {
db.close();
});
const CORE_UPDATE_QUERY = sqlFragment`
UPDATE messages
SET
expirationStartTimestamp = 342342
WHERE
conversationId = 'conversationId' AND
type IN ('incoming', 'poll-terminate') AND
hasExpireTimer IS 1 AND
received_at < 1304923
`;
const UPDATE_WHEN_NULL_START_QUERY = sqlFragment`
${CORE_UPDATE_QUERY} AND
expirationStartTimestamp IS NULL
`;
const UPDATE_WHEN_LATE_START_QUERY = sqlFragment`
${CORE_UPDATE_QUERY} AND
expirationStartTimestamp > 342342
`;
it('uses index efficiently with null start + storyId condition', () => {
const detail = explain(
db,
sql`
${UPDATE_WHEN_NULL_START_QUERY} AND
storyId is NULL
`
);
assert.strictEqual(
detail,
'SEARCH messages USING INDEX messages_conversationId_hasExpireTimer_expirationStartTimestamp' +
' (conversationId=? AND hasExpireTimer=? AND expirationStartTimestamp=?)'
);
});
it('uses index efficiently with null start + no storyId condition', () => {
const detail = explain(
db,
sql`
${UPDATE_WHEN_NULL_START_QUERY}
`
);
assert.strictEqual(
detail,
'SEARCH messages USING INDEX messages_conversationId_hasExpireTimer_expirationStartTimestamp' +
' (conversationId=? AND hasExpireTimer=? AND expirationStartTimestamp=?)'
);
});
it('uses index efficiently with lateStart query and no storyId condition', () => {
const detail = explain(db, sql`${UPDATE_WHEN_LATE_START_QUERY}`);
assert.strictEqual(
detail,
'SEARCH messages USING INDEX messages_conversationId_hasExpireTimer_expirationStartTimestamp' +
' (conversationId=? AND hasExpireTimer=? AND expirationStartTimestamp>?)'
);
});
it('uses index efficiently with lateStart query and storyId condition', () => {
const detail = explain(
db,
sql`${UPDATE_WHEN_LATE_START_QUERY} AND
storyId is NULL`
);
assert.strictEqual(
detail,
'SEARCH messages USING INDEX messages_conversationId_hasExpireTimer_expirationStartTimestamp' +
' (conversationId=? AND hasExpireTimer=? AND expirationStartTimestamp>?)'
);
});
});