Fix pin targeting based on edited timestamp

This commit is contained in:
Jamie
2026-01-21 09:45:51 -08:00
committed by GitHub
parent 50793418a2
commit 5f8208a012
4 changed files with 31 additions and 9 deletions

View File

@@ -49,7 +49,7 @@ import { isNormalNumber } from '../util/isNormalNumber.std.js';
import { isNotNil } from '../util/isNotNil.std.js';
import { parseIntOrThrow } from '../util/parseIntOrThrow.std.js';
import { updateSchema } from './migrations/index.node.js';
import type { JSONRows, QueryFragment, QueryTemplate } from './util.std.js';
import type { JSONRows, QueryTemplate, QueryFragment } from './util.std.js';
import {
batchMultiVarQuery,
bulkAdd,
@@ -3322,17 +3322,30 @@ function getAllMessageIds(db: ReadableDB): Array<string> {
function getMessageByAuthorAciAndSentAt(
db: ReadableDB,
authorAci: AciString,
sentAtTimestamp: number
sentAtTimestamp: number,
options: { includeEdits: boolean }
): MessageType | null {
return db.transaction(() => {
const [query, params] = sql`
const editedMessagesQuery = sqlFragment`
SELECT ${MESSAGE_COLUMNS_SELECT}
FROM edited_messages
INNER JOIN messages ON
messages.id = edited_messages.messageId
WHERE messages.sourceServiceId = ${authorAci}
AND edited_messages.sentAt = ${sentAtTimestamp}
`;
const messagesQuery = sqlFragment`
SELECT ${MESSAGE_COLUMNS_SELECT}
FROM messages
WHERE sourceServiceId = ${authorAci}
AND sent_at = ${sentAtTimestamp}
LIMIT 2;
WHERE messages.sourceServiceId = ${authorAci}
AND messages.sent_at = ${sentAtTimestamp}
`;
const [query, params] = options.includeEdits
? sql`${editedMessagesQuery} UNION ${messagesQuery} LIMIT 2;`
: sql`${messagesQuery} LIMIT 2;`;
const rows = db.prepare(query).all<MessageTypeUnhydrated>(params);
if (rows.length > 1) {