2022-03-05-reactions.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package upgrades
  2. import "database/sql"
  3. func init() {
  4. upgrades[38] = upgrade{"Add support for reactions", func(tx *sql.Tx, ctx context) error {
  5. _, err := tx.Exec(`ALTER TABLE message ADD COLUMN type TEXT NOT NULL DEFAULT 'message'`)
  6. if err != nil {
  7. return err
  8. }
  9. if ctx.dialect == Postgres {
  10. _, err = tx.Exec("ALTER TABLE message ALTER COLUMN type DROP DEFAULT")
  11. if err != nil {
  12. return err
  13. }
  14. }
  15. _, err = tx.Exec("UPDATE message SET type='' WHERE error='decryption_failed'")
  16. if err != nil {
  17. return err
  18. }
  19. _, err = tx.Exec("UPDATE message SET type='fake' WHERE jid LIKE 'FAKE::%' OR mxid LIKE 'net.maunium.whatsapp.fake::%' OR jid=mxid")
  20. if err != nil {
  21. return err
  22. }
  23. _, err = tx.Exec(`CREATE TABLE reaction (
  24. chat_jid TEXT,
  25. chat_receiver TEXT,
  26. target_jid TEXT,
  27. sender TEXT,
  28. mxid TEXT NOT NULL,
  29. jid TEXT NOT NULL,
  30. PRIMARY KEY (chat_jid, chat_receiver, target_jid, sender),
  31. CONSTRAINT target_message_fkey FOREIGN KEY (chat_jid, chat_receiver, target_jid)
  32. REFERENCES message(chat_jid, chat_receiver, jid)
  33. ON DELETE CASCADE ON UPDATE CASCADE
  34. )`)
  35. return err
  36. }}
  37. }