(
include_property_history: bool,
convert_datetime: bool,
explode: bool,
column_names: &Vec<String>,
is_prop_both_temp_and_const: &HashSet<String>,
properties: &Properties<P>,
| 11 | use std::collections::{HashMap, HashSet}; |
| 12 | |
| 13 | pub(crate) fn extract_properties<P>( |
| 14 | include_property_history: bool, |
| 15 | convert_datetime: bool, |
| 16 | explode: bool, |
| 17 | column_names: &Vec<String>, |
| 18 | is_prop_both_temp_and_const: &HashSet<String>, |
| 19 | properties: &Properties<P>, |
| 20 | metadata: &Metadata<P>, |
| 21 | properties_map: &mut HashMap<String, Prop>, |
| 22 | prop_time_dict: &mut HashMap<i64, HashMap<String, Prop>>, |
| 23 | start_time: i64, |
| 24 | ) where |
| 25 | P: InternalPropertiesOps + Clone, |
| 26 | { |
| 27 | properties_map.extend(metadata.iter_filtered().map(|(name, prop)| { |
| 28 | let column_name = if is_prop_both_temp_and_const.contains(name.as_ref()) { |
| 29 | format!("{}_metadata", name) |
| 30 | } else { |
| 31 | name.to_string() |
| 32 | }; |
| 33 | (column_name, prop.clone()) |
| 34 | })); |
| 35 | |
| 36 | if explode { |
| 37 | let mut empty_dict = HashMap::new(); |
| 38 | column_names.clone().iter().for_each(|name| { |
| 39 | let _ = empty_dict.insert(name.clone(), Prop::from("")); |
| 40 | }); |
| 41 | |
| 42 | if properties.temporal().iter().count() == 0 { |
| 43 | if properties_map.is_empty() { |
| 44 | // node is empty so add as empty time |
| 45 | let _ = prop_time_dict.insert(start_time, empty_dict.clone()); |
| 46 | } else { |
| 47 | metadata.iter_filtered().for_each(|(name, prop_val)| { |
| 48 | if !prop_time_dict.contains_key(&start_time) { |
| 49 | let _ = prop_time_dict.insert(start_time, empty_dict.clone()); |
| 50 | } |
| 51 | let data_dict = prop_time_dict.get_mut(&0i64).unwrap(); |
| 52 | let _ = data_dict.insert(name.to_string(), prop_val); |
| 53 | }) |
| 54 | } |
| 55 | } |
| 56 | properties |
| 57 | .temporal() |
| 58 | .histories() |
| 59 | .iter() |
| 60 | .for_each(|(prop_name, (t, prop_val))| { |
| 61 | let time = t.t(); |
| 62 | let column_name = if is_prop_both_temp_and_const.contains(prop_name.as_ref()) { |
| 63 | format!("{}_temporal", prop_name) |
| 64 | } else { |
| 65 | prop_name.to_string() |
| 66 | }; |
| 67 | if !prop_time_dict.contains_key(&time) { |
| 68 | prop_time_dict.insert(time, empty_dict.clone()); |
| 69 | } |
| 70 | let data_dict = prop_time_dict.get_mut(&time).unwrap(); |
no test coverage detected