aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage/postgres
diff options
context:
space:
mode:
Diffstat (limited to 'roomserver/storage/postgres')
-rw-r--r--roomserver/storage/postgres/rooms_table.go19
-rw-r--r--roomserver/storage/postgres/storage.go8
2 files changed, 26 insertions, 1 deletions
diff --git a/roomserver/storage/postgres/rooms_table.go b/roomserver/storage/postgres/rooms_table.go
index ccc201b1..edd15a33 100644
--- a/roomserver/storage/postgres/rooms_table.go
+++ b/roomserver/storage/postgres/rooms_table.go
@@ -39,7 +39,10 @@ CREATE TABLE IF NOT EXISTS roomserver_rooms (
last_event_sent_nid BIGINT NOT NULL DEFAULT 0,
-- The state of the room after the current set of latest events.
-- This will be 0 if there are no latest events in the room.
- state_snapshot_nid BIGINT NOT NULL DEFAULT 0
+ state_snapshot_nid BIGINT NOT NULL DEFAULT 0,
+ -- The version of the room, which will assist in determining the state resolution
+ -- algorithm, event ID format, etc.
+ room_version BIGINT NOT NULL DEFAULT 1
);
`
@@ -61,12 +64,16 @@ const selectLatestEventNIDsForUpdateSQL = "" +
const updateLatestEventNIDsSQL = "" +
"UPDATE roomserver_rooms SET latest_event_nids = $2, last_event_sent_nid = $3, state_snapshot_nid = $4 WHERE room_nid = $1"
+const selectRoomVersionForRoomNIDSQL = "" +
+ "SELECT room_version FROM roomserver_rooms WHERE room_nid = $1"
+
type roomStatements struct {
insertRoomNIDStmt *sql.Stmt
selectRoomNIDStmt *sql.Stmt
selectLatestEventNIDsStmt *sql.Stmt
selectLatestEventNIDsForUpdateStmt *sql.Stmt
updateLatestEventNIDsStmt *sql.Stmt
+ selectRoomVersionForRoomNIDStmt *sql.Stmt
}
func (s *roomStatements) prepare(db *sql.DB) (err error) {
@@ -80,6 +87,7 @@ func (s *roomStatements) prepare(db *sql.DB) (err error) {
{&s.selectLatestEventNIDsStmt, selectLatestEventNIDsSQL},
{&s.selectLatestEventNIDsForUpdateStmt, selectLatestEventNIDsForUpdateSQL},
{&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL},
+ {&s.selectRoomVersionForRoomNIDStmt, selectRoomVersionForRoomNIDSQL},
}.prepare(db)
}
@@ -154,3 +162,12 @@ func (s *roomStatements) updateLatestEventNIDs(
)
return err
}
+
+func (s *roomStatements) selectRoomVersionForRoomNID(
+ ctx context.Context, txn *sql.Tx, roomNID types.RoomNID,
+) (int64, error) {
+ var roomVersion int64
+ stmt := common.TxStmt(txn, s.selectRoomVersionForRoomNIDStmt)
+ err := stmt.QueryRowContext(ctx, roomNID).Scan(&roomVersion)
+ return roomVersion, err
+}
diff --git a/roomserver/storage/postgres/storage.go b/roomserver/storage/postgres/storage.go
index 93450e5a..77a792d6 100644
--- a/roomserver/storage/postgres/storage.go
+++ b/roomserver/storage/postgres/storage.go
@@ -697,6 +697,14 @@ func (d *Database) EventsFromIDs(ctx context.Context, eventIDs []string) ([]type
return d.Events(ctx, nids)
}
+func (d *Database) GetRoomVersionForRoom(
+ ctx context.Context, roomNID types.RoomNID,
+) (int64, error) {
+ return d.statements.selectRoomVersionForRoomNID(
+ ctx, nil, roomNID,
+ )
+}
+
type transaction struct {
ctx context.Context
txn *sql.Tx