mustafasrepo commented on code in PR #6501: URL: https://github.com/apache/arrow-datafusion/pull/6501#discussion_r1214931884
########## datafusion/physical-expr/src/equivalence.rs: ########## @@ -115,6 +113,53 @@ impl<T: Eq + Hash + Clone> EquivalenceProperties<T> { } } +/// Remove duplicates inside the `in_data` vector, returned vector would consist of unique entries +fn deduplicate_vector<T: PartialEq>(in_data: Vec<T>) -> Vec<T> { + let mut result = vec![]; + for elem in in_data { + if !result.contains(&elem) { + result.push(elem); + } + } + result +} + +/// Find the position of `entry` inside `in_data`, if `entry` is not found return `None`. +fn get_entry_position<T: PartialEq>(in_data: &[T], entry: &T) -> Option<usize> { + in_data.iter().position(|item| item.eq(entry)) +} + +/// Remove `entry` for the `in_data`, returns `true` if removal is successful (e.g `entry` is indeed in the `in_data`) +/// Otherwise return `false` +fn remove_from_vec<T: PartialEq>(in_data: &mut Vec<T>, entry: &T) -> bool { + if let Some(idx) = get_entry_position(in_data, entry) { + in_data.remove(idx); + true + } else { + false + } +} + +// Helper function to calculate column info recursively +fn get_column_infos_helper( + indices: &mut Vec<(usize, String)>, + expr: &Arc<dyn PhysicalExpr>, +) { + if let Some(col) = expr.as_any().downcast_ref::<Column>() { + indices.push((col.index(), col.name().to_string())) + } else if let Some(binary_expr) = expr.as_any().downcast_ref::<BinaryExpr>() { + get_column_infos_helper(indices, binary_expr.left()); + get_column_infos_helper(indices, binary_expr.right()); + }; +} + +/// Get index and name of each column that is in the expression (Can return multiple entries for `BinaryExpr`s) +fn get_column_infos(expr: &Arc<dyn PhysicalExpr>) -> Vec<(usize, String)> { Review Comment: I have changed its name -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org