Skip to content

Commit c9e59af

Browse files
pietroalbiniJoshua Nelson
authored and
Joshua Nelson
committed
storage: remove Option in DatabaseStorageTransaction
1 parent 5d15d41 commit c9e59af

File tree

4 files changed

+9
-17
lines changed

4 files changed

+9
-17
lines changed

Diff for: src/storage/database.rs

+6-14
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,20 @@ impl DatabaseConnection {
7979
&self,
8080
) -> Result<DatabaseStorageTransaction<'_>, Error> {
8181
Ok(DatabaseStorageTransaction {
82-
transaction: Some(self.conn.transaction()?),
82+
transaction: self.conn.transaction()?,
8383
})
8484
}
8585
}
8686

8787
pub(super) struct DatabaseStorageTransaction<'a> {
88-
transaction: Option<Transaction<'a>>,
88+
transaction: Transaction<'a>,
8989
}
9090

9191
impl<'a> StorageTransaction for DatabaseStorageTransaction<'a> {
9292
fn store_batch(&mut self, batch: &[Blob]) -> Result<(), Error> {
93-
let transaction = self
94-
.transaction
95-
.as_ref()
96-
.expect("called complete() before store_batch()");
97-
9893
for blob in batch {
9994
let compression = blob.compression.map(|alg| alg as i32);
100-
transaction.query(
95+
self.transaction.query(
10196
"INSERT INTO files (path, mime, content, compression)
10297
VALUES ($1, $2, $3, $4)
10398
ON CONFLICT (path) DO UPDATE
@@ -108,11 +103,8 @@ impl<'a> StorageTransaction for DatabaseStorageTransaction<'a> {
108103
Ok(())
109104
}
110105

111-
fn complete(&mut self) -> Result<(), Error> {
112-
self.transaction
113-
.take()
114-
.expect("called complete() multiple times")
115-
.commit()?;
106+
fn complete(self: Box<Self>) -> Result<(), Error> {
107+
self.transaction.commit()?;
116108
Ok(())
117109
}
118110
}
@@ -193,7 +185,7 @@ mod tests {
193185
};
194186

195187
let conn = backend.start_connection()?;
196-
let mut transaction = conn.start_storage_transaction()?;
188+
let mut transaction = Box::new(conn.start_storage_transaction()?);
197189
transaction.store_batch(std::slice::from_ref(&small_blob))?;
198190
transaction.store_batch(std::slice::from_ref(&big_blob))?;
199191
transaction.complete()?;

Diff for: src/storage/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ impl std::fmt::Debug for Storage {
226226

227227
trait StorageTransaction {
228228
fn store_batch(&mut self, batch: &[Blob]) -> Result<(), Error>;
229-
fn complete(&mut self) -> Result<(), Error>;
229+
fn complete(self: Box<Self>) -> Result<(), Error>;
230230
}
231231

232232
// public for benchmarking

Diff for: src/storage/s3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ impl<'a> StorageTransaction for S3StorageTransaction<'a> {
115115
Ok(())
116116
}
117117

118-
fn complete(&mut self) -> Result<(), Error> {
118+
fn complete(self: Box<Self>) -> Result<(), Error> {
119119
Ok(())
120120
}
121121
}

Diff for: src/storage/s3/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl TestS3 {
2525
}
2626
pub(crate) fn upload(&self, blobs: &[Blob]) -> Result<(), Error> {
2727
let s3 = self.0.borrow();
28-
let mut transaction = s3.start_storage_transaction()?;
28+
let mut transaction = Box::new(s3.start_storage_transaction()?);
2929
transaction.store_batch(blobs)?;
3030
transaction.complete()?;
3131
Ok(())

0 commit comments

Comments
 (0)