diff --git a/crates/matrix-sdk-sqlite/migrations/state_store/013_send_queue_new_parent_key_format.sql b/crates/matrix-sdk-sqlite/migrations/state_store/013_send_queue_new_parent_key_format.sql new file mode 100644 index 000000000..888454079 --- /dev/null +++ b/crates/matrix-sdk-sqlite/migrations/state_store/013_send_queue_new_parent_key_format.sql @@ -0,0 +1,6 @@ +-- Delete all previous entries in the dependent send queue table, because the +-- format of `parent_key` has changed. +DELETE FROM "dependent_send_queue_events"; + +--- Delete all previous entries in the send queue too. +DELETE FROM "send_queue_events"; diff --git a/crates/matrix-sdk-sqlite/src/state_store.rs b/crates/matrix-sdk-sqlite/src/state_store.rs index b8f8407c5..8f9689b15 100644 --- a/crates/matrix-sdk-sqlite/src/state_store.rs +++ b/crates/matrix-sdk-sqlite/src/state_store.rs @@ -403,6 +403,17 @@ impl SqliteStateStore { .await?; } + if from < 15 && to >= 15 { + conn.with_transaction(move |txn| { + // Run the migration. + txn.execute_batch(include_str!( + "../migrations/state_store/013_send_queue_new_parent_key_format.sql" + ))?; + txn.set_db_version(15) + }) + .await?; + } + Ok(()) } @@ -2093,7 +2104,7 @@ impl StateStore for SqliteStateStore { parent_key: SentRequestKey, ) -> Result { let room_id = self.encode_key(keys::DEPENDENTS_SEND_QUEUE, room_id); - let parent_key = self.serialize_value(&parent_key)?; + let parent_key = self.serialize_json(&parent_key)?; // See comment in `save_send_queue_request`. let parent_txn_id = parent_txn_id.to_string(); @@ -2164,7 +2175,7 @@ impl StateStore for SqliteStateStore { dependent_events.push(DependentQueuedRequest { own_transaction_id: entry.0.into(), parent_transaction_id: entry.1.into(), - parent_key: entry.2.map(|bytes| self.deserialize_value(&bytes)).transpose()?, + parent_key: entry.2.map(|json| self.deserialize_json(&json)).transpose()?, kind: self.deserialize_json(&entry.3)?, created_at, });