| 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)); |
| 295 | let values_field = Arc::new(Field::new("values", values.data_type().clone(), true)); |
| 296 | let data_type = DataType::RunEndEncoded(run_ends_field, values_field); |
| 297 | |
| 298 | let last_run_end = if run_ends.is_empty() { |
| 299 | 0 |
| 300 | } else { |
| 301 | run_ends[run_ends.len() - 1] as usize |
| 302 | }; |
| 303 | |
| 304 | let run_ends_buffer = Buffer::from_vec(run_ends); |
| 305 | let run_ends_data = ArrayDataBuilder::new(DataType::Int64) |
| 306 | .len(run_ends_buffer.len() / std::mem::size_of::<i64>()) |
| 307 | .add_buffer(run_ends_buffer) |
| 308 | .build() |
| 309 | .unwrap(); |
| 310 | |
| 311 | ArrayDataBuilder::new(data_type) |
| 312 | .len(last_run_end) |
| 313 | .add_child_data(run_ends_data) |
| 314 | .add_child_data(values) |
| 315 | .build() |
| 316 | .unwrap() |
| 317 | } |
| 318 | |
| 319 | fn create_int32_array_data(values: Vec<i32>) -> ArrayData { |
| 320 | let buffer = Buffer::from_vec(values); |