Skip to content

Commit b094632

Browse files
committed
graph: fix get_entities_for_range bug which didn't return all entity types
1 parent 70f1712 commit b094632

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

graph/src/blockchain/block_stream.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::components::store::{BlockNumber, DeploymentLocator, WritableStore};
2121
use crate::data::subgraph::UnifiedMappingApiVersion;
2222
use crate::firehose::{self, FirehoseEndpoint};
2323
use crate::futures03::stream::StreamExt as _;
24-
use crate::schema::{EntityType, InputSchema};
24+
use crate::schema::InputSchema;
2525
use crate::substreams_rpc::response::Message;
2626
use crate::{prelude::*, prometheus::labels};
2727

@@ -433,18 +433,22 @@ async fn get_entities_for_range(
433433
from: BlockNumber,
434434
to: BlockNumber,
435435
) -> Result<BTreeMap<BlockNumber, Vec<Entity>>, Error> {
436-
let entity_types: Vec<EntityType> = filter
437-
.entities
438-
.iter()
439-
.map(|e| schema.entity_type(e).unwrap())
440-
.collect();
441-
let mut entities = BTreeMap::new();
442-
for entity_type in entity_types {
443-
let range = from..to;
444-
let mut entities_for_type = store.get_range(&entity_type, range)?;
445-
entities.append(&mut entities_for_type);
436+
let mut entities_by_block = BTreeMap::new();
437+
438+
for entity_name in &filter.entities {
439+
let entity_type = schema.entity_type(entity_name)?;
440+
441+
let entity_ranges = store.get_range(&entity_type, from..to)?;
442+
443+
for (block_number, mut entity_vec) in entity_ranges {
444+
entities_by_block
445+
.entry(block_number)
446+
.and_modify(|existing_vec: &mut Vec<Entity>| existing_vec.append(&mut entity_vec))
447+
.or_insert(entity_vec);
448+
}
446449
}
447-
Ok(entities)
450+
451+
Ok(entities_by_block)
448452
}
449453

450454
impl<C: Blockchain> TriggersAdapterWrapper<C> {

0 commit comments

Comments
 (0)