|
@@ -10,15 +10,21 @@ func init() {
|
|
|
// SQLite doesn't support constraint updates, but it isn't that careful with constraints anyway.
|
|
|
return nil
|
|
|
}
|
|
|
- _, err := tx.Exec("ALTER TABLE message DROP CONSTRAINT message_chat_jid_fkey")
|
|
|
- if err != nil {
|
|
|
- return nil
|
|
|
- }
|
|
|
- _, err = tx.Exec(`ALTER TABLE message ADD CONSTRAINT message_chat_jid_fkey
|
|
|
+ res, _ := tx.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
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
}
|
|
|
return nil
|
|
|
}}
|