2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: deleted_messages 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: chat_handle_join 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: sync_deleted_messages 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: message_processing_task 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: handle 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: sync_deleted_chats 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: message_attachment_join 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: sync_deleted_attachments 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: kvtable 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created table (if needed) ok: chat_message_join 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_attachment_join_idx_message_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_idx_chat_identifier_service_name 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_handle_join_idx_handle_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_attachment_join_idx_attachment_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_date 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: attachment_idx_purged_attachments_v2 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_thread_originator_guid 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_handle 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_handle_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_is_sent_is_from_me_error 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_message_join_idx_message_id_only 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_associated_message 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_idx_chat_identifier 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_processing_task_idx_guid_task_flags 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_undelivered_one_to_one_imessage 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_message_join_idx_chat_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_cache_has_attachments 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_idx_chat_room_name_service_name 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_other_handle 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_was_downgraded 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_idx_is_archived 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_idx_group_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_expire_state 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: chat_message_join_idx_message_date_id_chat_id 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_is_read 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_isRead_isFromMe_itemType 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created index ok: message_idx_failed 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_chat_message_join, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_chat_message_join AFTER DELETE ON chat_message_join BEGIN UPDATE message SET cache_roomnames = ( SELECT group_concat(c.room_name) FROM chat c INNER JOIN chat_message_join j ON c.ROWID = j.chat_id WHERE j.message_id = OLD.message_id ) WHERE message.ROWID = OLD.message_id; DELETE FROM message WHERE message.ROWID = OLD.message_id AND OLD.message_id NOT IN (SELECT chat_message_join.message_id from chat_message_join WHERE chat_message_join.message_id = OLD.message_id LIMIT 1); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_attachment, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_attachment AFTER DELETE ON attachment BEGIN SELECT delete_attachment_path(OLD.filename); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_insert_on_message_attachment_join, trigger: CREATE TRIGGER IF NOT EXISTS after_insert_on_message_attachment_join AFTER INSERT ON message_attachment_join BEGIN UPDATE message SET cache_has_attachments = 1 WHERE message.ROWID = NEW.message_id; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_chat_handle_join, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_chat_handle_join AFTER DELETE ON chat_handle_join BEGIN DELETE FROM handle WHERE handle.ROWID = OLD.handle_id AND (SELECT 1 from chat_handle_join WHERE handle_id = OLD.handle_id LIMIT 1) IS NULL AND (SELECT 1 from message WHERE handle_id = OLD.handle_id LIMIT 1) IS NULL AND (SELECT 1 from message WHERE other_handle = OLD.handle_id LIMIT 1) IS NULL; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_insert_on_chat_message_join , trigger: CREATE TRIGGER IF NOT EXISTS after_insert_on_chat_message_join AFTER INSERT ON chat_message_join BEGIN UPDATE message SET cache_roomnames = ( SELECT group_concat(c.room_name) FROM chat c INNER JOIN chat_message_join j ON c.ROWID = j.chat_id WHERE j.message_id = NEW.message_id ) WHERE message.ROWID = NEW.message_id; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_message, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_message AFTER DELETE ON message BEGIN DELETE FROM handle WHERE handle.ROWID = OLD.handle_id AND (SELECT 1 from chat_handle_join WHERE handle_id = OLD.handle_id LIMIT 1) IS NULL AND (SELECT 1 from message WHERE handle_id = OLD.handle_id LIMIT 1) IS NULL AND (SELECT 1 from message WHERE other_handle = OLD.handle_id LIMIT 1) IS NULL; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: update_message_date_after_update_on_message, trigger: CREATE TRIGGER IF NOT EXISTS update_message_date_after_update_on_message AFTER UPDATE OF date ON message BEGIN UPDATE chat_message_join SET message_date = NEW.date WHERE message_id = NEW.ROWID AND message_date != NEW.date; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_message_plugin, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_message_plugin AFTER DELETE ON message WHEN OLD.balloon_bundle_id IS NOT NULL BEGIN SELECT after_delete_message_plugin(OLD.ROWID, OLD.guid); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: add_to_sync_deleted_messages, trigger: CREATE TRIGGER IF NOT EXISTS add_to_sync_deleted_messages AFTER DELETE ON message BEGIN INSERT INTO sync_deleted_messages (guid, recordID) VALUES (OLD.guid, OLD.ck_record_id); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_chat, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_chat AFTER DELETE ON chat BEGIN DELETE FROM chat_message_join WHERE chat_id = OLD.ROWID; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: delete_associated_messages_after_delete_on_message, trigger: CREATE TRIGGER IF NOT EXISTS delete_associated_messages_after_delete_on_message AFTER DELETE ON message BEGIN DELETE FROM message WHERE (OLD.associated_message_guid IS NULL AND associated_message_guid IS NOT NULL AND guid = OLD.associated_message_guid); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: before_delete_on_attachment, trigger: CREATE TRIGGER IF NOT EXISTS before_delete_on_attachment BEFORE DELETE ON attachment BEGIN SELECT before_delete_attachment_path(OLD.ROWID, OLD.guid); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: add_to_sync_deleted_attachments, trigger: CREATE TRIGGER IF NOT EXISTS add_to_sync_deleted_attachments AFTER DELETE ON attachment BEGIN INSERT INTO sync_deleted_attachments (guid, recordID) VALUES (OLD.guid, OLD.ck_record_id); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: add_to_deleted_messages, trigger: CREATE TRIGGER IF NOT EXISTS add_to_deleted_messages AFTER DELETE ON message BEGIN INSERT INTO deleted_messages (guid) VALUES (OLD.guid); END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: after_delete_on_message_attachment_join, trigger: CREATE TRIGGER IF NOT EXISTS after_delete_on_message_attachment_join AFTER DELETE ON message_attachment_join BEGIN DELETE FROM attachment WHERE attachment.ROWID = OLD.attachment_id AND (SELECT 1 from message_attachment_join WHERE attachment_id = OLD.attachment_id LIMIT 1) IS NULL; END 2026-03-25 16:14:52 -0500 IMDPersistenceAgent[1006]: Created trigger ok: update_last_failed_message_date, trigger: CREATE TRIGGER IF NOT EXISTS update_last_failed_message_date AFTER UPDATE OF error ON message WHEN NEW.error != 0 AND NEW.date > COALESCE((SELECT value FROM kvtable WHERE key = 'lastFailedMessageDate'), 0) BEGIN INSERT OR REPLACE INTO kvtable (key, value) VALUES ('lastFailedMessageDate', NEW.date); INSERT OR REPLACE INTO kvtable (key, value) VALUES ('lastFailedMessageRowID', NEW.rowID); END