Consolidate purge statements as they need to be prepared after other tables are created

This commit is contained in:
Neil Alexander 2022-08-22 13:48:09 +01:00
parent 468d4b5bbe
commit 4e4fc400a2
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
26 changed files with 192 additions and 240 deletions

View file

@ -54,16 +54,9 @@ const bulkSelectEventJSONSQL = "" +
" WHERE event_nid = ANY($1)" + " WHERE event_nid = ANY($1)" +
" ORDER BY event_nid ASC" " ORDER BY event_nid ASC"
const purgeEventJSONSQL = `
DELETE FROM roomserver_event_json WHERE event_nid = ANY(
SELECT event_nid FROM roomserver_events WHERE room_nid = $1
)
`
type eventJSONStatements struct { type eventJSONStatements struct {
insertEventJSONStmt *sql.Stmt insertEventJSONStmt *sql.Stmt
bulkSelectEventJSONStmt *sql.Stmt bulkSelectEventJSONStmt *sql.Stmt
purgeEventJSONStmt *sql.Stmt
} }
func CreateEventJSONTable(db *sql.DB) error { func CreateEventJSONTable(db *sql.DB) error {
@ -77,7 +70,6 @@ func PrepareEventJSONTable(db *sql.DB) (tables.EventJSON, error) {
return s, sqlutil.StatementList{ return s, sqlutil.StatementList{
{&s.insertEventJSONStmt, insertEventJSONSQL}, {&s.insertEventJSONStmt, insertEventJSONSQL},
{&s.bulkSelectEventJSONStmt, bulkSelectEventJSONSQL}, {&s.bulkSelectEventJSONStmt, bulkSelectEventJSONSQL},
{&s.purgeEventJSONStmt, purgeEventJSONSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -115,10 +107,3 @@ func (s *eventJSONStatements) BulkSelectEventJSON(
} }
return results[:i], rows.Err() return results[:i], rows.Err()
} }
func (s *eventJSONStatements) PurgeEventJSONs(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeEventJSONStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -147,9 +147,6 @@ const selectRoomNIDsForEventNIDsSQL = "" +
const selectEventRejectedSQL = "" + const selectEventRejectedSQL = "" +
"SELECT is_rejected FROM roomserver_events WHERE room_nid = $1 AND event_id = $2" "SELECT is_rejected FROM roomserver_events WHERE room_nid = $1 AND event_id = $2"
const purgeEventsSQL = "" +
"DELETE FROM roomserver_events WHERE room_nid = $1"
type eventStatements struct { type eventStatements struct {
insertEventStmt *sql.Stmt insertEventStmt *sql.Stmt
selectEventStmt *sql.Stmt selectEventStmt *sql.Stmt
@ -169,7 +166,6 @@ type eventStatements struct {
selectMaxEventDepthStmt *sql.Stmt selectMaxEventDepthStmt *sql.Stmt
selectRoomNIDsForEventNIDsStmt *sql.Stmt selectRoomNIDsForEventNIDsStmt *sql.Stmt
selectEventRejectedStmt *sql.Stmt selectEventRejectedStmt *sql.Stmt
purgeEventsStmt *sql.Stmt
} }
func CreateEventsTable(db *sql.DB) error { func CreateEventsTable(db *sql.DB) error {
@ -199,7 +195,6 @@ func PrepareEventsTable(db *sql.DB) (tables.Events, error) {
{&s.selectMaxEventDepthStmt, selectMaxEventDepthSQL}, {&s.selectMaxEventDepthStmt, selectMaxEventDepthSQL},
{&s.selectRoomNIDsForEventNIDsStmt, selectRoomNIDsForEventNIDsSQL}, {&s.selectRoomNIDsForEventNIDsStmt, selectRoomNIDsForEventNIDsSQL},
{&s.selectEventRejectedStmt, selectEventRejectedSQL}, {&s.selectEventRejectedStmt, selectEventRejectedSQL},
{&s.purgeEventsStmt, purgeEventsSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -576,10 +571,3 @@ func (s *eventStatements) SelectEventRejected(
err = stmt.QueryRowContext(ctx, roomNID, eventID).Scan(&rejected) err = stmt.QueryRowContext(ctx, roomNID, eventID).Scan(&rejected)
return return
} }
func (s *eventStatements) PurgeEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeEventsStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -75,14 +75,10 @@ const updateInviteRetiredSQL = "" +
" WHERE room_nid = $1 AND target_nid = $2 AND NOT retired" + " WHERE room_nid = $1 AND target_nid = $2 AND NOT retired" +
" RETURNING invite_event_id" " RETURNING invite_event_id"
const purgeInvitesSQL = "" +
"DELETE FROM roomserver_invites WHERE room_nid = $1"
type inviteStatements struct { type inviteStatements struct {
insertInviteEventStmt *sql.Stmt insertInviteEventStmt *sql.Stmt
selectInviteActiveForUserInRoomStmt *sql.Stmt selectInviteActiveForUserInRoomStmt *sql.Stmt
updateInviteRetiredStmt *sql.Stmt updateInviteRetiredStmt *sql.Stmt
purgeInvitesStmt *sql.Stmt
} }
func CreateInvitesTable(db *sql.DB) error { func CreateInvitesTable(db *sql.DB) error {
@ -97,7 +93,6 @@ func PrepareInvitesTable(db *sql.DB) (tables.Invites, error) {
{&s.insertInviteEventStmt, insertInviteEventSQL}, {&s.insertInviteEventStmt, insertInviteEventSQL},
{&s.selectInviteActiveForUserInRoomStmt, selectInviteActiveForUserInRoomSQL}, {&s.selectInviteActiveForUserInRoomStmt, selectInviteActiveForUserInRoomSQL},
{&s.updateInviteRetiredStmt, updateInviteRetiredSQL}, {&s.updateInviteRetiredStmt, updateInviteRetiredSQL},
{&s.purgeInvitesStmt, purgeInvitesSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -168,10 +163,3 @@ func (s *inviteStatements) SelectInviteActiveForUserInRoom(
} }
return result, eventIDs, rows.Err() return result, eventIDs, rows.Err()
} }
func (s *inviteStatements) PurgeInvites(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeInvitesStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -153,9 +153,6 @@ const selectServerInRoomSQL = "" +
" JOIN roomserver_event_state_keys ON roomserver_membership.target_nid = roomserver_event_state_keys.event_state_key_nid" + " JOIN roomserver_event_state_keys ON roomserver_membership.target_nid = roomserver_event_state_keys.event_state_key_nid" +
" WHERE membership_nid = $1 AND room_nid = $2 AND event_state_key LIKE '%:' || $3 LIMIT 1" " WHERE membership_nid = $1 AND room_nid = $2 AND event_state_key LIKE '%:' || $3 LIMIT 1"
const purgeMembershipsSQL = "" +
"DELETE FROM roomserver_membership WHERE room_nid = $1"
type membershipStatements struct { type membershipStatements struct {
insertMembershipStmt *sql.Stmt insertMembershipStmt *sql.Stmt
selectMembershipForUpdateStmt *sql.Stmt selectMembershipForUpdateStmt *sql.Stmt
@ -173,7 +170,6 @@ type membershipStatements struct {
selectLocalServerInRoomStmt *sql.Stmt selectLocalServerInRoomStmt *sql.Stmt
selectServerInRoomStmt *sql.Stmt selectServerInRoomStmt *sql.Stmt
deleteMembershipStmt *sql.Stmt deleteMembershipStmt *sql.Stmt
purgeMembershipsStmt *sql.Stmt
} }
func CreateMembershipTable(db *sql.DB) error { func CreateMembershipTable(db *sql.DB) error {
@ -209,7 +205,6 @@ func PrepareMembershipTable(db *sql.DB) (tables.Membership, error) {
{&s.selectLocalServerInRoomStmt, selectLocalServerInRoomSQL}, {&s.selectLocalServerInRoomStmt, selectLocalServerInRoomSQL},
{&s.selectServerInRoomStmt, selectServerInRoomSQL}, {&s.selectServerInRoomStmt, selectServerInRoomSQL},
{&s.deleteMembershipStmt, deleteMembershipSQL}, {&s.deleteMembershipStmt, deleteMembershipSQL},
{&s.purgeMembershipsStmt, purgeMembershipsSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -441,10 +436,3 @@ func (s *membershipStatements) DeleteMembership(
) )
return err return err
} }
func (s *membershipStatements) PurgeMemberships(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeMembershipsStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -59,16 +59,9 @@ const selectPreviousEventExistsSQL = "" +
"SELECT 1 FROM roomserver_previous_events" + "SELECT 1 FROM roomserver_previous_events" +
" WHERE previous_event_id = $1 AND previous_reference_sha256 = $2" " WHERE previous_event_id = $1 AND previous_reference_sha256 = $2"
const purgePreviousEventsSQL = `
DELETE FROM roomserver_previous_events WHERE event_nids && ANY(
SELECT ARRAY_AGG(event_nid) FROM roomserver_events WHERE room_nid = $1
)
`
type previousEventStatements struct { type previousEventStatements struct {
insertPreviousEventStmt *sql.Stmt insertPreviousEventStmt *sql.Stmt
selectPreviousEventExistsStmt *sql.Stmt selectPreviousEventExistsStmt *sql.Stmt
purgePreviousEventsStmt *sql.Stmt
} }
func CreatePrevEventsTable(db *sql.DB) error { func CreatePrevEventsTable(db *sql.DB) error {
@ -82,7 +75,6 @@ func PreparePrevEventsTable(db *sql.DB) (tables.PreviousEvents, error) {
return s, sqlutil.StatementList{ return s, sqlutil.StatementList{
{&s.insertPreviousEventStmt, insertPreviousEventSQL}, {&s.insertPreviousEventStmt, insertPreviousEventSQL},
{&s.selectPreviousEventExistsStmt, selectPreviousEventExistsSQL}, {&s.selectPreviousEventExistsStmt, selectPreviousEventExistsSQL},
{&s.purgePreviousEventsStmt, purgePreviousEventsSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -109,10 +101,3 @@ func (s *previousEventStatements) SelectPreviousEventExists(
stmt := sqlutil.TxStmt(txn, s.selectPreviousEventExistsStmt) stmt := sqlutil.TxStmt(txn, s.selectPreviousEventExistsStmt)
return stmt.QueryRowContext(ctx, eventID, eventReferenceSHA256).Scan(&ok) return stmt.QueryRowContext(ctx, eventID, eventReferenceSHA256).Scan(&ok)
} }
func (s *previousEventStatements) PurgePreviousEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgePreviousEventsStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -43,14 +43,10 @@ const selectAllPublishedSQL = "" +
const selectPublishedSQL = "" + const selectPublishedSQL = "" +
"SELECT published FROM roomserver_published WHERE room_id = $1" "SELECT published FROM roomserver_published WHERE room_id = $1"
const purgePublishedSQL = "" +
"DELETE FROM roomserver_published WHERE room_id = $1"
type publishedStatements struct { type publishedStatements struct {
upsertPublishedStmt *sql.Stmt upsertPublishedStmt *sql.Stmt
selectAllPublishedStmt *sql.Stmt selectAllPublishedStmt *sql.Stmt
selectPublishedStmt *sql.Stmt selectPublishedStmt *sql.Stmt
purgePublishedStmt *sql.Stmt
} }
func CreatePublishedTable(db *sql.DB) error { func CreatePublishedTable(db *sql.DB) error {
@ -65,7 +61,6 @@ func PreparePublishedTable(db *sql.DB) (tables.Published, error) {
{&s.upsertPublishedStmt, upsertPublishedSQL}, {&s.upsertPublishedStmt, upsertPublishedSQL},
{&s.selectAllPublishedStmt, selectAllPublishedSQL}, {&s.selectAllPublishedStmt, selectAllPublishedSQL},
{&s.selectPublishedStmt, selectPublishedSQL}, {&s.selectPublishedStmt, selectPublishedSQL},
{&s.purgePublishedStmt, purgePublishedSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -109,10 +104,3 @@ func (s *publishedStatements) SelectAllPublishedRooms(
} }
return roomIDs, rows.Err() return roomIDs, rows.Err()
} }
func (s *publishedStatements) PurgePublished(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
_, err := sqlutil.TxStmt(txn, s.purgePublishedStmt).ExecContext(ctx, roomID)
return err
}

View file

@ -0,0 +1,159 @@
package postgres
import (
"context"
"database/sql"
"github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/roomserver/types"
)
const purgeEventJSONSQL = "" +
"DELETE FROM roomserver_event_json WHERE event_nid = ANY(" +
" SELECT event_nid FROM roomserver_events WHERE room_nid = $1" +
")"
const purgeEventsSQL = "" +
"DELETE FROM roomserver_events WHERE room_nid = $1"
const purgeInvitesSQL = "" +
"DELETE FROM roomserver_invites WHERE room_nid = $1"
const purgeMembershipsSQL = "" +
"DELETE FROM roomserver_membership WHERE room_nid = $1"
const purgePreviousEventsSQL = "" +
"DELETE FROM roomserver_previous_events WHERE event_nids && ANY(" +
" SELECT ARRAY_AGG(event_nid) FROM roomserver_events WHERE room_nid = $1" +
")"
const purgePublishedSQL = "" +
"DELETE FROM roomserver_published WHERE room_id = $1"
const purgeRedactionsSQL = "" +
"DELETE FROM roomserver_redactions WHERE redaction_event_id = ANY(" +
" SELECT event_id FROM roomserver_events WHERE room_nid = $1" +
")"
const purgeRoomAliasesSQL = "" +
"DELETE FROM roomserver_room_aliases WHERE room_id = $1"
const purgeRoomSQL = "" +
"DELETE FROM roomserver_rooms WHERE room_nid = $1"
const purgeStateBlockEntriesSQL = "" +
"DELETE FROM roomserver_state_block WHERE state_block_nid = ANY(" +
" SELECT DISTINCT UNNEST(state_block_nids) FROM roomserver_state_snapshots WHERE room_nid = $1" +
")"
const purgeStateSnapshotEntriesSQL = "" +
"DELETE FROM roomserver_state_snapshots WHERE room_nid = $1"
type purgeStatements struct {
purgeEventJSONStmt *sql.Stmt
purgeEventsStmt *sql.Stmt
purgeInvitesStmt *sql.Stmt
purgeMembershipsStmt *sql.Stmt
purgePreviousEventsStmt *sql.Stmt
purgePublishedStmt *sql.Stmt
purgeRedactionStmt *sql.Stmt
purgeRoomAliasesStmt *sql.Stmt
purgeRoomStmt *sql.Stmt
purgeStateBlockEntriesStmt *sql.Stmt
purgeStateSnapshotEntriesStmt *sql.Stmt
}
func PreparePurgeStatements(db *sql.DB) (*purgeStatements, error) {
s := &purgeStatements{}
return s, sqlutil.StatementList{
{&s.purgeEventJSONStmt, purgeEventJSONSQL},
{&s.purgeEventsStmt, purgeEventsSQL},
{&s.purgeInvitesStmt, purgeInvitesSQL},
{&s.purgeMembershipsStmt, purgeMembershipsSQL},
{&s.purgePublishedStmt, purgePublishedSQL},
{&s.purgePreviousEventsStmt, purgePreviousEventsSQL},
{&s.purgeRedactionStmt, purgeRedactionsSQL},
{&s.purgeRoomAliasesStmt, purgeRoomAliasesSQL},
{&s.purgeRoomStmt, purgeRoomSQL},
{&s.purgeStateBlockEntriesStmt, purgeStateBlockEntriesSQL},
{&s.purgeStateSnapshotEntriesStmt, purgeStateSnapshotEntriesSQL},
}.Prepare(db)
}
func (s *purgeStatements) PurgeEventJSONs(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeEventJSONStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeEventsStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeInvites(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeInvitesStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeMemberships(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeMembershipsStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgePreviousEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgePreviousEventsStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgePublished(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
_, err := sqlutil.TxStmt(txn, s.purgePublishedStmt).ExecContext(ctx, roomID)
return err
}
func (s *purgeStatements) PurgeRedactions(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRedactionStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeRoomAliases(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRoomAliasesStmt).ExecContext(ctx, roomID)
return err
}
func (s *purgeStatements) PurgeRoom(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRoomStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeStateBlocks(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeStateBlockEntriesStmt).ExecContext(ctx, roomNID)
return err
}
func (s *purgeStatements) PurgeStateSnapshots(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeStateSnapshotEntriesStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -20,7 +20,6 @@ import (
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/roomserver/storage/tables" "github.com/matrix-org/dendrite/roomserver/storage/tables"
"github.com/matrix-org/dendrite/roomserver/types"
) )
const redactionsSchema = ` const redactionsSchema = `
@ -53,18 +52,11 @@ const selectRedactionInfoByEventBeingRedactedSQL = "" +
const markRedactionValidatedSQL = "" + const markRedactionValidatedSQL = "" +
" UPDATE roomserver_redactions SET validated = $2 WHERE redaction_event_id = $1" " UPDATE roomserver_redactions SET validated = $2 WHERE redaction_event_id = $1"
const purgeRedactionsSQL = `
DELETE FROM roomserver_redactions WHERE redaction_event_id = ANY(
SELECT event_id FROM roomserver_events WHERE room_nid = $1
)
`
type redactionStatements struct { type redactionStatements struct {
insertRedactionStmt *sql.Stmt insertRedactionStmt *sql.Stmt
selectRedactionInfoByRedactionEventIDStmt *sql.Stmt selectRedactionInfoByRedactionEventIDStmt *sql.Stmt
selectRedactionInfoByEventBeingRedactedStmt *sql.Stmt selectRedactionInfoByEventBeingRedactedStmt *sql.Stmt
markRedactionValidatedStmt *sql.Stmt markRedactionValidatedStmt *sql.Stmt
purgeRedactionStmt *sql.Stmt
} }
func CreateRedactionsTable(db *sql.DB) error { func CreateRedactionsTable(db *sql.DB) error {
@ -80,7 +72,6 @@ func PrepareRedactionsTable(db *sql.DB) (tables.Redactions, error) {
{&s.selectRedactionInfoByRedactionEventIDStmt, selectRedactionInfoByRedactionEventIDSQL}, {&s.selectRedactionInfoByRedactionEventIDStmt, selectRedactionInfoByRedactionEventIDSQL},
{&s.selectRedactionInfoByEventBeingRedactedStmt, selectRedactionInfoByEventBeingRedactedSQL}, {&s.selectRedactionInfoByEventBeingRedactedStmt, selectRedactionInfoByEventBeingRedactedSQL},
{&s.markRedactionValidatedStmt, markRedactionValidatedSQL}, {&s.markRedactionValidatedStmt, markRedactionValidatedSQL},
{&s.purgeRedactionStmt, purgeRedactionsSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -129,10 +120,3 @@ func (s *redactionStatements) MarkRedactionValidated(
_, err := stmt.ExecContext(ctx, redactionEventID, validated) _, err := stmt.ExecContext(ctx, redactionEventID, validated)
return err return err
} }
func (s *redactionStatements) PurgeRedactions(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRedactionStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -53,16 +53,12 @@ const selectCreatorIDFromAliasSQL = "" +
const deleteRoomAliasSQL = "" + const deleteRoomAliasSQL = "" +
"DELETE FROM roomserver_room_aliases WHERE alias = $1" "DELETE FROM roomserver_room_aliases WHERE alias = $1"
const purgeRoomAliasesSQL = "" +
"DELETE FROM roomserver_room_aliases WHERE room_id = $1"
type roomAliasesStatements struct { type roomAliasesStatements struct {
insertRoomAliasStmt *sql.Stmt insertRoomAliasStmt *sql.Stmt
selectRoomIDFromAliasStmt *sql.Stmt selectRoomIDFromAliasStmt *sql.Stmt
selectAliasesFromRoomIDStmt *sql.Stmt selectAliasesFromRoomIDStmt *sql.Stmt
selectCreatorIDFromAliasStmt *sql.Stmt selectCreatorIDFromAliasStmt *sql.Stmt
deleteRoomAliasStmt *sql.Stmt deleteRoomAliasStmt *sql.Stmt
purgeRoomAliasesStmt *sql.Stmt
} }
func CreateRoomAliasesTable(db *sql.DB) error { func CreateRoomAliasesTable(db *sql.DB) error {
@ -79,7 +75,6 @@ func PrepareRoomAliasesTable(db *sql.DB) (tables.RoomAliases, error) {
{&s.selectAliasesFromRoomIDStmt, selectAliasesFromRoomIDSQL}, {&s.selectAliasesFromRoomIDStmt, selectAliasesFromRoomIDSQL},
{&s.selectCreatorIDFromAliasStmt, selectCreatorIDFromAliasSQL}, {&s.selectCreatorIDFromAliasStmt, selectCreatorIDFromAliasSQL},
{&s.deleteRoomAliasStmt, deleteRoomAliasSQL}, {&s.deleteRoomAliasStmt, deleteRoomAliasSQL},
{&s.purgeRoomAliasesStmt, purgeRoomAliasesSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -142,10 +137,3 @@ func (s *roomAliasesStatements) DeleteRoomAlias(
_, err = stmt.ExecContext(ctx, alias) _, err = stmt.ExecContext(ctx, alias)
return return
} }
func (s *roomAliasesStatements) PurgeRoomAliases(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRoomAliasesStmt).ExecContext(ctx, roomID)
return err
}

View file

@ -82,9 +82,6 @@ const bulkSelectRoomIDsSQL = "" +
const bulkSelectRoomNIDsSQL = "" + const bulkSelectRoomNIDsSQL = "" +
"SELECT room_nid FROM roomserver_rooms WHERE room_id = ANY($1)" "SELECT room_nid FROM roomserver_rooms WHERE room_id = ANY($1)"
const purgeRoomSQL = "" +
"DELETE FROM roomserver_rooms WHERE room_nid = $1"
type roomStatements struct { type roomStatements struct {
insertRoomNIDStmt *sql.Stmt insertRoomNIDStmt *sql.Stmt
selectRoomNIDStmt *sql.Stmt selectRoomNIDStmt *sql.Stmt
@ -96,7 +93,6 @@ type roomStatements struct {
selectRoomIDsStmt *sql.Stmt selectRoomIDsStmt *sql.Stmt
bulkSelectRoomIDsStmt *sql.Stmt bulkSelectRoomIDsStmt *sql.Stmt
bulkSelectRoomNIDsStmt *sql.Stmt bulkSelectRoomNIDsStmt *sql.Stmt
purgeRoomStmt *sql.Stmt
} }
func CreateRoomsTable(db *sql.DB) error { func CreateRoomsTable(db *sql.DB) error {
@ -118,7 +114,6 @@ func PrepareRoomsTable(db *sql.DB) (tables.Rooms, error) {
{&s.selectRoomIDsStmt, selectRoomIDsSQL}, {&s.selectRoomIDsStmt, selectRoomIDsSQL},
{&s.bulkSelectRoomIDsStmt, bulkSelectRoomIDsSQL}, {&s.bulkSelectRoomIDsStmt, bulkSelectRoomIDsSQL},
{&s.bulkSelectRoomNIDsStmt, bulkSelectRoomNIDsSQL}, {&s.bulkSelectRoomNIDsStmt, bulkSelectRoomNIDsSQL},
{&s.purgeRoomStmt, purgeRoomSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -293,13 +288,6 @@ func (s *roomStatements) BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, ro
return roomNIDs, nil return roomNIDs, nil
} }
func (s *roomStatements) PurgeRoom(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeRoomStmt).ExecContext(ctx, roomNID)
return err
}
func roomNIDsAsArray(roomNIDs []types.RoomNID) pq.Int64Array { func roomNIDsAsArray(roomNIDs []types.RoomNID) pq.Int64Array {
nids := make([]int64, len(roomNIDs)) nids := make([]int64, len(roomNIDs))
for i := range roomNIDs { for i := range roomNIDs {

View file

@ -65,16 +65,9 @@ const bulkSelectStateBlockEntriesSQL = "" +
"SELECT state_block_nid, event_nids" + "SELECT state_block_nid, event_nids" +
" FROM roomserver_state_block WHERE state_block_nid = ANY($1) ORDER BY state_block_nid ASC" " FROM roomserver_state_block WHERE state_block_nid = ANY($1) ORDER BY state_block_nid ASC"
const purgeStateBlockEntriesSQL = `
DELETE FROM roomserver_state_block WHERE state_block_nid = ANY(
SELECT DISTINCT UNNEST(state_block_nids) FROM roomserver_state_snapshots WHERE room_nid = $1
)
`
type stateBlockStatements struct { type stateBlockStatements struct {
insertStateDataStmt *sql.Stmt insertStateDataStmt *sql.Stmt
bulkSelectStateBlockEntriesStmt *sql.Stmt bulkSelectStateBlockEntriesStmt *sql.Stmt
purgeStateBlockEntriesStmt *sql.Stmt
} }
func CreateStateBlockTable(db *sql.DB) error { func CreateStateBlockTable(db *sql.DB) error {
@ -88,7 +81,6 @@ func PrepareStateBlockTable(db *sql.DB) (tables.StateBlock, error) {
return s, sqlutil.StatementList{ return s, sqlutil.StatementList{
{&s.insertStateDataStmt, insertStateDataSQL}, {&s.insertStateDataStmt, insertStateDataSQL},
{&s.bulkSelectStateBlockEntriesStmt, bulkSelectStateBlockEntriesSQL}, {&s.bulkSelectStateBlockEntriesStmt, bulkSelectStateBlockEntriesSQL},
{&s.purgeStateBlockEntriesStmt, purgeStateBlockEntriesSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -141,13 +133,6 @@ func (s *stateBlockStatements) BulkSelectStateBlockEntries(
return results, err return results, err
} }
func (s *stateBlockStatements) PurgeStateBlocks(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeStateBlockEntriesStmt).ExecContext(ctx, roomNID)
return err
}
func stateBlockNIDsAsArray(stateBlockNIDs []types.StateBlockNID) pq.Int64Array { func stateBlockNIDsAsArray(stateBlockNIDs []types.StateBlockNID) pq.Int64Array {
nids := make([]int64, len(stateBlockNIDs)) nids := make([]int64, len(stateBlockNIDs))
for i := range stateBlockNIDs { for i := range stateBlockNIDs {

View file

@ -72,11 +72,6 @@ const bulkSelectStateBlockNIDsSQL = "" +
"SELECT state_snapshot_nid, state_block_nids FROM roomserver_state_snapshots" + "SELECT state_snapshot_nid, state_block_nids FROM roomserver_state_snapshots" +
" WHERE state_snapshot_nid = ANY($1) ORDER BY state_snapshot_nid ASC" " WHERE state_snapshot_nid = ANY($1) ORDER BY state_snapshot_nid ASC"
// Look up state snapshot NIDs for the given room.
const purgeStateSnapshotEntriesSQL = `
DELETE FROM roomserver_state_snapshots WHERE room_nid = $1
`
// Looks up both the history visibility event and relevant membership events from // Looks up both the history visibility event and relevant membership events from
// a given domain name from a given state snapshot. This is used to optimise the // a given domain name from a given state snapshot. This is used to optimise the
// helpers.CheckServerAllowedToSeeEvent function. // helpers.CheckServerAllowedToSeeEvent function.
@ -106,7 +101,6 @@ type stateSnapshotStatements struct {
insertStateStmt *sql.Stmt insertStateStmt *sql.Stmt
bulkSelectStateBlockNIDsStmt *sql.Stmt bulkSelectStateBlockNIDsStmt *sql.Stmt
bulkSelectStateForHistoryVisibilityStmt *sql.Stmt bulkSelectStateForHistoryVisibilityStmt *sql.Stmt
purgeStateSnapshotEntriesStmt *sql.Stmt
} }
func CreateStateSnapshotTable(db *sql.DB) error { func CreateStateSnapshotTable(db *sql.DB) error {
@ -121,7 +115,6 @@ func PrepareStateSnapshotTable(db *sql.DB) (tables.StateSnapshot, error) {
{&s.insertStateStmt, insertStateSQL}, {&s.insertStateStmt, insertStateSQL},
{&s.bulkSelectStateBlockNIDsStmt, bulkSelectStateBlockNIDsSQL}, {&s.bulkSelectStateBlockNIDsStmt, bulkSelectStateBlockNIDsSQL},
{&s.bulkSelectStateForHistoryVisibilityStmt, bulkSelectStateForHistoryVisibilitySQL}, {&s.bulkSelectStateForHistoryVisibilityStmt, bulkSelectStateForHistoryVisibilitySQL},
{&s.purgeStateSnapshotEntriesStmt, purgeStateSnapshotEntriesSQL},
}.Prepare(db) }.Prepare(db)
} }
@ -190,10 +183,3 @@ func (s *stateSnapshotStatements) BulkSelectStateForHistoryVisibility(
} }
return results, rows.Err() return results, rows.Err()
} }
func (s *stateSnapshotStatements) PurgeStateSnapshots(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
_, err := sqlutil.TxStmt(txn, s.purgeStateSnapshotEntriesStmt).ExecContext(ctx, roomNID)
return err
}

View file

@ -184,6 +184,10 @@ func (d *Database) prepare(db *sql.DB, writer sqlutil.Writer, cache caching.Room
if err != nil { if err != nil {
return err return err
} }
purge, err := PreparePurgeStatements(db)
if err != nil {
return err
}
d.Database = shared.Database{ d.Database = shared.Database{
DB: db, DB: db,
Cache: cache, Cache: cache,
@ -201,6 +205,7 @@ func (d *Database) prepare(db *sql.DB, writer sqlutil.Writer, cache caching.Room
MembershipTable: membership, MembershipTable: membership,
PublishedTable: published, PublishedTable: published,
RedactionsTable: redactions, RedactionsTable: redactions,
Purge: purge,
} }
return nil return nil
} }

View file

@ -42,6 +42,7 @@ type Database struct {
MembershipTable tables.Membership MembershipTable tables.Membership
PublishedTable tables.Published PublishedTable tables.Published
RedactionsTable tables.Redactions RedactionsTable tables.Redactions
Purge tables.Purge
GetRoomUpdaterFn func(ctx context.Context, roomInfo *types.RoomInfo) (*RoomUpdater, error) GetRoomUpdaterFn func(ctx context.Context, roomInfo *types.RoomInfo) (*RoomUpdater, error)
} }
@ -1355,6 +1356,9 @@ func (d *Database) ForgetRoom(ctx context.Context, userID, roomID string, forget
// PurgeRoom removes all information about a given room from the roomserver. // PurgeRoom removes all information about a given room from the roomserver.
// For large rooms this operation may take a considerable amount of time. // For large rooms this operation may take a considerable amount of time.
func (d *Database) PurgeRoom(ctx context.Context, roomID string) error { func (d *Database) PurgeRoom(ctx context.Context, roomID string) error {
if d.Purge == nil {
return fmt.Errorf("not supported on this database engine")
}
return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
roomNID, err := d.RoomsTable.SelectRoomNID(ctx, txn, roomID) roomNID, err := d.RoomsTable.SelectRoomNID(ctx, txn, roomID)
switch err { switch err {
@ -1364,37 +1368,37 @@ func (d *Database) PurgeRoom(ctx context.Context, roomID string) error {
default: default:
return fmt.Errorf("failed to find room NID: %w", err) return fmt.Errorf("failed to find room NID: %w", err)
} }
if err := d.StateBlockTable.PurgeStateBlocks(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeStateBlocks(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge state blocks: %w", err) return fmt.Errorf("failed to purge state blocks: %w", err)
} }
if err := d.StateSnapshotTable.PurgeStateSnapshots(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeStateSnapshots(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge state blocks: %w", err) return fmt.Errorf("failed to purge state blocks: %w", err)
} }
if err := d.InvitesTable.PurgeInvites(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeInvites(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge invites: %w", err) return fmt.Errorf("failed to purge invites: %w", err)
} }
if err := d.MembershipTable.PurgeMemberships(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeMemberships(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge memberships: %w", err) return fmt.Errorf("failed to purge memberships: %w", err)
} }
if err := d.RoomAliasesTable.PurgeRoomAliases(ctx, txn, roomID); err != nil { if err := d.Purge.PurgeRoomAliases(ctx, txn, roomID); err != nil {
return fmt.Errorf("failed to purge room aliases: %w", err) return fmt.Errorf("failed to purge room aliases: %w", err)
} }
if err := d.PublishedTable.PurgePublished(ctx, txn, roomID); err != nil { if err := d.Purge.PurgePublished(ctx, txn, roomID); err != nil {
return fmt.Errorf("failed to purge published: %w", err) return fmt.Errorf("failed to purge published: %w", err)
} }
if err := d.PrevEventsTable.PurgePreviousEvents(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgePreviousEvents(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge previous events: %w", err) return fmt.Errorf("failed to purge previous events: %w", err)
} }
if err := d.EventJSONTable.PurgeEventJSONs(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeEventJSONs(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge event JSONs: %w", err) return fmt.Errorf("failed to purge event JSONs: %w", err)
} }
if err := d.RedactionsTable.PurgeRedactions(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeRedactions(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge redactions: %w", err) return fmt.Errorf("failed to purge redactions: %w", err)
} }
if err := d.EventsTable.PurgeEvents(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeEvents(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge events: %w", err) return fmt.Errorf("failed to purge events: %w", err)
} }
if err := d.RoomsTable.PurgeRoom(ctx, txn, roomNID); err != nil { if err := d.Purge.PurgeRoom(ctx, txn, roomNID); err != nil {
return fmt.Errorf("failed to purge room: %w", err) return fmt.Errorf("failed to purge room: %w", err)
} }
return nil return nil

View file

@ -18,7 +18,6 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"fmt"
"strings" "strings"
"github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal"
@ -112,9 +111,3 @@ func (s *eventJSONStatements) BulkSelectEventJSON(
} }
return results[:i], nil return results[:i], nil
} }
func (s *eventJSONStatements) PurgeEventJSONs(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -646,9 +646,3 @@ func (s *eventStatements) SelectEventRejected(
err = stmt.QueryRowContext(ctx, roomNID, eventID).Scan(&rejected) err = stmt.QueryRowContext(ctx, roomNID, eventID).Scan(&rejected)
return return
} }
func (s *eventStatements) PurgeEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -18,7 +18,6 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"fmt"
"github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
@ -159,9 +158,3 @@ func (s *inviteStatements) SelectInviteActiveForUserInRoom(
} }
return result, eventIDs, nil return result, eventIDs, nil
} }
func (s *inviteStatements) PurgeInvites(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -407,9 +407,3 @@ func (s *membershipStatements) DeleteMembership(
) )
return err return err
} }
func (s *membershipStatements) PurgeMemberships(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -129,9 +129,3 @@ func (s *previousEventStatements) SelectPreviousEventExists(
stmt := sqlutil.TxStmt(txn, s.selectPreviousEventExistsStmt) stmt := sqlutil.TxStmt(txn, s.selectPreviousEventExistsStmt)
return stmt.QueryRowContext(ctx, eventID, eventReferenceSHA256).Scan(&ok) return stmt.QueryRowContext(ctx, eventID, eventReferenceSHA256).Scan(&ok)
} }
func (s *previousEventStatements) PurgePreviousEvents(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -17,7 +17,6 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"fmt"
"github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
@ -107,9 +106,3 @@ func (s *publishedStatements) SelectAllPublishedRooms(
} }
return roomIDs, rows.Err() return roomIDs, rows.Err()
} }
func (s *publishedStatements) PurgePublished(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -17,11 +17,9 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"fmt"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/roomserver/storage/tables" "github.com/matrix-org/dendrite/roomserver/storage/tables"
"github.com/matrix-org/dendrite/roomserver/types"
) )
const redactionsSchema = ` const redactionsSchema = `
@ -123,9 +121,3 @@ func (s *redactionStatements) MarkRedactionValidated(
_, err := stmt.ExecContext(ctx, validated, redactionEventID) _, err := stmt.ExecContext(ctx, validated, redactionEventID)
return err return err
} }
func (s *redactionStatements) PurgeRedactions(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -18,7 +18,6 @@ package sqlite3
import ( import (
"context" "context"
"database/sql" "database/sql"
"fmt"
"github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
@ -144,9 +143,3 @@ func (s *roomAliasesStatements) DeleteRoomAlias(
_, err := stmt.ExecContext(ctx, alias) _, err := stmt.ExecContext(ctx, alias)
return err return err
} }
func (s *roomAliasesStatements) PurgeRoomAliases(
ctx context.Context, txn *sql.Tx, roomID string,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -309,9 +309,3 @@ func (s *roomStatements) BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, ro
} }
return roomNIDs, nil return roomNIDs, nil
} }
func (s *roomStatements) PurgeRoom(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -141,9 +141,3 @@ func (s *stateBlockStatements) BulkSelectStateBlockEntries(
} }
return results, err return results, err
} }
func (s *stateBlockStatements) PurgeStateBlocks(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -146,9 +146,3 @@ func (s *stateSnapshotStatements) BulkSelectStateForHistoryVisibility(
) ([]types.EventNID, error) { ) ([]types.EventNID, error) {
return nil, tables.OptimisationNotSupportedError return nil, tables.OptimisationNotSupportedError
} }
func (s *stateSnapshotStatements) PurgeStateSnapshots(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
) error {
return fmt.Errorf("not implemented on SQLite")
}

View file

@ -22,7 +22,6 @@ type EventJSON interface {
// Insert the event JSON. On conflict, replace the event JSON with the new value (for redactions). // Insert the event JSON. On conflict, replace the event JSON with the new value (for redactions).
InsertEventJSON(ctx context.Context, tx *sql.Tx, eventNID types.EventNID, eventJSON []byte) error InsertEventJSON(ctx context.Context, tx *sql.Tx, eventNID types.EventNID, eventJSON []byte) error
BulkSelectEventJSON(ctx context.Context, tx *sql.Tx, eventNIDs []types.EventNID) ([]EventJSONPair, error) BulkSelectEventJSON(ctx context.Context, tx *sql.Tx, eventNIDs []types.EventNID) ([]EventJSONPair, error)
PurgeEventJSONs(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type EventTypes interface { type EventTypes interface {
@ -68,7 +67,6 @@ type Events interface {
SelectMaxEventDepth(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (int64, error) SelectMaxEventDepth(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (int64, error)
SelectRoomNIDsForEventNIDs(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (roomNIDs map[types.EventNID]types.RoomNID, err error) SelectRoomNIDsForEventNIDs(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (roomNIDs map[types.EventNID]types.RoomNID, err error)
SelectEventRejected(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventID string) (rejected bool, err error) SelectEventRejected(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventID string) (rejected bool, err error)
PurgeEvents(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type Rooms interface { type Rooms interface {
@ -82,7 +80,6 @@ type Rooms interface {
SelectRoomIDsWithEvents(ctx context.Context, txn *sql.Tx) ([]string, error) SelectRoomIDsWithEvents(ctx context.Context, txn *sql.Tx) ([]string, error)
BulkSelectRoomIDs(ctx context.Context, txn *sql.Tx, roomNIDs []types.RoomNID) ([]string, error) BulkSelectRoomIDs(ctx context.Context, txn *sql.Tx, roomNIDs []types.RoomNID) ([]string, error)
BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, roomIDs []string) ([]types.RoomNID, error) BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, roomIDs []string) ([]types.RoomNID, error)
PurgeRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type StateSnapshot interface { type StateSnapshot interface {
@ -92,14 +89,12 @@ type StateSnapshot interface {
// which users are in a room faster than having to load the entire room state. In the // which users are in a room faster than having to load the entire room state. In the
// case of SQLite, this will return tables.OptimisationNotSupportedError. // case of SQLite, this will return tables.OptimisationNotSupportedError.
BulkSelectStateForHistoryVisibility(ctx context.Context, txn *sql.Tx, stateSnapshotNID types.StateSnapshotNID, domain string) ([]types.EventNID, error) BulkSelectStateForHistoryVisibility(ctx context.Context, txn *sql.Tx, stateSnapshotNID types.StateSnapshotNID, domain string) ([]types.EventNID, error)
PurgeStateSnapshots(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type StateBlock interface { type StateBlock interface {
BulkInsertStateData(ctx context.Context, txn *sql.Tx, entries types.StateEntries) (types.StateBlockNID, error) BulkInsertStateData(ctx context.Context, txn *sql.Tx, entries types.StateEntries) (types.StateBlockNID, error)
BulkSelectStateBlockEntries(ctx context.Context, txn *sql.Tx, stateBlockNIDs types.StateBlockNIDs) ([][]types.EventNID, error) BulkSelectStateBlockEntries(ctx context.Context, txn *sql.Tx, stateBlockNIDs types.StateBlockNIDs) ([][]types.EventNID, error)
//BulkSelectFilteredStateBlockEntries(ctx context.Context, stateBlockNIDs []types.StateBlockNID, stateKeyTuples []types.StateKeyTuple) ([]types.StateEntryList, error) //BulkSelectFilteredStateBlockEntries(ctx context.Context, stateBlockNIDs []types.StateBlockNID, stateKeyTuples []types.StateKeyTuple) ([]types.StateEntryList, error)
PurgeStateBlocks(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type RoomAliases interface { type RoomAliases interface {
@ -108,7 +103,6 @@ type RoomAliases interface {
SelectAliasesFromRoomID(ctx context.Context, txn *sql.Tx, roomID string) ([]string, error) SelectAliasesFromRoomID(ctx context.Context, txn *sql.Tx, roomID string) ([]string, error)
SelectCreatorIDFromAlias(ctx context.Context, txn *sql.Tx, alias string) (creatorID string, err error) SelectCreatorIDFromAlias(ctx context.Context, txn *sql.Tx, alias string) (creatorID string, err error)
DeleteRoomAlias(ctx context.Context, txn *sql.Tx, alias string) (err error) DeleteRoomAlias(ctx context.Context, txn *sql.Tx, alias string) (err error)
PurgeRoomAliases(ctx context.Context, txn *sql.Tx, roomID string) error
} }
type PreviousEvents interface { type PreviousEvents interface {
@ -116,7 +110,6 @@ type PreviousEvents interface {
// Check if the event reference exists // Check if the event reference exists
// Returns sql.ErrNoRows if the event reference doesn't exist. // Returns sql.ErrNoRows if the event reference doesn't exist.
SelectPreviousEventExists(ctx context.Context, txn *sql.Tx, eventID string, eventReferenceSHA256 []byte) error SelectPreviousEventExists(ctx context.Context, txn *sql.Tx, eventID string, eventReferenceSHA256 []byte) error
PurgePreviousEvents(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type Invites interface { type Invites interface {
@ -124,7 +117,6 @@ type Invites interface {
UpdateInviteRetired(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) ([]string, error) UpdateInviteRetired(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) ([]string, error)
// SelectInviteActiveForUserInRoom returns a list of sender state key NIDs and invite event IDs matching those nids. // SelectInviteActiveForUserInRoom returns a list of sender state key NIDs and invite event IDs matching those nids.
SelectInviteActiveForUserInRoom(ctx context.Context, txn *sql.Tx, targetUserNID types.EventStateKeyNID, roomNID types.RoomNID) ([]types.EventStateKeyNID, []string, error) SelectInviteActiveForUserInRoom(ctx context.Context, txn *sql.Tx, targetUserNID types.EventStateKeyNID, roomNID types.RoomNID) ([]types.EventStateKeyNID, []string, error)
PurgeInvites(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type MembershipState int64 type MembershipState int64
@ -151,14 +143,12 @@ type Membership interface {
SelectLocalServerInRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) (bool, error) SelectLocalServerInRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) (bool, error)
SelectServerInRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, serverName gomatrixserverlib.ServerName) (bool, error) SelectServerInRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, serverName gomatrixserverlib.ServerName) (bool, error)
DeleteMembership(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) error DeleteMembership(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) error
PurgeMemberships(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
} }
type Published interface { type Published interface {
UpsertRoomPublished(ctx context.Context, txn *sql.Tx, roomID string, published bool) (err error) UpsertRoomPublished(ctx context.Context, txn *sql.Tx, roomID string, published bool) (err error)
SelectPublishedFromRoomID(ctx context.Context, txn *sql.Tx, roomID string) (published bool, err error) SelectPublishedFromRoomID(ctx context.Context, txn *sql.Tx, roomID string) (published bool, err error)
SelectAllPublishedRooms(ctx context.Context, txn *sql.Tx, published bool) ([]string, error) SelectAllPublishedRooms(ctx context.Context, txn *sql.Tx, published bool) ([]string, error)
PurgePublished(ctx context.Context, txn *sql.Tx, roomID string) error
} }
type RedactionInfo struct { type RedactionInfo struct {
@ -179,7 +169,20 @@ type Redactions interface {
// Mark this redaction event as having been validated. This means we have both sides of the redaction and have // Mark this redaction event as having been validated. This means we have both sides of the redaction and have
// successfully redacted the event JSON. // successfully redacted the event JSON.
MarkRedactionValidated(ctx context.Context, txn *sql.Tx, redactionEventID string, validated bool) error MarkRedactionValidated(ctx context.Context, txn *sql.Tx, redactionEventID string, validated bool) error
}
type Purge interface {
PurgeEventJSONs(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeEvents(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeRoom(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeStateSnapshots(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeStateBlocks(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgePreviousEvents(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeInvites(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeMemberships(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgePublished(ctx context.Context, txn *sql.Tx, roomID string) error
PurgeRedactions(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error PurgeRedactions(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID) error
PurgeRoomAliases(ctx context.Context, txn *sql.Tx, roomID string) error
} }
// StrippedEvent represents a stripped event for returning extracted content values. // StrippedEvent represents a stripped event for returning extracted content values.