Add QueryStateAndAuthChainIDs

This commit is contained in:
Neil Alexander 2021-07-15 15:02:50 +01:00
parent 1827dd7c09
commit 90dd5e6544
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
8 changed files with 175 additions and 0 deletions

View file

@ -134,6 +134,9 @@ const selectMaxEventDepthSQL = "" +
const selectRoomNIDsForEventNIDsSQL = "" +
"SELECT event_nid, room_nid FROM roomserver_events WHERE event_nid = ANY($1)"
const bulkSelectEventAuthEventNIDsSQL = "" +
"SELECT auth_event_nids FROM roomserver_events WHERE event_nid = ANY($1)"
type eventStatements struct {
insertEventStmt *sql.Stmt
selectEventStmt *sql.Stmt
@ -150,6 +153,7 @@ type eventStatements struct {
bulkSelectEventNIDStmt *sql.Stmt
selectMaxEventDepthStmt *sql.Stmt
selectRoomNIDsForEventNIDsStmt *sql.Stmt
bulkSelectEventAuthEventNIDsStmt *sql.Stmt
}
func createEventsTable(db *sql.DB) error {
@ -176,6 +180,7 @@ func prepareEventsTable(db *sql.DB) (tables.Events, error) {
{&s.bulkSelectEventNIDStmt, bulkSelectEventNIDSQL},
{&s.selectMaxEventDepthStmt, selectMaxEventDepthSQL},
{&s.selectRoomNIDsForEventNIDsStmt, selectRoomNIDsForEventNIDsSQL},
{&s.bulkSelectEventAuthEventNIDsStmt, bulkSelectEventAuthEventNIDsSQL},
}.Prepare(db)
}
@ -502,6 +507,28 @@ func (s *eventStatements) SelectRoomNIDsForEventNIDs(
return result, nil
}
func (s *eventStatements) SelectEventAuthEventNIDs(
ctx context.Context, eventNIDs []types.EventNID,
) (map[types.EventNID][]types.EventNID, error) {
rows, err := s.bulkSelectEventAuthEventNIDsStmt.QueryContext(ctx, eventNIDsAsArray(eventNIDs))
if err != nil {
return nil, err
}
defer internal.CloseAndLogIfError(ctx, rows, "selectRoomNIDsForEventNIDsStmt: rows.close() failed")
result := make(map[types.EventNID][]types.EventNID)
for rows.Next() {
var eventNID types.EventNID
var authEventNIDs pq.Int64Array
if err = rows.Scan(&authEventNIDs); err != nil {
return nil, err
}
for _, a := range authEventNIDs {
result[eventNID] = append(result[eventNID], types.EventNID(a))
}
}
return result, nil
}
func eventNIDsAsArray(eventNIDs []types.EventNID) pq.Int64Array {
nids := make([]int64, len(eventNIDs))
for i := range eventNIDs {