diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index 869103ebcad..32f8bd34bd5 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -6258,26 +6258,35 @@ function addStickerPackReference( ); } - db.prepare( - ` - INSERT OR REPLACE INTO sticker_references ( - messageId, - packId, - stickerId, - isUnresolved - ) values ( - $messageId, - $packId, - $stickerId, - $isUnresolved - ) - ` - ).run({ - messageId, - packId, - stickerId, - isUnresolved: isUnresolved ? 1 : 0, - }); + db.transaction(() => { + const [select, selectParams] = sql` + SELECT EXISTS ( + SELECT 1 FROM sticker_packs WHERE id IS ${packId} + ) + `; + const exists = + db.prepare(select, { pluck: true }).get(selectParams) === 1; + if (!exists) { + logger.warn('addStickerPackReference: did not find referenced pack'); + return; + } + + const [insert, insertParams] = sql` + INSERT OR REPLACE INTO sticker_references ( + messageId, + packId, + stickerId, + isUnresolved + ) values ( + ${messageId}, + ${packId}, + ${stickerId}, + ${isUnresolved ? 1 : 0} + ) + `; + + db.prepare(insert).run(insertParams); + })(); } function deleteStickerPackReference( db: WritableDB,