Create a new [`GenericListViewArray`] from the provided parts # Errors Errors if `offsets.len() != sizes.len()` `offsets.len() != nulls.len()` `offsets[i] > values.len()` `!field.is_nullable() && values.is_nullable()` `field.data_type() != values.data_type()` `0 <= offsets[i] <= length of the child array` `0 <= offsets[i] + size[i] <= length of the child array`
(
field: FieldRef,
offsets: ScalarBuffer<OffsetSize>,
sizes: ScalarBuffer<OffsetSize>,
values: ArrayRef,
nulls: Option<NullBuffer>,
)
| 139 | /// * `0 <= offsets[i] <= length of the child array` |
| 140 | /// * `0 <= offsets[i] + size[i] <= length of the child array` |
| 141 | pub fn try_new( |
| 142 | field: FieldRef, |
| 143 | offsets: ScalarBuffer<OffsetSize>, |
| 144 | sizes: ScalarBuffer<OffsetSize>, |
| 145 | values: ArrayRef, |
| 146 | nulls: Option<NullBuffer>, |
| 147 | ) -> Result<Self, ArrowError> { |
| 148 | let len = offsets.len(); |
| 149 | if let Some(n) = nulls.as_ref() { |
| 150 | if n.len() != len { |
| 151 | return Err(ArrowError::InvalidArgumentError(format!( |
| 152 | "Incorrect length of null buffer for {}ListViewArray, expected {len} got {}", |
| 153 | OffsetSize::PREFIX, |
| 154 | n.len(), |
| 155 | ))); |
| 156 | } |
| 157 | } |
| 158 | if len != sizes.len() { |
| 159 | return Err(ArrowError::InvalidArgumentError(format!( |
| 160 | "Length of offsets buffer and sizes buffer must be equal for {}ListViewArray, got {len} and {}", |
| 161 | OffsetSize::PREFIX, |
| 162 | sizes.len() |
| 163 | ))); |
| 164 | } |
| 165 | |
| 166 | for (offset, size) in offsets.iter().zip(sizes.iter()) { |
| 167 | let offset = offset.as_usize(); |
| 168 | let size = size.as_usize(); |
| 169 | if offset.checked_add(size).ok_or_else(|| { |
| 170 | ArrowError::InvalidArgumentError(format!( |
| 171 | "Overflow in offset + size for {}ListViewArray", |
| 172 | OffsetSize::PREFIX |
| 173 | )) |
| 174 | })? > values.len() |
| 175 | { |
| 176 | return Err(ArrowError::InvalidArgumentError(format!( |
| 177 | "Offset + size for {}ListViewArray must be within the bounds of the child array, got offset: {offset}, size: {size}, child array length: {}", |
| 178 | OffsetSize::PREFIX, |
| 179 | values.len() |
| 180 | ))); |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | if !field.is_nullable() && values.is_nullable() { |
| 185 | return Err(ArrowError::InvalidArgumentError(format!( |
| 186 | "Non-nullable field of {}ListViewArray {:?} cannot contain nulls", |
| 187 | OffsetSize::PREFIX, |
| 188 | field.name() |
| 189 | ))); |
| 190 | } |
| 191 | |
| 192 | if field.data_type() != values.data_type() { |
| 193 | return Err(ArrowError::InvalidArgumentError(format!( |
| 194 | "{}ListViewArray expected data type {} got {} for {:?}", |
| 195 | OffsetSize::PREFIX, |
| 196 | field.data_type(), |
| 197 | values.data_type(), |
| 198 | field.name() |
nothing calls this directly
no test coverage detected