Skip to content

Commit ffd2c3d

Browse files
committed
graph: fix get_entities_for_range bug which didn't return all entity types
1 parent 0b716c8 commit ffd2c3d

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, SourceableStore};
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

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

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

0 commit comments

Comments
 (0)