crypto: More transactions in the sqlite store.
This commit is contained in:
parent
fc54c63a4c
commit
b5560d3cb6
1 changed files with 23 additions and 9 deletions
|
@ -754,11 +754,13 @@ impl SqliteStore {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
async fn save_device_helper(&self, device: ReadOnlyDevice) -> Result<()> {
|
||||
async fn save_device_helper(
|
||||
&self,
|
||||
connection: &mut SqliteConnection,
|
||||
device: ReadOnlyDevice,
|
||||
) -> Result<()> {
|
||||
let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?;
|
||||
|
||||
let mut connection = self.connection.lock().await;
|
||||
|
||||
query(
|
||||
"INSERT INTO devices (
|
||||
account_id, user_id, device_id,
|
||||
|
@ -1107,11 +1109,13 @@ impl SqliteStore {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
async fn save_user_helper(&self, user: &UserIdentities) -> Result<()> {
|
||||
async fn save_user_helper(
|
||||
&self,
|
||||
mut connection: &mut SqliteConnection,
|
||||
user: &UserIdentities,
|
||||
) -> Result<()> {
|
||||
let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?;
|
||||
|
||||
let mut connection = self.connection.lock().await;
|
||||
|
||||
query("REPLACE INTO users (account_id, user_id) VALUES (?1, ?2)")
|
||||
.bind(account_id)
|
||||
.bind(user.user_id().as_str())
|
||||
|
@ -1347,12 +1351,17 @@ impl CryptoStore for SqliteStore {
|
|||
}
|
||||
|
||||
async fn save_devices(&self, devices: &[ReadOnlyDevice]) -> Result<()> {
|
||||
// TODO turn this into a bulk transaction.
|
||||
let mut connection = self.connection.lock().await;
|
||||
let mut transaction = connection.begin().await?;
|
||||
|
||||
for device in devices {
|
||||
self.devices.add(device.clone());
|
||||
self.save_device_helper(device.clone()).await?
|
||||
self.save_device_helper(&mut transaction, device.clone())
|
||||
.await?
|
||||
}
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -1391,10 +1400,15 @@ impl CryptoStore for SqliteStore {
|
|||
}
|
||||
|
||||
async fn save_user_identities(&self, users: &[UserIdentities]) -> Result<()> {
|
||||
let mut connection = self.connection.lock().await;
|
||||
let mut transaction = connection.begin().await?;
|
||||
|
||||
for user in users {
|
||||
self.save_user_helper(user).await?;
|
||||
self.save_user_helper(&mut transaction, user).await?;
|
||||
}
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue