summaryrefslogtreecommitdiff
path: root/internal/db/bundb/emoji.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/bundb/emoji.go')
-rw-r--r--internal/db/bundb/emoji.go86
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
}