diff --git a/userapi/storage/postgres/cross_signing_keys_table.go b/userapi/storage/postgres/cross_signing_keys_table.go index 70592cf6..61b15b88 100644 --- a/userapi/storage/postgres/cross_signing_keys_table.go +++ b/userapi/storage/postgres/cross_signing_keys_table.go @@ -12,6 +12,8 @@ import ( "fmt" "time" + "github.com/element-hq/dendrite/userapi/storage/postgres/deltas" + "github.com/element-hq/dendrite/internal" "github.com/element-hq/dendrite/internal/sqlutil" "github.com/element-hq/dendrite/userapi/storage/tables" @@ -25,7 +27,6 @@ CREATE TABLE IF NOT EXISTS keyserver_cross_signing_keys ( user_id TEXT NOT NULL, key_type SMALLINT NOT NULL, key_data TEXT NOT NULL, - updatable_without_uia_before_ms BIGINT DEFAULT NULL, PRIMARY KEY (user_id, key_type) ); ` @@ -64,6 +65,17 @@ func NewPostgresCrossSigningKeysTable(db *sql.DB) (tables.CrossSigningKeys, erro if err != nil { return nil, err } + m := sqlutil.NewMigrator(db) + m.AddMigrations( + sqlutil.Migration{ + Version: "userapi: add x-signing updatable_without_uia_before_ms", + Up: deltas.UpAddXSigningUpdatableWithoutUIABeforeMs, + }, + ) + err = m.Up(context.Background()) + if err != nil { + return nil, err + } return s, sqlutil.StatementList{ {&s.selectCrossSigningKeysForUserStmt, selectCrossSigningKeysForUserSQL}, {&s.selectCrossSigningKeysForUserAndKeyTypeStmt, selectCrossSigningKeysForUserAndKeyTypeSQL}, diff --git a/userapi/storage/postgres/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go b/userapi/storage/postgres/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go new file mode 100644 index 00000000..11f32aec --- /dev/null +++ b/userapi/storage/postgres/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go @@ -0,0 +1,23 @@ +package deltas + +import ( + "context" + "database/sql" + "fmt" +) + +func UpAddXSigningUpdatableWithoutUIABeforeMs(ctx context.Context, tx *sql.Tx) error { + _, err := tx.ExecContext(ctx, `ALTER TABLE keyserver_cross_signing_keys ADD COLUMN IF NOT EXISTS updatable_without_uia_before_ms BIGINT DEFAULT NULL;`) + if err != nil { + return fmt.Errorf("failed to execute upgrade: %w", err) + } + return nil +} + +func DownAddXSigningUpdatableWithoutUIABeforeMs(ctx context.Context, tx *sql.Tx) error { + _, err := tx.ExecContext(ctx, `ALTER TABLE keyserver_cross_signing_keys DROP COLUMN IF EXISTS updatable_without_uia_before_ms;`) + if err != nil { + return fmt.Errorf("failed to execute downgrade: %w", err) + } + return nil +} diff --git a/userapi/storage/sqlite3/cross_signing_keys_table.go b/userapi/storage/sqlite3/cross_signing_keys_table.go index b86bfdf0..19f9b6c1 100644 --- a/userapi/storage/sqlite3/cross_signing_keys_table.go +++ b/userapi/storage/sqlite3/cross_signing_keys_table.go @@ -12,6 +12,8 @@ import ( "fmt" "time" + "github.com/element-hq/dendrite/userapi/storage/sqlite3/deltas" + "github.com/element-hq/dendrite/internal" "github.com/element-hq/dendrite/internal/sqlutil" "github.com/element-hq/dendrite/userapi/storage/tables" @@ -25,7 +27,6 @@ CREATE TABLE IF NOT EXISTS keyserver_cross_signing_keys ( user_id TEXT NOT NULL, key_type INTEGER NOT NULL, key_data TEXT NOT NULL, - updatable_without_uia_before_ms BIGINT DEFAULT NULL, PRIMARY KEY (user_id, key_type) ); ` @@ -63,6 +64,17 @@ func NewSqliteCrossSigningKeysTable(db *sql.DB) (tables.CrossSigningKeys, error) if err != nil { return nil, err } + m := sqlutil.NewMigrator(db) + m.AddMigrations( + sqlutil.Migration{ + Version: "userapi: add x-signing updatable_without_uia_before_ms", + Up: deltas.UpAddXSigningUpdatableWithoutUIABeforeMs, + }, + ) + err = m.Up(context.Background()) + if err != nil { + return nil, err + } return s, sqlutil.StatementList{ {&s.selectCrossSigningKeysForUserStmt, selectCrossSigningKeysForUserSQL}, {&s.selectCrossSigningKeysForUserAndKeyTypeStmt, selectCrossSigningKeysForUserAndKeyTypeSQL}, diff --git a/userapi/storage/sqlite3/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go b/userapi/storage/sqlite3/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go new file mode 100644 index 00000000..2935509a --- /dev/null +++ b/userapi/storage/sqlite3/deltas/2025011001110000_add_xsigning_updatable_without_uia_before_ms.go @@ -0,0 +1,23 @@ +package deltas + +import ( + "context" + "database/sql" + "fmt" +) + +func UpAddXSigningUpdatableWithoutUIABeforeMs(ctx context.Context, tx *sql.Tx) error { + _, err := tx.ExecContext(ctx, `ALTER TABLE keyserver_cross_signing_keys ADD COLUMN updatable_without_uia_before_ms BIGINT DEFAULT NULL;`) + if err != nil { + return fmt.Errorf("failed to execute upgrade: %w", err) + } + return nil +} + +func DownAddXSigningUpdatableWithoutUIABeforeMs(ctx context.Context, tx *sql.Tx) error { + _, err := tx.ExecContext(ctx, `ALTER TABLE keyserver_cross_signing_keys DROP COLUMN updatable_without_uia_before_ms;`) + if err != nil { + return fmt.Errorf("failed to execute downgrade: %w", err) + } + return nil +}