aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-04-29 18:41:45 +0100
committerGitHub <noreply@github.com>2020-04-29 18:41:45 +0100
commit4ad52c67cacc21997f49decd57e3105beb8ab62d (patch)
treee6606ee4fa49b9e62940c04a287c68e81c2b0749 /roomserver/storage
parent458b3647815f0f2c6930611961431a9fb4390fba (diff)
Honour history_visibility when backfilling (#990)
* Make backfill work for shared history visibility * fetch missing state on backfill to remember snapshots correctly * Fix gmsl to not mux in auth events into room state * Whoops * Linting
Diffstat (limited to 'roomserver/storage')
-rw-r--r--roomserver/storage/sqlite3/events_table.go28
-rw-r--r--roomserver/storage/sqlite3/storage.go2
2 files changed, 13 insertions, 17 deletions
diff --git a/roomserver/storage/sqlite3/events_table.go b/roomserver/storage/sqlite3/events_table.go
index d881fa91..a63596ae 100644
--- a/roomserver/storage/sqlite3/events_table.go
+++ b/roomserver/storage/sqlite3/events_table.go
@@ -48,11 +48,6 @@ const insertEventSQL = `
ON CONFLICT DO NOTHING;
`
-const insertEventResultSQL = `
- SELECT event_nid, state_snapshot_nid FROM roomserver_events
- WHERE rowid = last_insert_rowid();
-`
-
const selectEventSQL = "" +
"SELECT event_nid, state_snapshot_nid FROM roomserver_events WHERE event_id = $1"
@@ -102,7 +97,6 @@ const selectRoomNIDForEventNIDSQL = "" +
type eventStatements struct {
db *sql.DB
insertEventStmt *sql.Stmt
- insertEventResultStmt *sql.Stmt
selectEventStmt *sql.Stmt
bulkSelectStateEventByIDStmt *sql.Stmt
bulkSelectStateAtEventByIDStmt *sql.Stmt
@@ -126,7 +120,6 @@ func (s *eventStatements) prepare(db *sql.DB) (err error) {
return statementList{
{&s.insertEventStmt, insertEventSQL},
- {&s.insertEventResultStmt, insertEventResultSQL},
{&s.selectEventStmt, selectEventSQL},
{&s.bulkSelectStateEventByIDStmt, bulkSelectStateEventByIDSQL},
{&s.bulkSelectStateAtEventByIDStmt, bulkSelectStateAtEventByIDSQL},
@@ -152,19 +145,22 @@ func (s *eventStatements) insertEvent(
referenceSHA256 []byte,
authEventNIDs []types.EventNID,
depth int64,
-) (types.EventNID, types.StateSnapshotNID, error) {
- var eventNID int64
- var stateNID int64
- var err error
+) (types.EventNID, error) {
+ // attempt to insert: the last_row_id is the event NID
insertStmt := common.TxStmt(txn, s.insertEventStmt)
- resultStmt := common.TxStmt(txn, s.insertEventResultStmt)
- if _, err = insertStmt.ExecContext(
+ result, err := insertStmt.ExecContext(
ctx, int64(roomNID), int64(eventTypeNID), int64(eventStateKeyNID),
eventID, referenceSHA256, eventNIDsAsArray(authEventNIDs), depth,
- ); err == nil {
- err = resultStmt.QueryRowContext(ctx).Scan(&eventNID, &stateNID)
+ )
+ if err != nil {
+ return 0, err
}
- return types.EventNID(eventNID), types.StateSnapshotNID(stateNID), err
+ modified, err := result.RowsAffected()
+ if modified == 0 && err == nil {
+ return 0, sql.ErrNoRows
+ }
+ eventNID, err := result.LastInsertId()
+ return types.EventNID(eventNID), err
}
func (s *eventStatements) selectEvent(
diff --git a/roomserver/storage/sqlite3/storage.go b/roomserver/storage/sqlite3/storage.go
index 5df9c4e0..b6e846df 100644
--- a/roomserver/storage/sqlite3/storage.go
+++ b/roomserver/storage/sqlite3/storage.go
@@ -124,7 +124,7 @@ func (d *Database) StoreEvent(
}
}
- if eventNID, stateNID, err = d.statements.insertEvent(
+ if eventNID, err = d.statements.insertEvent(
ctx,
txn,
roomNID,