mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 06:43:09 -06:00
Copy-pasta QueryLatestEventsAndState code
This commit is contained in:
parent
1cea9f7a1c
commit
36ae29be81
|
|
@ -85,7 +85,6 @@ type roomStatements struct {
|
|||
updateLatestEventNIDsStmt *sql.Stmt
|
||||
selectRoomVersionForRoomIDStmt *sql.Stmt
|
||||
selectRoomVersionForRoomNIDStmt *sql.Stmt
|
||||
selectStateSnapshotNIDStmt *sql.Stmt
|
||||
}
|
||||
|
||||
func NewPostgresRoomsTable(db *sql.DB) (tables.Rooms, error) {
|
||||
|
|
@ -102,7 +101,6 @@ func NewPostgresRoomsTable(db *sql.DB) (tables.Rooms, error) {
|
|||
{&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL},
|
||||
{&s.selectRoomVersionForRoomIDStmt, selectRoomVersionForRoomIDSQL},
|
||||
{&s.selectRoomVersionForRoomNIDStmt, selectRoomVersionForRoomNIDSQL},
|
||||
{&s.selectStateSnapshotNIDStmt, selectStateSnapshotNIDSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
|
|
@ -201,14 +199,3 @@ func (s *roomStatements) SelectRoomVersionForRoomNID(
|
|||
}
|
||||
return roomVersion, err
|
||||
}
|
||||
|
||||
func (s *roomStatements) SelectStateSnapshotNID(
|
||||
ctx context.Context, roomID string,
|
||||
) (types.StateSnapshotNID, error) {
|
||||
var stateSnapshotNID types.StateSnapshotNID
|
||||
err := s.selectStateSnapshotNIDStmt.QueryRowContext(ctx, roomID).Scan(&stateSnapshotNID)
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, errors.New("room not found")
|
||||
}
|
||||
return stateSnapshotNID, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,22 +177,27 @@ func (d *Database) SnapshotNIDFromEventID(
|
|||
func (d *Database) StateForRoomID(
|
||||
ctx context.Context, roomID string,
|
||||
) ([]types.StateEntry, error) {
|
||||
stateSnapshotNID, err := d.RoomsTable.SelectStateSnapshotNID(ctx, roomID)
|
||||
if err != nil || stateSnapshotNID == 0 {
|
||||
// the room doesn't exist or it doesn't have state
|
||||
roomNID, err := d.RoomNIDExcludingStubs(ctx, roomID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if roomNID == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
stateBlockLists, err := d.StateSnapshotTable.BulkSelectStateBlockNIDs(ctx, []types.StateSnapshotNID{stateSnapshotNID})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("d.StateSnapshotTable.BulkSelectStateBlockNIDs: %w", err)
|
||||
_, stateSnapshotNID, _, err := d.LatestEventIDs(ctx, roomNID)
|
||||
if err != nil || stateSnapshotNID == 0 {
|
||||
return nil, err
|
||||
}
|
||||
stateBlockNIDs := []types.StateBlockNID{}
|
||||
for _, stateBlockList := range stateBlockLists {
|
||||
stateBlockNIDs = append(stateBlockNIDs, stateBlockList.StateBlockNIDs...)
|
||||
}
|
||||
stateEventLists, err := d.StateBlockTable.BulkSelectStateBlockEntries(ctx, stateBlockNIDs)
|
||||
|
||||
stateBlockNIDLists, err := d.StateBlockNIDs(ctx, []types.StateSnapshotNID{stateSnapshotNID})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("d.StateBlockTable.BulkSelectStateBlockEntries: %w", err)
|
||||
return nil, err
|
||||
}
|
||||
// We've asked for exactly one snapshot from the db so we should have exactly one entry in the result.
|
||||
stateBlockNIDList := stateBlockNIDLists[0]
|
||||
stateEventLists, err := d.StateEntries(ctx, stateBlockNIDList.StateBlockNIDs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
stateEventNIDs := []types.StateEntry{}
|
||||
for _, stateEventList := range stateEventLists {
|
||||
|
|
|
|||
|
|
@ -76,7 +76,6 @@ type roomStatements struct {
|
|||
updateLatestEventNIDsStmt *sql.Stmt
|
||||
selectRoomVersionForRoomIDStmt *sql.Stmt
|
||||
selectRoomVersionForRoomNIDStmt *sql.Stmt
|
||||
selectStateSnapshotNIDStmt *sql.Stmt
|
||||
}
|
||||
|
||||
func NewSqliteRoomsTable(db *sql.DB) (tables.Rooms, error) {
|
||||
|
|
@ -95,7 +94,6 @@ func NewSqliteRoomsTable(db *sql.DB) (tables.Rooms, error) {
|
|||
{&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL},
|
||||
{&s.selectRoomVersionForRoomIDStmt, selectRoomVersionForRoomIDSQL},
|
||||
{&s.selectRoomVersionForRoomNIDStmt, selectRoomVersionForRoomNIDSQL},
|
||||
{&s.selectStateSnapshotNIDStmt, selectStateSnapshotNIDSQL},
|
||||
}.Prepare(db)
|
||||
}
|
||||
|
||||
|
|
@ -200,14 +198,3 @@ func (s *roomStatements) SelectRoomVersionForRoomNID(
|
|||
}
|
||||
return roomVersion, err
|
||||
}
|
||||
|
||||
func (s *roomStatements) SelectStateSnapshotNID(
|
||||
ctx context.Context, roomID string,
|
||||
) (types.StateSnapshotNID, error) {
|
||||
var stateSnapshotNID types.StateSnapshotNID
|
||||
err := s.selectStateSnapshotNIDStmt.QueryRowContext(ctx, roomID).Scan(&stateSnapshotNID)
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, errors.New("room not found")
|
||||
}
|
||||
return stateSnapshotNID, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ type Rooms interface {
|
|||
UpdateLatestEventNIDs(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventNIDs []types.EventNID, lastEventSentNID types.EventNID, stateSnapshotNID types.StateSnapshotNID) error
|
||||
SelectRoomVersionForRoomID(ctx context.Context, txn *sql.Tx, roomID string) (gomatrixserverlib.RoomVersion, error)
|
||||
SelectRoomVersionForRoomNID(ctx context.Context, roomNID types.RoomNID) (gomatrixserverlib.RoomVersion, error)
|
||||
SelectStateSnapshotNID(ctx context.Context, roomID string) (types.StateSnapshotNID, error)
|
||||
}
|
||||
|
||||
type Transactions interface {
|
||||
|
|
|
|||
Loading…
Reference in a new issue