mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-10 16:33:11 -06:00
Add function for batch aliases retrieval
This commit is contained in:
parent
9e772402d4
commit
706be4edb6
|
|
@ -39,14 +39,18 @@ const selectRoomIDFromAliasSQL = "" +
|
|||
const selectAliasesFromRoomIDSQL = "" +
|
||||
"SELECT alias FROM roomserver_room_aliases WHERE room_id = $1"
|
||||
|
||||
const selectAliasesFromRoomIDsSQL = "" +
|
||||
"SELECT alias, room_id FROM roomserver_room_aliases WHERE room_id = ANY($1)"
|
||||
|
||||
const deleteRoomAliasSQL = "" +
|
||||
"DELETE FROM roomserver_room_aliases WHERE alias = $1"
|
||||
|
||||
type roomAliasesStatements struct {
|
||||
insertRoomAliasStmt *sql.Stmt
|
||||
selectRoomIDFromAliasStmt *sql.Stmt
|
||||
selectAliasesFromRoomIDStmt *sql.Stmt
|
||||
deleteRoomAliasStmt *sql.Stmt
|
||||
insertRoomAliasStmt *sql.Stmt
|
||||
selectRoomIDFromAliasStmt *sql.Stmt
|
||||
selectAliasesFromRoomIDStmt *sql.Stmt
|
||||
selectAliasesFromRoomIDsStmt *sql.Stmt
|
||||
deleteRoomAliasStmt *sql.Stmt
|
||||
}
|
||||
|
||||
func (s *roomAliasesStatements) prepare(db *sql.DB) (err error) {
|
||||
|
|
@ -58,6 +62,7 @@ func (s *roomAliasesStatements) prepare(db *sql.DB) (err error) {
|
|||
{&s.insertRoomAliasStmt, insertRoomAliasSQL},
|
||||
{&s.selectRoomIDFromAliasStmt, selectRoomIDFromAliasSQL},
|
||||
{&s.selectAliasesFromRoomIDStmt, selectAliasesFromRoomIDSQL},
|
||||
{&s.selectAliasesFromRoomIDsStmt, selectAliasesFromRoomIDsSQL},
|
||||
{&s.deleteRoomAliasStmt, deleteRoomAliasSQL},
|
||||
}.prepare(db)
|
||||
}
|
||||
|
|
@ -94,6 +99,29 @@ func (s *roomAliasesStatements) selectAliasesFromRoomID(roomID string) (aliases
|
|||
return
|
||||
}
|
||||
|
||||
func (s *roomAliasesStatements) selectAliasesFromRoomIDs(roomIDs []string) (aliases map[string][]string, err error) {
|
||||
aliases = make(map[string][]string)
|
||||
rows, err := s.selectAliasesFromRoomIDsStmt.Query(roomIDs)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
var alias, roomID string
|
||||
if err = rows.Scan(&alias, &roomID); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if len(aliases[roomID]) > 0 {
|
||||
aliases[roomID] = append(aliases[roomID], alias)
|
||||
} else {
|
||||
aliases[roomID] = []string{alias}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *roomAliasesStatements) deleteRoomAlias(alias string) (err error) {
|
||||
_, err = s.deleteRoomAliasStmt.Exec(alias)
|
||||
return
|
||||
|
|
|
|||
|
|
@ -370,6 +370,13 @@ func (d *Database) GetAliasesFromRoomID(roomID string) ([]string, error) {
|
|||
return d.statements.selectAliasesFromRoomID(roomID)
|
||||
}
|
||||
|
||||
// GetAliasesFromRoomIDs returns a map of the aliases bound to a given set of
|
||||
// room IDs, ordered by room ID (ie map[roomID] = []alias)
|
||||
// Returns an error if the retrieval failed
|
||||
func (d *Database) GetAliasesFromRoomIDs(roomIDs []string) (map[string][]string, error) {
|
||||
return d.statements.selectAliasesFromRoomIDs(roomIDs)
|
||||
}
|
||||
|
||||
// RemoveRoomAlias implements alias.RoomserverAliasAPIDB
|
||||
func (d *Database) RemoveRoomAlias(alias string) error {
|
||||
return d.statements.deleteRoomAlias(alias)
|
||||
|
|
|
|||
Loading…
Reference in a new issue