Skip to content

Commit db2d1c2

Browse files
authored
Merge pull request #5 from arangodb/feature/only-populate-user-defined-fields
do not add additional not required data into columns
2 parents 1c354ec + 95f061b commit db2d1c2

File tree

2 files changed

+34
-46
lines changed

2 files changed

+34
-46
lines changed

src/graph_loader.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -218,15 +218,15 @@ impl GraphLoader {
218218
}
219219

220220
fn verify_parameters(&self) -> Result<(), GraphLoaderError> {
221-
if !self.get_all_vertices_fields_as_list().is_empty()
221+
if !self.get_all_vertices_fields_to_fetch_as_list().is_empty()
222222
&& self.load_config.load_all_vertex_attributes
223223
{
224224
return Err(GraphLoaderError::from(
225225
"load_all_vertex_attributes is set to true, but vertex collections are not empty."
226226
.to_string(),
227227
));
228228
}
229-
if !self.get_all_edges_fields_as_list().is_empty()
229+
if !self.get_all_edges_fields_to_fetch_as_list().is_empty()
230230
&& self.load_config.load_all_edge_attributes
231231
{
232232
return Err(GraphLoaderError::from(
@@ -358,7 +358,7 @@ impl GraphLoader {
358358
let (sender, mut receiver) = tokio::sync::mpsc::channel::<Bytes>(10);
359359
senders.push(sender);
360360

361-
let vertex_global_fields = self.get_all_vertices_fields_as_list();
361+
let vertex_global_fields = self.get_all_vertex_fields_as_list_to_return();
362362
let insert_vertex_clone = vertices_function.clone();
363363
let strategy_clone = self.load_strategy;
364364
let load_config_clone = self.load_config.clone();
@@ -597,7 +597,7 @@ impl GraphLoader {
597597
let (sender, mut receiver) = tokio::sync::mpsc::channel::<Bytes>(10);
598598
senders.push(sender);
599599

600-
let edge_global_fields = self.get_all_edges_fields_as_list();
600+
let edge_global_fields = self.get_all_edges_fields_as_list_to_return();
601601
let insert_edge_clone = edges_function.clone();
602602
let strategy_clone = self.load_strategy;
603603
let load_config_clone = self.load_config.clone();
@@ -859,22 +859,15 @@ impl GraphLoader {
859859
self.e_collections.keys().cloned().collect()
860860
}
861861

862-
pub fn get_all_vertices_fields_as_hashmap(&self) -> HashMap<String, Vec<String>> {
863-
self.v_collections
864-
.iter()
865-
.map(|(k, v)| (k.clone(), v.fields.clone()))
866-
.collect()
867-
}
868-
869-
pub fn get_vertex_fields_as_list(&self, collection_name: &String) -> Vec<String> {
862+
pub fn get_all_vertex_fields_as_list_to_return(&self) -> Vec<String> {
870863
let mut fields = vec![];
871-
if let Some(c) = self.v_collections.get(collection_name) {
864+
for c in self.v_collections.values() {
872865
fields.extend(c.fields.clone());
873866
}
874867
fields
875868
}
876869

877-
pub fn get_all_vertices_fields_as_list(&self) -> Vec<String> {
870+
pub fn get_all_vertices_fields_to_fetch_as_list(&self) -> Vec<String> {
878871
// Guaranteed to be unique
879872
let mut unique_fields = HashSet::new();
880873
for fields in self.v_collections.values().flat_map(|c| c.fields.clone()) {
@@ -891,7 +884,15 @@ impl GraphLoader {
891884
unique_fields.into_iter().collect()
892885
}
893886

894-
pub fn get_all_edges_fields_as_list(&self) -> Vec<String> {
887+
pub fn get_all_edges_fields_as_list_to_return(&self) -> Vec<String> {
888+
let mut fields = vec![];
889+
for c in self.e_collections.values() {
890+
fields.extend(c.fields.clone());
891+
}
892+
fields
893+
}
894+
895+
pub fn get_all_edges_fields_to_fetch_as_list(&self) -> Vec<String> {
895896
// Guaranteed to be unique
896897
let mut unique_fields = HashSet::new();
897898
for fields in self.e_collections.values().flat_map(|c| c.fields.clone()) {
@@ -910,17 +911,10 @@ impl GraphLoader {
910911
unique_fields.into_iter().collect()
911912
}
912913

913-
pub fn get_all_edges_fields_as_hashmap(&self) -> HashMap<String, Vec<String>> {
914-
self.e_collections
915-
.iter()
916-
.map(|(k, v)| (k.clone(), v.fields.clone()))
917-
.collect()
918-
}
919-
920914
pub fn produce_vertex_projections(&self) -> Option<HashMap<String, Vec<String>>> {
921915
assert!(self.supports_projections.unwrap());
922916
let mut potential_vertex_projections: Option<HashMap<String, Vec<String>>> = None;
923-
let vertex_global_fields = self.get_all_vertices_fields_as_list();
917+
let vertex_global_fields = self.get_all_vertices_fields_to_fetch_as_list();
924918

925919
// We can only make use of projections in case:
926920
// 1.) The user has not requested all vertex attributes
@@ -941,7 +935,7 @@ impl GraphLoader {
941935
pub fn produce_edge_projections(&self) -> Option<HashMap<String, Vec<String>>> {
942936
assert!(self.supports_projections.unwrap());
943937
let mut potential_edge_projections: Option<HashMap<String, Vec<String>>> = None;
944-
let edge_global_fields = self.get_all_edges_fields_as_list();
938+
let edge_global_fields = self.get_all_edges_fields_to_fetch_as_list();
945939

946940
// We can only make use of projections in case:
947941
// 1.) The user has not requested all vertex attributes

tests/graph_loader.rs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -206,25 +206,20 @@ async fn init_named_graph_loader_with_data() {
206206

207207
// check that data is loaded.
208208
// in this case, no global vertex attributes have been requested
209-
// therefore only the _key attribute is loaded for vertex documents
209+
// therefore only the _id attribute is loaded for vertex documents
210210
let graph_loader = graph_loader_res.unwrap();
211211
let handle_vertices = move |vertex_ids: &Vec<Vec<u8>>,
212212
columns: &mut Vec<Vec<Value>>,
213213
vertex_field_names: &Vec<String>| {
214214
assert_eq!(vertex_ids.len(), 10);
215215

216216
assert_eq!(columns.len(), 10);
217-
for (v_index, vertex) in columns.iter().enumerate() {
218-
assert_eq!(vertex.len(), 1);
217+
for (_v_index, vertex) in columns.iter().enumerate() {
218+
assert_eq!(vertex.len(), 0);
219219
assert_eq!(vertex.len(), vertex_field_names.len());
220-
let element_0 = &vertex[0];
221-
let id = element_0.as_str().unwrap();
222-
let expected_id = format!("{}/{}", VERTEX_COLLECTION, v_index);
223-
assert_eq!(id.to_string(), expected_id);
224220
}
225221

226-
assert_eq!(vertex_field_names.len(), 1);
227-
assert_eq!(vertex_field_names[0], "_id");
222+
assert_eq!(vertex_field_names.len(), 0);
228223
Ok(())
229224
};
230225
let vertices_result = graph_loader.do_vertices(handle_vertices).await;
@@ -236,23 +231,22 @@ async fn init_named_graph_loader_with_data() {
236231
edge_field_names: &Vec<String>| {
237232
assert_eq!(from_ids.len(), 9);
238233
assert_eq!(from_ids.len(), to_ids.len());
234+
assert_eq!(to_ids.len(), 9);
235+
assert_eq!(to_ids.len(), columns.len());
239236
assert_eq!(columns.len(), 9);
240237

241-
for (v_index, edge) in columns.iter().enumerate() {
242-
assert_eq!(edge.len(), 2);
243-
assert_eq!(edge.len(), edge_field_names.len());
244-
let element_0 = &edge[0];
245-
let from_id = element_0.as_str().unwrap();
246-
let to_id = &edge[1].as_str().unwrap();
247-
let expected_from_id = format!("{}/{}", VERTEX_COLLECTION, v_index);
248-
let expected_to_id = format!("{}/{}", VERTEX_COLLECTION, v_index + 1);
249-
assert_eq!(from_id.to_string(), expected_from_id);
250-
assert_eq!(to_id.to_string(), expected_to_id);
238+
for (from_idx, from_id) in from_ids.iter().enumerate() {
239+
let from_id_str = from_id.iter().map(|x| *x as char).collect::<String>();
240+
let expected_from_id = format!("{}/{}", VERTEX_COLLECTION, from_idx);
241+
assert_eq!(from_id_str, expected_from_id);
242+
}
243+
for (to_idx, to_id) in to_ids.iter().enumerate() {
244+
let to_id_str = to_id.iter().map(|x| *x as char).collect::<String>();
245+
let expected_to_id = format!("{}/{}", VERTEX_COLLECTION, to_idx + 1);
246+
assert_eq!(to_id_str, expected_to_id);
251247
}
252248

253-
assert_eq!(edge_field_names.len(), 2);
254-
assert_eq!(edge_field_names[0], "_from");
255-
assert_eq!(edge_field_names[1], "_to");
249+
assert_eq!(edge_field_names.len(), 0);
256250
Ok(())
257251
};
258252
let edges_result = graph_loader.do_edges(handle_edges).await;

0 commit comments

Comments
 (0)