Make SQLite work again

This commit is contained in:
Till Faelligen 2023-02-01 14:01:08 +01:00
parent 823540e861
commit 28690b72f9
No known key found for this signature in database
GPG key ID: ACCDC9606D472758
4 changed files with 105 additions and 99 deletions

View file

@ -21,6 +21,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/matrix-org/dendrite/roomserver/storage/tables"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -226,6 +227,7 @@ func (r *Queryer) QueryMembershipAtEvent(
return fmt.Errorf("no roomInfo found") return fmt.Errorf("no roomInfo found")
} }
// get the users stateKeyNID
stateKeyNIDs, err := r.DB.EventStateKeyNIDs(ctx, []string{request.UserID}) stateKeyNIDs, err := r.DB.EventStateKeyNIDs(ctx, []string{request.UserID})
if err != nil { if err != nil {
return fmt.Errorf("unable to get stateKeyNIDs for %s: %w", request.UserID, err) return fmt.Errorf("unable to get stateKeyNIDs for %s: %w", request.UserID, err)
@ -238,21 +240,12 @@ func (r *Queryer) QueryMembershipAtEvent(
switch err { switch err {
case nil: case nil:
return nil return nil
//case tables.OptimisationNotSupportedError: // fallthrough case tables.OptimisationNotSupportedError: // fallthrough
default: default:
return err return err
} }
/* response.Memberships = make(map[string]*gomatrixserverlib.HeaderedEvent)
// get the users stateKeyNID
stateKeyNIDs, err := r.DB.EventStateKeyNIDs(ctx, []string{request.UserID})
if err != nil {
return fmt.Errorf("unable to get stateKeyNIDs for %s: %w", request.UserID, err)
}
if _, ok := stateKeyNIDs[request.UserID]; !ok {
return fmt.Errorf("requested stateKeyNID for %s was not found", request.UserID)
}
stateEntries, err := helpers.MembershipAtEvent(ctx, r.DB, nil, request.EventIDs, stateKeyNIDs[request.UserID]) stateEntries, err := helpers.MembershipAtEvent(ctx, r.DB, nil, request.EventIDs, stateKeyNIDs[request.UserID])
if err != nil { if err != nil {
return fmt.Errorf("unable to get state before event: %w", err) return fmt.Errorf("unable to get state before event: %w", err)
@ -294,18 +287,15 @@ func (r *Queryer) QueryMembershipAtEvent(
return fmt.Errorf("unable to get memberships at state: %w", err) return fmt.Errorf("unable to get memberships at state: %w", err)
} }
res := make([]*gomatrixserverlib.HeaderedEvent, 0, len(memberships))
for i := range memberships { for i := range memberships {
ev := memberships[i] ev := memberships[i]
if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(request.UserID) { if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(request.UserID) {
res = append(res, ev.Headered(roomVersion)) response.Memberships[eventID] = ev.Event.Headered(info.RoomVersion)
} }
} }
response.Memberships[eventID] = res
} }
return nil*/ return nil
} }
// QueryMembershipsForRoom implements api.RoomserverInternalAPI // QueryMembershipsForRoom implements api.RoomserverInternalAPI

View file

@ -200,7 +200,7 @@ func visibilityForEvents(
visibility: event.Visibility, visibility: event.Visibility,
} }
ev, ok := membershipResp.Memberships[eventID] ev, ok := membershipResp.Memberships[eventID]
if !ok { if !ok || ev == nil {
result[eventID] = vis result[eventID] = vis
continue continue
} }

View file

