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

Function build_leaf_predicate_datums

bindings/c/src/table.rs:894–974  ·  view source on GitHub ↗

Helper to build an IN/NOT IN predicate with a datum array.

(
    table: *const paimon_table,
    column: *const std::ffi::c_char,
    datums: *const paimon_datum,
    datums_len: usize,
    build_fn: impl FnOnce(&PredicateBuilder, &str, Vec<Datum>) -> paimon:

Source from the content-addressed store, hash-verified

892
893/// Helper to build an IN/NOT IN predicate with a datum array.
894unsafe fn build_leaf_predicate_datums(
895 table: *const paimon_table,
896 column: *const std::ffi::c_char,
897 datums: *const paimon_datum,
898 datums_len: usize,
899 build_fn: impl FnOnce(&PredicateBuilder, &str, Vec<Datum>) -> paimon::Result<Predicate>,
900) -> paimon_result_predicate {
901 if let Err(e) = check_non_null(table, "table") {
902 return paimon_result_predicate {
903 predicate: std::ptr::null_mut(),
904 error: e,
905 };
906 }
907 let col_name = match validate_cstr(column, "column") {
908 Ok(s) => s,
909 Err(e) => {
910 return paimon_result_predicate {
911 predicate: std::ptr::null_mut(),
912 error: e,
913 }
914 }
915 };
916
917 if datums.is_null() && datums_len > 0 {
918 return paimon_result_predicate {
919 predicate: std::ptr::null_mut(),
920 error: paimon_error::new(
921 PaimonErrorCode::InvalidInput,
922 "null datums pointer with non-zero length".to_string(),
923 ),
924 };
925 }
926
927 let slice = if datums_len > 0 {
928 std::slice::from_raw_parts(datums, datums_len)
929 } else {
930 &[]
931 };
932 let values: Result<Vec<Datum>, _> = slice.iter().map(|d| datum_from_c(d)).collect();
933 let values = match values {
934 Ok(v) => v,
935 Err(e) => {
936 return paimon_result_predicate {
937 predicate: std::ptr::null_mut(),
938 error: e,
939 }
940 }
941 };
942
943 let table_ref = &*((*table).inner as *const Table);
944 let fields = table_ref.schema().fields();
945
946 let values: Result<Vec<Datum>, _> = values
947 .into_iter()
948 .map(|d| coerce_integer_datum(d, fields, &col_name))
949 .collect();
950 let values = match values {
951 Ok(v) => v,

Callers 2

paimon_predicate_is_inFunction · 0.85

Calls 8

check_non_nullFunction · 0.85
validate_cstrFunction · 0.85
datum_from_cFunction · 0.85
coerce_integer_datumFunction · 0.85
is_nullMethod · 0.80
iterMethod · 0.45
fieldsMethod · 0.45
schemaMethod · 0.45

Tested by

no test coverage detected