fix: deleting inbox records that senders have been deleted (#2743)

Deleting inbox records that senders have been deleted
This commit is contained in:
Wen Sun 2024-01-11 22:29:22 +09:00 committed by GitHub
parent 79b68222ff
commit 6cfd94cc69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 0 deletions

View file

@ -2,6 +2,7 @@ package mysql
import (
"context"
"database/sql"
"strings"
"github.com/pkg/errors"
@ -132,3 +133,13 @@ func (d *DB) DeleteInbox(ctx context.Context, delete *store.DeleteInbox) error {
}
return nil
}
func vacuumInbox(ctx context.Context, tx *sql.Tx) error {
stmt := "DELETE FROM `inbox` WHERE `sender_id` NOT IN (SELECT `id` FROM `user`)"
_, err := tx.ExecContext(ctx, stmt)
if err != nil {
return err
}
return nil
}

View file

@ -72,6 +72,9 @@ func (d *DB) Vacuum(ctx context.Context) error {
if err := vacuumMemoRelations(ctx, tx); err != nil {
return err
}
if err := vacuumInbox(ctx, tx); err != nil {
return err
}
if err := vacuumTag(ctx, tx); err != nil {
// Prevent revive warning.
return err

View file

@ -2,6 +2,7 @@ package postgres
import (
"context"
"database/sql"
"strings"
"github.com/pkg/errors"
@ -132,3 +133,13 @@ func (d *DB) DeleteInbox(ctx context.Context, delete *store.DeleteInbox) error {
}
return nil
}
func vacuumInbox(ctx context.Context, tx *sql.Tx) error {
stmt := `DELETE FROM inbox WHERE sender_id NOT IN (SELECT id FROM "user")`
_, err := tx.ExecContext(ctx, stmt)
if err != nil {
return err
}
return nil
}

View file

@ -66,6 +66,9 @@ func (d *DB) Vacuum(ctx context.Context) error {
if err := vacuumMemoRelations(ctx, tx); err != nil {
return err
}
if err := vacuumInbox(ctx, tx); err != nil {
return err
}
if err := vacuumTag(ctx, tx); err != nil {
// Prevent revive warning.
return err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"context"
"database/sql"
"strings"
"github.com/pkg/errors"
@ -123,3 +124,22 @@ func (d *DB) DeleteInbox(ctx context.Context, delete *store.DeleteInbox) error {
}
return nil
}
func vacuumInbox(ctx context.Context, tx *sql.Tx) error {
stmt := `
DELETE FROM
inbox
WHERE
sender_id NOT IN (
SELECT
id
FROM
user
)`
_, err := tx.ExecContext(ctx, stmt)
if err != nil {
return err
}
return nil
}

View file

@ -97,6 +97,9 @@ func vacuumImpl(ctx context.Context, tx *sql.Tx) error {
if err := vacuumMemoRelations(ctx, tx); err != nil {
return err
}
if err := vacuumInbox(ctx, tx); err != nil {
return err
}
if err := vacuumTag(ctx, tx); err != nil {
// Prevent revive warning.
return err