| 880 | } |
| 881 | |
| 882 | fn partial_cmp_map(m1: &Arc<MapArray>, m2: &Arc<MapArray>) -> Option<Ordering> { |
| 883 | if m1.len() != m2.len() { |
| 884 | return None; |
| 885 | } |
| 886 | |
| 887 | if m1.data_type() != m2.data_type() { |
| 888 | return None; |
| 889 | } |
| 890 | |
| 891 | for col_index in 0..m1.len() { |
| 892 | let arr1 = m1.entries().column(col_index); |
| 893 | let arr2 = m2.entries().column(col_index); |
| 894 | |
| 895 | let lt_res = arrow::compute::kernels::cmp::lt(arr1, arr2).ok()?; |
| 896 | let eq_res = arrow::compute::kernels::cmp::eq(arr1, arr2).ok()?; |
| 897 | |
| 898 | for j in 0..lt_res.len() { |
| 899 | if lt_res.is_valid(j) && lt_res.value(j) { |
| 900 | return Some(Ordering::Less); |
| 901 | } |
| 902 | if eq_res.is_valid(j) && !eq_res.value(j) { |
| 903 | return Some(Ordering::Greater); |
| 904 | } |
| 905 | } |
| 906 | } |
| 907 | Some(Ordering::Equal) |
| 908 | } |
| 909 | |
| 910 | impl Eq for ScalarValue {} |
| 911 | |