Skip to content

Commit 97f11d5

Browse files
committed
store: Abstract execute_query over FromEntityData
1 parent 3375cbb commit 97f11d5

File tree

4 files changed

+15
-12
lines changed

4 files changed

+15
-12
lines changed

store/postgres/src/entities.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -452,15 +452,15 @@ impl Connection<'_> {
452452
}
453453
}
454454

455-
pub(crate) fn query(
455+
pub(crate) fn query<T: crate::relational_queries::FromEntityData>(
456456
&self,
457457
logger: &Logger,
458458
collection: EntityCollection,
459459
filter: Option<EntityFilter>,
460460
order: EntityOrder,
461461
range: EntityRange,
462462
block: BlockNumber,
463-
) -> Result<Vec<Entity>, QueryExecutionError> {
463+
) -> Result<Vec<T>, QueryExecutionError> {
464464
match &*self.storage {
465465
Storage::Json(json) => {
466466
// JSON storage can only query at the latest block
@@ -983,14 +983,14 @@ impl JsonStorage {
983983
}
984984

985985
/// order is a tuple (attribute, value_type, direction)
986-
fn query(
986+
fn query<T: From<Entity>>(
987987
&self,
988988
conn: &PgConnection,
989989
collection: EntityCollection,
990990
filter: Option<EntityFilter>,
991991
order: Option<(String, ValueType, &'static str)>,
992992
range: EntityRange,
993-
) -> Result<Vec<Entity>, QueryExecutionError> {
993+
) -> Result<Vec<T>, QueryExecutionError> {
994994
let query = FilterQuery::new(&self.table, collection, filter, order, range)?;
995995

996996
let query_debug_info = debug_query(&query).to_string();
@@ -1006,7 +1006,9 @@ impl JsonStorage {
10061006
values
10071007
.into_iter()
10081008
.map(|(_, value, entity_type)| {
1009-
entity_from_json(value, &entity_type).map_err(QueryExecutionError::from)
1009+
entity_from_json(value, &entity_type)
1010+
.map(T::from)
1011+
.map_err(QueryExecutionError::from)
10101012
})
10111013
.collect()
10121014
}

store/postgres/src/relational.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ impl Layout {
564564
}
565565

566566
/// order is a tuple (attribute, value_type, direction)
567-
pub fn query(
567+
pub fn query<T: crate::relational_queries::FromEntityData>(
568568
&self,
569569
logger: &Logger,
570570
conn: &PgConnection,
@@ -573,7 +573,7 @@ impl Layout {
573573
order: EntityOrder,
574574
range: EntityRange,
575575
block: BlockNumber,
576-
) -> Result<Vec<Entity>, QueryExecutionError> {
576+
) -> Result<Vec<T>, QueryExecutionError> {
577577
fn log_query_timing(
578578
logger: &Logger,
579579
query: &FilterQuery,

store/postgres/src/relational_queries.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ impl ForeignKeyClauses for Column {
171171
}
172172
}
173173

174-
pub trait FromEntityData: Default {
174+
pub trait FromEntityData: Default + From<Entity> {
175175
type Value: FromColumnValue;
176176

177177
fn insert_entity_data(&mut self, key: String, v: Self::Value);

store/postgres/src/store.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ use crate::entities as e;
4141
use crate::functions::{attempt_chain_head_update, lookup_ancestor_block};
4242
use crate::history_event::HistoryEvent;
4343
use crate::metadata;
44+
use crate::relational_queries::FromEntityData;
4445
use crate::store_events::SubscriptionManager;
4546

4647
// TODO: Integrate with https://github.com/graphprotocol/graph-node/pull/1522/files
@@ -314,11 +315,11 @@ impl Store {
314315
})
315316
}
316317

317-
fn execute_query(
318+
fn execute_query<T: FromEntityData>(
318319
&self,
319320
conn: &e::Connection,
320321
query: EntityQuery,
321-
) -> Result<Vec<Entity>, QueryExecutionError> {
322+
) -> Result<Vec<T>, QueryExecutionError> {
322323
// Process results; deserialize JSON data
323324
let logger = query.logger.unwrap_or(self.logger.clone());
324325
conn.query(
@@ -464,7 +465,7 @@ impl Store {
464465
entity_ids: mut expected_entity_ids,
465466
} => {
466467
// Execute query
467-
let actual_entities = self.execute_query(conn, query.clone()).map_err(|e| {
468+
self.execute_query::<Entity>(conn, query.clone())
468469
format_err!(
469470
"AbortUnless ({}): query execution error: {:?}, {}",
470471
description,
@@ -934,7 +935,7 @@ impl StoreTrait for Store {
934935
}
935936

936937
let entities = conn
937-
.query(
938+
.query::<Entity>(
938939
&logger,
939940
EntityCollection::All(vec![POI_OBJECT.to_owned()]),
940941
None,

0 commit comments

Comments
 (0)