(
read: *const paimon_table_read,
plan: *const paimon_plan,
offset: usize,
length: usize,
)
| 369 | /// `read` and `plan` must be valid pointers from previous paimon C calls, or null (returns error). |
| 370 | #[no_mangle] |
| 371 | pub unsafe extern "C" fn paimon_table_read_to_arrow( |
| 372 | read: *const paimon_table_read, |
| 373 | plan: *const paimon_plan, |
| 374 | offset: usize, |
| 375 | length: usize, |
| 376 | ) -> paimon_result_record_batch_reader { |
| 377 | if let Err(e) = check_non_null(read, "read") { |
| 378 | return paimon_result_record_batch_reader { |
| 379 | reader: std::ptr::null_mut(), |
| 380 | error: e, |
| 381 | }; |
| 382 | } |
| 383 | if let Err(e) = check_non_null(plan, "plan") { |
| 384 | return paimon_result_record_batch_reader { |
| 385 | reader: std::ptr::null_mut(), |
| 386 | error: e, |
| 387 | }; |
| 388 | } |
| 389 | |
| 390 | let state = &*((*read).inner as *const TableReadState); |
| 391 | let plan_ref = &*((*plan).inner as *const Plan); |
| 392 | let all_splits = plan_ref.splits(); |
| 393 | let start = offset.min(all_splits.len()); |
| 394 | let end = (offset.saturating_add(length)).min(all_splits.len()); |
| 395 | let selected = &all_splits[start..end]; |
| 396 | |
| 397 | let table_read = paimon::table::TableRead::new( |
| 398 | &state.table, |
| 399 | state.read_type.clone(), |
| 400 | state.data_predicates.clone(), |
| 401 | ); |
| 402 | |
| 403 | match table_read.to_arrow(selected) { |
| 404 | Ok(stream) => { |
| 405 | let reader = Box::new(stream); |
| 406 | let wrapper = Box::new(paimon_record_batch_reader { |
| 407 | inner: Box::into_raw(reader) as *mut c_void, |
| 408 | }); |
| 409 | paimon_result_record_batch_reader { |
| 410 | reader: Box::into_raw(wrapper), |
| 411 | error: std::ptr::null_mut(), |
| 412 | } |
| 413 | } |
| 414 | Err(e) => paimon_result_record_batch_reader { |
| 415 | reader: std::ptr::null_mut(), |
| 416 | error: paimon_error::from_paimon(e), |
| 417 | }, |
| 418 | } |
| 419 | } |
| 420 | |
| 421 | // ======================= RecordBatchReader =============================== |
| 422 |
nothing calls this directly
no test coverage detected