MCPcopy Create free account
hub / github.com/apache/arrow-rs / validate_child_data

Method validate_child_data

arrow-data/src/data.rs:1125–1241  ·  view source on GitHub ↗

Validates the layout of `child_data` ArrayData structures

(&self)

Source from the content-addressed store, hash-verified

1123
1124 /// Validates the layout of `child_data` ArrayData structures
1125 fn validate_child_data(&self) -> Result<(), ArrowError> {
1126 match &self.data_type {
1127 DataType::List(field) | DataType::Map(field, _) => {
1128 let values_data = self.get_single_valid_child_data(field.data_type())?;
1129 self.validate_offsets::<i32>(values_data.len)?;
1130 Ok(())
1131 }
1132 DataType::LargeList(field) => {
1133 let values_data = self.get_single_valid_child_data(field.data_type())?;
1134 self.validate_offsets::<i64>(values_data.len)?;
1135 Ok(())
1136 }
1137 DataType::ListView(field) => {
1138 let values_data = self.get_single_valid_child_data(field.data_type())?;
1139 self.validate_offsets_and_sizes::<i32>(values_data.len)?;
1140 Ok(())
1141 }
1142 DataType::LargeListView(field) => {
1143 let values_data = self.get_single_valid_child_data(field.data_type())?;
1144 self.validate_offsets_and_sizes::<i64>(values_data.len)?;
1145 Ok(())
1146 }
1147 DataType::FixedSizeList(field, list_size) => {
1148 let values_data = self.get_single_valid_child_data(field.data_type())?;
1149
1150 let list_size: usize = (*list_size).try_into().map_err(|_| {
1151 ArrowError::InvalidArgumentError(format!(
1152 "{} has a negative list_size {}",
1153 self.data_type, list_size
1154 ))
1155 })?;
1156
1157 let expected_values_len = self.len
1158 .checked_mul(list_size)
1159 .expect("integer overflow computing expected number of expected values in FixedListSize");
1160
1161 if values_data.len < expected_values_len {
1162 return Err(ArrowError::InvalidArgumentError(format!(
1163 "Values length {} is less than the length ({}) multiplied by the value size ({}) for {}",
1164 values_data.len, self.len, list_size, self.data_type
1165 )));
1166 }
1167
1168 Ok(())
1169 }
1170 DataType::Struct(fields) => {
1171 self.validate_num_child_data(fields.len())?;
1172 for (i, field) in fields.iter().enumerate() {
1173 let field_data = self.get_valid_child_data(i, field.data_type())?;
1174
1175 // Ensure child field has sufficient size
1176 if field_data.len < self.len {
1177 return Err(ArrowError::InvalidArgumentError(format!(
1178 "{} child array #{} for field {} has length smaller than expected for struct array ({} < {})",
1179 self.data_type,
1180 i,
1181 field.name(),
1182 field_data.len,

Callers 1

validateMethod · 0.80

Calls 9

checked_len_plus_offsetFunction · 0.85
get_valid_child_dataMethod · 0.80
data_typeMethod · 0.45
checked_mulMethod · 0.45
lenMethod · 0.45
iterMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected