summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Batischev <eual.jp@gmail.com>2021-04-26 13:41:58 +0300
committerAlexander Batischev <eual.jp@gmail.com>2021-04-26 22:52:02 +0300
commit4ae0960619537234d5591b40d05f91b131330618 (patch)
tree314e48f95e781e0e3b65dab7467e2fed4afafa47
parent7176a544757eacc2823f1c0f014861ad2525e6da (diff)
downloadobnam2-4ae0960619537234d5591b40d05f91b131330618.tar.gz
Port chunkids() to the iterator API
-rw-r--r--src/backup_run.rs6
-rw-r--r--src/cmd/restore.rs3
-rw-r--r--src/generation.rs27
3 files changed, 24 insertions, 12 deletions
diff --git a/src/backup_run.rs b/src/backup_run.rs
index e966855..23c97f6 100644
--- a/src/backup_run.rs
+++ b/src/backup_run.rs
@@ -149,7 +149,11 @@ impl<'a> IncrementalBackup<'a> {
Reason::Unchanged | Reason::Skipped | Reason::FileError => {
let fileno = old.get_fileno(&entry.pathbuf())?;
let ids = if let Some(fileno) = fileno {
- old.chunkids(fileno)?
+ let mut ids = vec![];
+ for id in old.chunkids(fileno)?.iter()? {
+ ids.push(id?);
+ }
+ ids
} else {
vec![]
};
diff --git a/src/cmd/restore.rs b/src/cmd/restore.rs
index 91045f1..4de0830 100644
--- a/src/cmd/restore.rs
+++ b/src/cmd/restore.rs
@@ -172,7 +172,8 @@ fn restore_regular(
std::fs::create_dir_all(parent)?;
{
let mut file = std::fs::File::create(path)?;
- for chunkid in gen.chunkids(fileid)? {
+ for chunkid in gen.chunkids(fileid)?.iter()? {
+ let chunkid = chunkid?;
let chunk = client.fetch_chunk(&chunkid)?;
file.write_all(chunk.data())?;
}
diff --git a/src/generation.rs b/src/generation.rs
index 54c55a7..0055bfe 100644
--- a/src/generation.rs
+++ b/src/generation.rs
@@ -200,7 +200,7 @@ impl LocalGeneration {
sql::files(&self.conn)
}
- pub fn chunkids(&self, fileno: FileId) -> LocalGenerationResult<Vec<ChunkId>> {
+ pub fn chunkids(&self, fileno: FileId) -> LocalGenerationResult<sql::SqlResults<ChunkId>> {
sql::chunkids(&self.conn, fileno)
}
@@ -359,15 +359,22 @@ mod sql {
)
}
- pub fn chunkids(conn: &Connection, fileno: FileId) -> LocalGenerationResult<Vec<ChunkId>> {
- let mut stmt = conn.prepare("SELECT chunkid FROM chunks WHERE fileno = ?1")?;
- let iter = stmt.query_map(params![fileno], |row| row.get(0))?;
- let mut ids: Vec<ChunkId> = vec![];
- for x in iter {
- let fileno: String = x?;
- ids.push(ChunkId::from(&fileno));
- }
- Ok(ids)
+ pub fn chunkids(
+ conn: &Connection,
+ fileno: FileId,
+ ) -> LocalGenerationResult<SqlResults<ChunkId>> {
+ SqlResults::new(
+ conn,
+ "SELECT chunkid FROM chunks WHERE fileno = ?1",
+ Box::new(move |stmt| {
+ let iter = stmt.query_map(params![fileno], |row| row.get(0))?;
+ let iter = iter.map(|x| {
+ let fileno: String = x?;
+ Ok(ChunkId::from(&fileno))
+ });
+ Ok(Box::new(iter))
+ }),
+ )
}
pub fn get_file(