diff options
author | Till <2353100+S7evinK@users.noreply.github.com> | 2022-04-26 15:50:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-26 14:50:56 +0100 |
commit | 4c19f22725b8f534163ad37845650005b32172ad (patch) | |
tree | 20bbdc12e6166192d40118bc7253e43d2aff6a18 /syncapi/storage/postgres/account_data_table.go | |
parent | 5306c73b008567d855ca548d195abf3dfaf8917c (diff) |
Fix account_data not correctly send in a complete sync (#2379)
* Return the StreamPosition from the database and not the latest
* Fix linter issue
Diffstat (limited to 'syncapi/storage/postgres/account_data_table.go')
-rw-r--r-- | syncapi/storage/postgres/account_data_table.go | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/syncapi/storage/postgres/account_data_table.go b/syncapi/storage/postgres/account_data_table.go index 25bdb1da..22bb4d7f 100644 --- a/syncapi/storage/postgres/account_data_table.go +++ b/syncapi/storage/postgres/account_data_table.go @@ -57,7 +57,7 @@ const insertAccountDataSQL = "" + " RETURNING id" const selectAccountDataInRangeSQL = "" + - "SELECT room_id, type FROM syncapi_account_data_type" + + "SELECT id, room_id, type FROM syncapi_account_data_type" + " WHERE user_id = $1 AND id > $2 AND id <= $3" + " AND ( $4::text[] IS NULL OR type LIKE ANY($4) )" + " AND ( $5::text[] IS NULL OR NOT(type LIKE ANY($5)) )" + @@ -103,7 +103,7 @@ func (s *accountDataStatements) SelectAccountDataInRange( userID string, r types.Range, accountDataEventFilter *gomatrixserverlib.EventFilter, -) (data map[string][]string, err error) { +) (data map[string][]string, pos types.StreamPosition, err error) { data = make(map[string][]string) rows, err := s.selectAccountDataInRangeStmt.QueryContext(ctx, userID, r.Low(), r.High(), @@ -116,11 +116,12 @@ func (s *accountDataStatements) SelectAccountDataInRange( } defer internal.CloseAndLogIfError(ctx, rows, "selectAccountDataInRange: rows.close() failed") - for rows.Next() { - var dataType string - var roomID string + var dataType string + var roomID string + var id types.StreamPosition - if err = rows.Scan(&roomID, &dataType); err != nil { + for rows.Next() { + if err = rows.Scan(&id, &roomID, &dataType); err != nil { return } @@ -129,8 +130,11 @@ func (s *accountDataStatements) SelectAccountDataInRange( } else { data[roomID] = []string{dataType} } + if id > pos { + pos = id + } } - return data, rows.Err() + return data, pos, rows.Err() } func (s *accountDataStatements) SelectMaxAccountDataID( |