MCPcopy Create free account
hub / github.com/ciphermodelabs/ciphercore / evaluate_full_join

Function evaluate_full_join

ciphercore-base/src/evaluators/join.rs:444–499  ·  view source on GitHub ↗
(
    set0: TypedValue,
    set1: TypedValue,
    has_column_masks: bool,
    headers: &HashMap<String, String>,
    res_t: Type,
)

Source from the content-addressed store, hash-verified

442}
443
444fn evaluate_full_join(
445 set0: TypedValue,
446 set1: TypedValue,
447 has_column_masks: bool,
448 headers: &HashMap<String, String>,
449 res_t: Type,
450) -> Result<Value> {
451 // First, evaluate the left join of set1 and set0.
452 let num_rows1 = get_number_of_rows(&set1.t)?;
453 let headers_types0 = get_named_types(&set0.t)?;
454 // Resulting type of this left join. The columns of set1 go first, then the remaining columns of set0.
455 let left_join_t = {
456 let mut result_types_vec = vec![];
457 let headers_types1 = get_named_types(&set1.t)?;
458 for (h, sub_t) in headers_types1 {
459 result_types_vec.push((h.clone(), (**sub_t).clone()));
460 }
461 for (h, sub_t) in headers_types0 {
462 if h != NULL_HEADER && !headers.contains_key(h) {
463 let column_t = ColumnType::new((**sub_t).clone(), has_column_masks, h)?;
464 let res_t = column_t.clone_with_number_of_entries(num_rows1);
465 result_types_vec.push((h.clone(), res_t.into()));
466 }
467 }
468
469 named_tuple_type(result_types_vec)
470 };
471 // The headers of the left join are the reversed input headers.
472 let mut left_join_headers = HashMap::new();
473 for (h0, h1) in headers {
474 left_join_headers.insert(h1.clone(), h0.clone());
475 }
476
477 let left_join_value = evaluate_join(
478 JoinType::Left,
479 set1,
480 set0.clone(),
481 has_column_masks,
482 &left_join_headers,
483 left_join_t.clone(),
484 )?;
485 let left_join = TypedValue {
486 value: left_join_value,
487 t: left_join_t,
488 name: None,
489 };
490 // Then, evaluate the union of set0 and the left join result
491 evaluate_join(
492 JoinType::Union,
493 set0,
494 left_join,
495 has_column_masks,
496 headers,
497 res_t,
498 )
499}
500
501pub(crate) fn evaluate_join(

Callers 1

evaluate_joinFunction · 0.85

Calls 8

get_number_of_rowsFunction · 0.85
get_named_typesFunction · 0.85
evaluate_joinFunction · 0.85
cloneMethod · 0.80
named_tuple_typeFunction · 0.50
pushMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected