12345678910111213141516171819202122232425262728293031 |
- package upgrades
- import (
- "database/sql"
- )
- func init() {
- upgrades[1] = upgrade{"Add ON DELETE CASCADE to message table", func(tx *sql.Tx, ctx context) error {
- if ctx.dialect == SQLite {
- // SQLite doesn't support constraint updates, but it isn't that careful with constraints anyway.
- return nil
- }
- res, _ := ctx.db.Query(`SELECT EXISTS(SELECT constraint_name FROM information_schema.table_constraints
- WHERE table_name='message' AND constraint_name='message_chat_jid_fkey')`)
- var exists bool
- _ = res.Scan(&exists)
- if exists {
- _, err := tx.Exec("ALTER TABLE message DROP CONSTRAINT IF EXISTS message_chat_jid_fkey")
- if err != nil {
- return err
- }
- _, err = tx.Exec(`ALTER TABLE message ADD CONSTRAINT message_chat_jid_fkey
- FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver)
- ON DELETE CASCADE`)
- if err != nil {
- return err
- }
- }
- return nil
- }}
- }
|