mirror of
https://github.com/usememos/memos.git
synced 2025-03-04 01:04:38 +08:00
fix: deleting inbox records that senders have been deleted (#2743)
Deleting inbox records that senders have been deleted
This commit is contained in:
parent
79b68222ff
commit
6cfd94cc69
6 changed files with 51 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue