aboutsummaryrefslogtreecommitdiff
path: root/syncapi/storage/postgres/account_data_table.go
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-04-26 15:50:56 +0200
committerGitHub <noreply@github.com>2022-04-26 14:50:56 +0100
commit4c19f22725b8f534163ad37845650005b32172ad (patch)
tree20bbdc12e6166192d40118bc7253e43d2aff6a18 /syncapi/storage/postgres/account_data_table.go
parent5306c73b008567d855ca548d195abf3dfaf8917c (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.go18
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(