MCPcopy Create free account
hub / github.com/apache/datafusion / compare_sort_expr

Function compare_sort_expr

datafusion/expr/src/utils.rs:563–619  ·  view source on GitHub ↗

Compare the sort expr as PostgreSQL's common_prefix_cmp():

(
    sort_expr_a: &Sort,
    sort_expr_b: &Sort,
    schema: &DFSchemaRef,
)

Source from the content-addressed store, hash-verified

561/// Compare the sort expr as PostgreSQL's common_prefix_cmp():
562/// <https://github.com/postgres/postgres/blob/master/src/backend/optimizer/plan/planner.c>
563pub fn compare_sort_expr(
564 sort_expr_a: &Sort,
565 sort_expr_b: &Sort,
566 schema: &DFSchemaRef,
567) -> Ordering {
568 let Sort {
569 expr: expr_a,
570 asc: asc_a,
571 nulls_first: nulls_first_a,
572 } = sort_expr_a;
573
574 let Sort {
575 expr: expr_b,
576 asc: asc_b,
577 nulls_first: nulls_first_b,
578 } = sort_expr_b;
579
580 let ref_indexes_a = find_column_indexes_referenced_by_expr(expr_a, schema);
581 let ref_indexes_b = find_column_indexes_referenced_by_expr(expr_b, schema);
582 for (idx_a, idx_b) in ref_indexes_a.iter().zip(ref_indexes_b.iter()) {
583 match idx_a.cmp(idx_b) {
584 Ordering::Less => {
585 return Ordering::Less;
586 }
587 Ordering::Greater => {
588 return Ordering::Greater;
589 }
590 Ordering::Equal => {}
591 }
592 }
593 match ref_indexes_a.len().cmp(&ref_indexes_b.len()) {
594 Ordering::Less => return Ordering::Greater,
595 Ordering::Greater => {
596 return Ordering::Less;
597 }
598 Ordering::Equal => {}
599 }
600 match (asc_a, asc_b) {
601 (true, false) => {
602 return Ordering::Greater;
603 }
604 (false, true) => {
605 return Ordering::Less;
606 }
607 _ => {}
608 }
609 match (nulls_first_a, nulls_first_b) {
610 (true, false) => {
611 return Ordering::Less;
612 }
613 (false, true) => {
614 return Ordering::Greater;
615 }
616 _ => {}
617 }
618 Ordering::Equal
619}
620

Callers 1

window_planMethod · 0.85

Calls 4

iterMethod · 0.45
cmpMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…