diff options
author | Alexander Batischev <eual.jp@gmail.com> | 2021-04-26 13:41:58 +0300 |
---|---|---|
committer | Alexander Batischev <eual.jp@gmail.com> | 2021-04-26 22:52:02 +0300 |
commit | 4ae0960619537234d5591b40d05f91b131330618 (patch) | |
tree | 314e48f95e781e0e3b65dab7467e2fed4afafa47 /src/generation.rs | |
parent | 7176a544757eacc2823f1c0f014861ad2525e6da (diff) | |
download | obnam2-4ae0960619537234d5591b40d05f91b131330618.tar.gz |
Port chunkids() to the iterator API
Diffstat (limited to 'src/generation.rs')
-rw-r--r-- | src/generation.rs | 27 |
1 files changed, 17 insertions, 10 deletions
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( |