Path: blob/main/crates/polars-compute/src/comparisons/struct_.rs
6939 views
use arrow::array::{Array, StructArray};1use arrow::bitmap::{Bitmap, BitmapBuilder};23use super::TotalEqKernel;4use crate::comparisons::dyn_array::array_tot_eq_missing_kernel;56impl TotalEqKernel for StructArray {7type Scalar = Box<dyn Array>;89fn tot_eq_kernel(&self, other: &Self) -> Bitmap {10let lhs = self;11let rhs = other;12assert_eq!(lhs.len(), rhs.len());1314if lhs.fields() != rhs.fields() {15return Bitmap::new_zeroed(lhs.len());16}1718let ln = lhs.validity();19let rn = rhs.validity();2021let lv = lhs.values();22let rv = rhs.values();2324let mut bitmap = BitmapBuilder::with_capacity(lhs.len());2526for i in 0..lhs.len() {27let mut is_equal = true;2829if !ln.is_none_or(|v| v.get(i).unwrap()) || !rn.is_none_or(|v| v.get(i).unwrap()) {30bitmap.push(true);31continue;32}3334for j in 0..lhs.values().len() {35if lv[j].len() != rv[j].len() {36is_equal = false;37break;38}3940let result = array_tot_eq_missing_kernel(lv[j].as_ref(), rv[j].as_ref());41if result.unset_bits() != 0 {42is_equal = false;43break;44}45}4647bitmap.push(is_equal);48}4950bitmap.freeze()51}5253fn tot_ne_kernel(&self, other: &Self) -> Bitmap {54let lhs = self;55let rhs = other;5657if lhs.fields() != rhs.fields() {58return Bitmap::new_with_value(true, lhs.len());59}6061if lhs.values().len() != rhs.values().len() {62return Bitmap::new_with_value(true, lhs.len());63}6465let ln = lhs.validity();66let rn = rhs.validity();6768let lv = lhs.values();69let rv = rhs.values();7071let mut bitmap = BitmapBuilder::with_capacity(lhs.len());7273for i in 0..lhs.len() {74let mut is_equal = true;7576if !ln.is_none_or(|v| v.get(i).unwrap()) || !rn.is_none_or(|v| v.get(i).unwrap()) {77bitmap.push(false);78continue;79}8081for j in 0..lhs.values().len() {82if lv[j].len() != rv[j].len() {83is_equal = false;84break;85}8687let result = array_tot_eq_missing_kernel(lv[j].as_ref(), rv[j].as_ref());88if result.unset_bits() != 0 {89is_equal = false;90break;91}92}9394bitmap.push(!is_equal);95}9697bitmap.freeze()98}99100fn tot_eq_kernel_broadcast(&self, _other: &Self::Scalar) -> Bitmap {101todo!()102}103104fn tot_ne_kernel_broadcast(&self, _other: &Self::Scalar) -> Bitmap {105todo!()106}107}108109110