04-attachment-fix.sqlite.sql 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. -- v4: Fix storing attachments
  2. CREATE TABLE new_message (
  3. dcid TEXT,
  4. dc_attachment_id TEXT,
  5. dc_edit_index INTEGER,
  6. dc_chan_id TEXT,
  7. dc_chan_receiver TEXT,
  8. dc_sender TEXT NOT NULL,
  9. timestamp BIGINT NOT NULL,
  10. dc_thread_id TEXT,
  11. mxid TEXT NOT NULL UNIQUE,
  12. PRIMARY KEY (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver),
  13. CONSTRAINT message_portal_fkey FOREIGN KEY (dc_chan_id, dc_chan_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE
  14. );
  15. INSERT INTO new_message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, dc_thread_id, mxid)
  16. SELECT dcid, '', 0, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, dc_thread_id, mxid FROM message;
  17. INSERT INTO new_message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, dc_thread_id, mxid)
  18. SELECT message.dcid, attachment.dcid, 0, attachment.dc_chan_id, attachment.dc_chan_receiver, message.dc_sender, message.timestamp, attachment.dc_thread_id, attachment.mxid
  19. FROM attachment LEFT JOIN message ON attachment.dc_msg_id = message.dcid;
  20. DROP TABLE attachment;
  21. DROP TABLE message;
  22. ALTER TABLE new_message RENAME TO message;
  23. CREATE TABLE new_reaction (
  24. dc_chan_id TEXT,
  25. dc_chan_receiver TEXT,
  26. dc_msg_id TEXT,
  27. dc_sender TEXT,
  28. dc_emoji_name TEXT,
  29. dc_thread_id TEXT,
  30. dc_first_attachment_id TEXT NOT NULL,
  31. _dc_first_edit_index INTEGER NOT NULL DEFAULT 0,
  32. mxid TEXT NOT NULL UNIQUE,
  33. PRIMARY KEY (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name),
  34. CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_first_attachment_id, _dc_first_edit_index, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
  35. );
  36. INSERT INTO new_reaction (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name, dc_thread_id, dc_first_attachment_id, mxid)
  37. SELECT dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name, dc_thread_id, '', mxid FROM reaction;
  38. DROP TABLE reaction;
  39. ALTER TABLE new_reaction RENAME TO reaction;