diff options
Diffstat (limited to 'internal/db/bundb/emoji.go')
-rw-r--r-- | internal/db/bundb/emoji.go | 86 |
1 files changed, 31 insertions, 55 deletions
diff --git a/internal/db/bundb/emoji.go b/internal/db/bundb/emoji.go index 04f22b6e9..e675339a2 100644 --- a/internal/db/bundb/emoji.go +++ b/internal/db/bundb/emoji.go @@ -106,47 +106,36 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error { } return e.db.RunInTx(ctx, func(tx bun.Tx) error { - // delete links between this emoji and any statuses that use it - // TODO: remove when we delete this table - if _, err := tx. - NewDelete(). - TableExpr("? AS ?", bun.Ident("status_to_emojis"), bun.Ident("status_to_emoji")). - Where("? = ?", bun.Ident("status_to_emoji.emoji_id"), id). - Exec(ctx); err != nil { - return err - } - - // delete links between this emoji and any accounts that use it - // TODO: remove when we delete this table - if _, err := tx. - NewDelete(). - TableExpr("? AS ?", bun.Ident("account_to_emojis"), bun.Ident("account_to_emoji")). - Where("? = ?", bun.Ident("account_to_emoji.emoji_id"), id). - Exec(ctx); err != nil { + // Delete relational links between this emoji + // and any statuses using it, returning the + // status IDs so we can later update them. + if _, err := tx.NewDelete(). + Table("status_to_emojis"). + Where("? = ?", bun.Ident("emoji_id"), id). + Returning("status_id"). + Exec(ctx, &statusIDs); err != nil { return err } - // Prepare a SELECT query with a WHERE LIKE - // that checks the `emoji` column for any - // text containing this specific emoji ID. - // - // (see GetStatusesUsingEmoji() for details.) - aq := tx.NewSelect().Table("accounts").Column("id") - aq = whereLike(aq, "emojis", id) - - // Select all accounts using this emoji into accountIDss. - if _, err := aq.Exec(ctx, &accountIDs); err != nil { + // Delete relational links between this emoji + // and any accounts using it, returning the + // account IDs so we can later update them. + if _, err := tx.NewDelete(). + Table("account_to_emojis"). + Where("? = ?", bun.Ident("emoji_id"), id). + Returning("account_id"). + Exec(ctx, &accountIDs); err != nil { return err } - for _, id := range accountIDs { + for _, id := range statusIDs { var emojiIDs []string - // Select account with ID. + // Select statuses with ID. if _, err := tx.NewSelect(). - Table("accounts"). + Table("statuses"). Column("emojis"). - Where("id = ?", id). + Where("? = ?", bun.Ident("id"), id). Exec(ctx); err != nil && err != sql.ErrNoRows { return err @@ -155,10 +144,10 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error { // Drop ID from account emojis. emojiIDs = dropID(emojiIDs, id) - // Update account emoji IDs. + // Update status emoji IDs. if _, err := tx.NewUpdate(). - Table("accounts"). - Where("id = ?", id). + Table("statuses"). + Where("? = ?", bun.Ident("id"), id). Set("emojis = ?", emojiIDs). Exec(ctx); err != nil && err != sql.ErrNoRows { @@ -166,27 +155,14 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error { } } - // Prepare a SELECT query with a WHERE LIKE - // that checks the `emoji` column for any - // text containing this specific emoji ID. - // - // (see GetStatusesUsingEmoji() for details.) - sq := tx.NewSelect().Table("statuses").Column("id") - sq = whereLike(sq, "emojis", id) - - // Select all statuses using this emoji into statusIDs. - if _, err := sq.Exec(ctx, &statusIDs); err != nil { - return err - } - - for _, id := range statusIDs { + for _, id := range accountIDs { var emojiIDs []string - // Select statuses with ID. + // Select account with ID. if _, err := tx.NewSelect(). - Table("statuses"). + Table("accounts"). Column("emojis"). - Where("id = ?", id). + Where("? = ?", bun.Ident("id"), id). Exec(ctx); err != nil && err != sql.ErrNoRows { return err @@ -195,10 +171,10 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error { // Drop ID from account emojis. emojiIDs = dropID(emojiIDs, id) - // Update status emoji IDs. + // Update account emoji IDs. if _, err := tx.NewUpdate(). - Table("statuses"). - Where("id = ?", id). + Table("accounts"). + Where("? = ?", bun.Ident("id"), id). Set("emojis = ?", emojiIDs). Exec(ctx); err != nil && err != sql.ErrNoRows { @@ -209,7 +185,7 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error { // Delete emoji from database. if _, err := tx.NewDelete(). Table("emojis"). - Where("id = ?", id). + Where("? = ?", bun.Ident("id"), id). Exec(ctx); err != nil { return err } |