|
|
|
|
@ -201,6 +201,21 @@ impl Tree for SqliteTable {
@@ -201,6 +201,21 @@ impl Tree for SqliteTable {
|
|
|
|
|
Ok(()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[tracing::instrument(skip(self, iter))] |
|
|
|
|
fn insert_batch<'a>(&self, iter: &mut dyn Iterator<Item = (Vec<u8>, Vec<u8>)>) -> Result<()> { |
|
|
|
|
let guard = self.engine.write_lock(); |
|
|
|
|
|
|
|
|
|
guard.execute("BEGIN", [])?; |
|
|
|
|
for (key, value) in iter { |
|
|
|
|
self.insert_with_guard(&guard, &key, &value)?; |
|
|
|
|
} |
|
|
|
|
guard.execute("COMMIT", [])?; |
|
|
|
|
|
|
|
|
|
drop(guard); |
|
|
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[tracing::instrument(skip(self, key))] |
|
|
|
|
fn remove(&self, key: &[u8]) -> Result<()> { |
|
|
|
|
let guard = self.engine.write_lock(); |
|
|
|
|
@ -228,7 +243,7 @@ impl Tree for SqliteTable {
@@ -228,7 +243,7 @@ impl Tree for SqliteTable {
|
|
|
|
|
|
|
|
|
|
let statement = Box::leak(Box::new( |
|
|
|
|
guard |
|
|
|
|
.prepare(&format!("SELECT key, value FROM {}", &self.name)) |
|
|
|
|
.prepare(&format!("SELECT key, value FROM {} ORDER BY key ASC", &self.name)) |
|
|
|
|
.unwrap(), |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
|