MCPcopy Create free account
hub / github.com/apache/datafusion / partial_cmp_struct

Function partial_cmp_struct

datafusion/common/src/scalar/mod.rs:848–880  ·  view source on GitHub ↗
(s1: &StructArray, s2: &StructArray)

Source from the content-addressed store, hash-verified

846}
847
848pub fn partial_cmp_struct(s1: &StructArray, s2: &StructArray) -> Option<Ordering> {
849 if s1.len() != s2.len() {
850 return None;
851 }
852
853 if s1.data_type() != s2.data_type() {
854 return None;
855 }
856
857 let mut expanded_columns1 = Vec::with_capacity(s1.num_columns());
858 let mut expanded_columns2 = Vec::with_capacity(s2.num_columns());
859
860 flatten(s1, &mut expanded_columns1);
861 flatten(s2, &mut expanded_columns2);
862
863 for col_index in 0..expanded_columns1.len() {
864 let arr1 = expanded_columns1[col_index];
865 let arr2 = expanded_columns2[col_index];
866
867 let lt_res = arrow::compute::kernels::cmp::lt(arr1, arr2).ok()?;
868 let eq_res = arrow::compute::kernels::cmp::eq(arr1, arr2).ok()?;
869
870 for j in 0..lt_res.len() {
871 if lt_res.is_valid(j) && lt_res.value(j) {
872 return Some(Ordering::Less);
873 }
874 if eq_res.is_valid(j) && !eq_res.value(j) {
875 return Some(Ordering::Greater);
876 }
877 }
878 }
879 Some(Ordering::Equal)
880}
881
882fn partial_cmp_map(m1: &Arc<MapArray>, m2: &Arc<MapArray>) -> Option<Ordering> {
883 if m1.len() != m2.len() {

Callers 1

partial_cmpMethod · 0.85

Calls 6

flattenFunction · 0.85
eqFunction · 0.85
lenMethod · 0.45
data_typeMethod · 0.45
is_validMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…