Skip to content

Commit

Permalink
feat: iterator for select_block_headers
Browse files Browse the repository at this point in the history
  • Loading branch information
varun-doshi committed Feb 5, 2025
1 parent a5a4cdf commit 6a17bff
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 7 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
### Enhancements

- Add an optional open-telemetry trace exporter (#659).
- Taking iterator in select_block_headers (#667).

### Changes

Expand Down
8 changes: 5 additions & 3 deletions crates/store/src/db/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,12 +250,14 @@ impl Db {

/// Loads multiple block headers from the DB.
#[instrument(target = COMPONENT, skip_all, ret(level = "debug"), err)]
pub async fn select_block_headers(&self, blocks: impl Iterator<Item = BlockNumber>) -> Result<Vec<BlockHeader>> {
let block_vec: Vec<BlockNumber> = blocks.collect();
pub async fn select_block_headers(
&self,
blocks: impl Iterator<Item = BlockNumber> + Send + 'static,
) -> Result<Vec<BlockHeader>> {
self.pool
.get()
.await?
.interact(move |conn| sql::select_block_headers(conn, &block_vec))
.interact(move |conn| sql::select_block_headers(conn, blocks))
.await
.map_err(|err| {
DatabaseError::InteractError(format!(
Expand Down
6 changes: 3 additions & 3 deletions crates/store/src/db/sql/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1059,11 +1059,11 @@ pub fn select_block_header_by_block_num(
/// A vector of [`BlockHeader`] or an error.
pub fn select_block_headers(
conn: &mut Connection,
blocks: &[BlockNumber],
blocks: impl Iterator<Item = BlockNumber> + Send,
) -> Result<Vec<BlockHeader>> {
let mut headers = Vec::with_capacity(blocks.len());
let blocks: Vec<Value> = blocks.map(|b| b.as_u32().into()).collect();

let blocks: Vec<Value> = blocks.iter().copied().map(|b| b.as_u32().into()).collect();
let mut headers = Vec::with_capacity(blocks.len());
let mut stmt = conn
.prepare_cached("SELECT block_header FROM block_headers WHERE block_num IN rarray(?1);")?;
let mut rows = stmt.query(params![Rc::new(blocks)])?;
Expand Down
3 changes: 2 additions & 1 deletion crates/store/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,8 @@ impl State {
(chain_length.into(), paths)
};

let headers = self.db.select_block_headers(blocks.iter().copied()).await?;
let headers = self.db.select_block_headers(blocks.into_iter()).await?;

let headers = headers
.into_iter()
.map(|header| (header.block_num(), header))
Expand Down

0 comments on commit 6a17bff

Please sign in to comment.