MCPcopy Create free account
hub / github.com/apache/paimon-rust / paimon_table_read_to_arrow

Function paimon_table_read_to_arrow

bindings/c/src/table.rs:371–419  ·  view source on GitHub ↗
(
    read: *const paimon_table_read,
    plan: *const paimon_plan,
    offset: usize,
    length: usize,
)

Source from the content-addressed store, hash-verified

369/// `read` and `plan` must be valid pointers from previous paimon C calls, or null (returns error).
370#[no_mangle]
371pub 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

Callers

nothing calls this directly

Calls 4

check_non_nullFunction · 0.85
splitsMethod · 0.80
to_arrowMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected