| 265 | } |
| 266 | |
| 267 | fn create_run_array_data_int16(run_ends: Vec<i16>, values: ArrayData) -> ArrayData { |
| 268 | let run_ends_field = Arc::new(Field::new("run_ends", DataType::Int16, false)); |
| 269 | let values_field = Arc::new(Field::new("values", values.data_type().clone(), true)); |
| 270 | let data_type = DataType::RunEndEncoded(run_ends_field, values_field); |
| 271 | |
| 272 | let last_run_end = if run_ends.is_empty() { |
| 273 | 0 |
| 274 | } else { |
| 275 | run_ends[run_ends.len() - 1] as usize |
| 276 | }; |
| 277 | |
| 278 | let run_ends_buffer = Buffer::from_vec(run_ends); |
| 279 | let run_ends_data = ArrayDataBuilder::new(DataType::Int16) |
| 280 | .len(run_ends_buffer.len() / std::mem::size_of::<i16>()) |
| 281 | .add_buffer(run_ends_buffer) |
| 282 | .build() |
| 283 | .unwrap(); |
| 284 | |
| 285 | ArrayDataBuilder::new(data_type) |
| 286 | .len(last_run_end) |
| 287 | .add_child_data(run_ends_data) |
| 288 | .add_child_data(values) |
| 289 | .build() |
| 290 | .unwrap() |
| 291 | } |
| 292 | |
| 293 | fn create_run_array_data_int64(run_ends: Vec<i64>, values: ArrayData) -> ArrayData { |
| 294 | let run_ends_field = Arc::new(Field::new("run_ends", DataType::Int64, false)); |