mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-12 09:23:09 -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 = "" +
|
const selectAliasesFromRoomIDSQL = "" +
|
||||||
"SELECT alias FROM roomserver_room_aliases WHERE room_id = $1"
|
"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 = "" +
|
const deleteRoomAliasSQL = "" +
|
||||||
"DELETE FROM roomserver_room_aliases WHERE alias = $1"
|
"DELETE FROM roomserver_room_aliases WHERE alias = $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
|
||||||
deleteRoomAliasStmt *sql.Stmt
|
selectAliasesFromRoomIDsStmt *sql.Stmt
|
||||||
|
deleteRoomAliasStmt *sql.Stmt
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *roomAliasesStatements) prepare(db *sql.DB) (err error) {
|
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.insertRoomAliasStmt, insertRoomAliasSQL},
|
||||||
{&s.selectRoomIDFromAliasStmt, selectRoomIDFromAliasSQL},
|
{&s.selectRoomIDFromAliasStmt, selectRoomIDFromAliasSQL},
|
||||||
{&s.selectAliasesFromRoomIDStmt, selectAliasesFromRoomIDSQL},
|
{&s.selectAliasesFromRoomIDStmt, selectAliasesFromRoomIDSQL},
|
||||||
|
{&s.selectAliasesFromRoomIDsStmt, selectAliasesFromRoomIDsSQL},
|
||||||
{&s.deleteRoomAliasStmt, deleteRoomAliasSQL},
|
{&s.deleteRoomAliasStmt, deleteRoomAliasSQL},
|
||||||
}.prepare(db)
|
}.prepare(db)
|
||||||
}
|
}
|
||||||
|
|
@ -94,6 +99,29 @@ func (s *roomAliasesStatements) selectAliasesFromRoomID(roomID string) (aliases
|
||||||
return
|
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) {
|
func (s *roomAliasesStatements) deleteRoomAlias(alias string) (err error) {
|
||||||
_, err = s.deleteRoomAliasStmt.Exec(alias)
|
_, err = s.deleteRoomAliasStmt.Exec(alias)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -370,6 +370,13 @@ func (d *Database) GetAliasesFromRoomID(roomID string) ([]string, error) {
|
||||||
return d.statements.selectAliasesFromRoomID(roomID)
|
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
|
// RemoveRoomAlias implements alias.RoomserverAliasAPIDB
|
||||||
func (d *Database) RemoveRoomAlias(alias string) error {
|
func (d *Database) RemoveRoomAlias(alias string) error {
|
||||||
return d.statements.deleteRoomAlias(alias)
|
return d.statements.deleteRoomAlias(alias)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue