(lhs: &ArrayData, rhs: &ArrayData)
| 58 | |
| 59 | #[inline] |
| 60 | pub(super) fn base_equal(lhs: &ArrayData, rhs: &ArrayData) -> bool { |
| 61 | let equal_type = match (lhs.data_type(), rhs.data_type()) { |
| 62 | (DataType::Union(l_fields, l_mode), DataType::Union(r_fields, r_mode)) => { |
| 63 | l_fields == r_fields && l_mode == r_mode |
| 64 | } |
| 65 | (DataType::Map(l_field, l_sorted), DataType::Map(r_field, r_sorted)) => { |
| 66 | let field_equal = match (l_field.data_type(), r_field.data_type()) { |
| 67 | (DataType::Struct(l_fields), DataType::Struct(r_fields)) |
| 68 | if l_fields.len() == 2 && r_fields.len() == 2 => |
| 69 | { |
| 70 | let l_key_field = &l_fields[0]; |
| 71 | let r_key_field = &r_fields[0]; |
| 72 | let l_value_field = &l_fields[1]; |
| 73 | let r_value_field = &r_fields[1]; |
| 74 | |
| 75 | // We don't enforce the equality of field names |
| 76 | let data_type_equal = l_key_field.data_type() == r_key_field.data_type() |
| 77 | && l_value_field.data_type() == r_value_field.data_type(); |
| 78 | let nullability_equal = l_key_field.is_nullable() == r_key_field.is_nullable() |
| 79 | && l_value_field.is_nullable() == r_value_field.is_nullable(); |
| 80 | let metadata_equal = l_key_field.metadata() == r_key_field.metadata() |
| 81 | && l_value_field.metadata() == r_value_field.metadata(); |
| 82 | data_type_equal && nullability_equal && metadata_equal |
| 83 | } |
| 84 | _ => panic!("Map type should have 2 fields Struct in its field"), |
| 85 | }; |
| 86 | field_equal && l_sorted == r_sorted |
| 87 | } |
| 88 | (l_data_type, r_data_type) => l_data_type == r_data_type, |
| 89 | }; |
| 90 | equal_type && lhs.len() == rhs.len() |
| 91 | } |
| 92 | |
| 93 | // whether the two memory regions are equal |
| 94 | #[inline] |
no test coverage detected