@ -407,7 +407,11 @@ func (s *outputRoomEventsStatements) InsertEvent(
// selectRecentEvents returns the most recent events in the given room, up to a maximum of 'limit'. // selectRecentEvents returns the most recent events in the given room, up to a maximum of 'limit'.
// If onlySyncEvents has a value of true, only returns the events that aren't marked as to exclude // If onlySyncEvents has a value of true, only returns the events that aren't marked as to exclude
// from sync. // from sync.
func (s *outputRoomEventsStatements) SelectRecentEvents(ctx context.Context, txn *sql.Tx, roomIDs []string, ra types.Range, eventFilter *gomatrixserverlib.RoomEventFilter, chronologicalOrder bool, onlySyncEvents bool) (map[string]types.RecentEvents, error) { func (s *outputRoomEventsStatements) SelectRecentEvents(
ctx context.Context, txn *sql.Tx,
roomIDs []string, ra types.Range, eventFilter *gomatrixserverlib.RoomEventFilter,
chronologicalOrder bool, onlySyncEvents bool,
) (map[string]types.RecentEvents, error) {
var stmt *sql.Stmt var stmt *sql.Stmt
if onlySyncEvents { if onlySyncEvents {
stmt = sqlutil.TxStmt(txn, s.selectRecentEventsForSyncStmt) stmt = sqlutil.TxStmt(txn, s.selectRecentEventsForSyncStmt)

View file

@ -366,7 +366,11 @@ func (s *outputRoomEventsStatements) InsertEvent(
return streamPos, err return streamPos, err
} }
func (s *outputRoomEventsStatements) SelectRecentEvents(ctx context.Context, txn *sql.Tx, roomIDs []string, r types.Range, eventFilter *gomatrixserverlib.RoomEventFilter, chronologicalOrder bool, onlySyncEvents bool) (map[string]types.RecentEvents, error) { func (s *outputRoomEventsStatements) SelectRecentEvents(
ctx context.Context, txn *sql.Tx,
roomIDs []string, r types.Range, eventFilter *gomatrixserverlib.RoomEventFilter,
chronologicalOrder bool, onlySyncEvents bool,
) (map[string]types.RecentEvents, error) {
var query string var query string
if onlySyncEvents { if onlySyncEvents {
query = selectRecentEventsForSyncSQL query = selectRecentEventsForSyncSQL
@ -374,10 +378,12 @@ func (s *outputRoomEventsStatements) SelectRecentEvents(ctx context.Context, txn
query = selectRecentEventsSQL query = selectRecentEventsSQL
} }
result := make(map[string]types.RecentEvents, len(roomIDs))
for _, roomID := range roomIDs {
stmt, params, err := prepareWithFilters( stmt, params, err := prepareWithFilters(
s.db, txn, query, s.db, txn, query,
[]interface{}{ []interface{}{
roomIDs, r.Low(), r.High(), roomID, r.Low(), r.High(),
}, },
eventFilter.Senders, eventFilter.NotSenders, eventFilter.Senders, eventFilter.NotSenders,
eventFilter.Types, eventFilter.NotTypes, eventFilter.Types, eventFilter.NotTypes,
@ -405,8 +411,10 @@ func (s *outputRoomEventsStatements) SelectRecentEvents(ctx context.Context, txn
return events[i].StreamPosition < events[j].StreamPosition return events[i].StreamPosition < events[j].StreamPosition
}) })
} }
res := types.RecentEvents{}
// we queried for 1 more than the limit, so if we returned one more mark limited=true // we queried for 1 more than the limit, so if we returned one more mark limited=true
if len(events) > eventFilter.Limit { if len(events) > eventFilter.Limit {
res.Limited = true
// re-slice the extra (oldest) event out: in chronological order this is the first entry, else the last. // re-slice the extra (oldest) event out: in chronological order this is the first entry, else the last.
if chronologicalOrder { if chronologicalOrder {
events = events[1:] events = events[1:]
@ -414,7 +422,11 @@ func (s *outputRoomEventsStatements) SelectRecentEvents(ctx context.Context, txn
events = events[:len(events)-1] events = events[:len(events)-1]
} }
} }
return map[string]types.RecentEvents{}, nil res.Events = events
result[roomID] = res
}
return result, nil
} }
func (s *outputRoomEventsStatements) SelectEarlyEvents( func (s *outputRoomEventsStatements) SelectEarlyEvents(