Fix foreign key constraint: delete mail_objects before mails

Added deletion of mail_objects before deleting mail_messages to
avoid foreign key constraint violation. The mail_objects table
has a foreign key to mail_messages.

Complete deletion order:
1. Clean up auxiliary tables
2. Unlink mails from jobs
3. Delete mail_objects
4. Delete jobs (cascades to runs)
5. Delete mails

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Ivo Oskamp 2026-02-09 14:26:53 +01:00
parent ff4942272f
commit 710aba97e4

View File

@ -252,6 +252,17 @@ def settings_jobs_delete_orphaned():
{"job_ids": job_ids},
)
# Delete mail_objects before deleting mails
# mail_objects.mail_message_id references mail_messages.id
if mail_message_ids:
from sqlalchemy import text, bindparam
_safe_execute(
text("DELETE FROM mail_objects WHERE mail_message_id IN :mail_ids").bindparams(
bindparam("mail_ids", expanding=True)
),
{"mail_ids": mail_message_ids},
)
# Delete all orphaned jobs (runs/objects are cascaded via ORM relationships)
for job in orphaned_jobs:
db.session.delete(job)