From b4363bff9dfc160c05328d8903e2454bcdef8757 Mon Sep 17 00:00:00 2001 From: David Lutterkort Date: Thu, 13 Apr 2023 15:27:01 -0700 Subject: [PATCH] graph, store: Do not panic in Entity::try_make on uninterned keys --- graph/src/data/store/mod.rs | 7 ++++--- graph/src/schema/input_schema.rs | 8 +++++++- store/postgres/src/relational_queries.rs | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/graph/src/data/store/mod.rs b/graph/src/data/store/mod.rs index 0018ac55ea4..cdf3c5e0824 100644 --- a/graph/src/data/store/mod.rs +++ b/graph/src/data/store/mod.rs @@ -725,14 +725,15 @@ impl Entity { Ok(Entity(obj)) } - pub fn try_make>( + pub fn try_make>( pool: Arc, iter: I, - ) -> Result { + ) -> Result { let mut obj = Object::new(pool); for pair in iter { let (key, value) = pair?; - obj.insert(key, value).expect("key is in AtomPool"); + obj.insert(key, value) + .map_err(|e| anyhow!("unknown attribute {}", e.not_interned()))?; } Ok(Entity(obj)) } diff --git a/graph/src/schema/input_schema.rs b/graph/src/schema/input_schema.rs index f0b39fd438e..acc3cdc474f 100644 --- a/graph/src/schema/input_schema.rs +++ b/graph/src/schema/input_schema.rs @@ -287,7 +287,13 @@ impl Inner { Entity::make(self.pool.clone(), iter) } - pub fn try_make_entity>(&self, iter: I) -> Result { + pub fn try_make_entity< + E: std::error::Error + Send + Sync + 'static, + I: TryIntoEntityIterator, + >( + &self, + iter: I, + ) -> Result { Entity::try_make(self.pool.clone(), iter) } } diff --git a/store/postgres/src/relational_queries.rs b/store/postgres/src/relational_queries.rs index c66095a78d0..23f03e8833a 100644 --- a/store/postgres/src/relational_queries.rs +++ b/store/postgres/src/relational_queries.rs @@ -255,7 +255,7 @@ impl FromEntityData for Entity { schema: &InputSchema, iter: I, ) -> Result { - schema.try_make_entity(iter) + schema.try_make_entity(iter).map_err(StoreError::from) } }