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

Method partial_cmp

datafusion/common/src/scalar/mod.rs:589–770  ·  view source on GitHub ↗
(&self, other: &Self)

Source from the content-addressed store, hash-verified

587// manual implementation of `PartialOrd`
588impl PartialOrd for ScalarValue {
589 fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
590 use ScalarValue::*;
591 // This purposely doesn't have a catch-all "(_, _)" so that
592 // any newly added enum variant will require editing this list
593 // or else face a compile error
594 match (self, other) {
595 (Decimal32(v1, _, s1), Decimal32(v2, _, s2)) => {
596 if s1.eq(s2) {
597 // Same scale means the underlying integer values share
598 // a common interpretation regardless of declared
599 // precision (arithmetic such as `add_checked` widens
600 // precision by 1 but does not change the numeric
601 // meaning).
602 v1.partial_cmp(v2)
603 } else {
604 None
605 }
606 }
607 (Decimal32(_, _, _), _) => None,
608 (Decimal64(v1, _, s1), Decimal64(v2, _, s2)) => {
609 if s1.eq(s2) {
610 v1.partial_cmp(v2)
611 } else {
612 None
613 }
614 }
615 (Decimal64(_, _, _), _) => None,
616 (Decimal128(v1, _, s1), Decimal128(v2, _, s2)) => {
617 if s1.eq(s2) {
618 v1.partial_cmp(v2)
619 } else {
620 None
621 }
622 }
623 (Decimal128(_, _, _), _) => None,
624 (Decimal256(v1, _, s1), Decimal256(v2, _, s2)) => {
625 if s1.eq(s2) {
626 v1.partial_cmp(v2)
627 } else {
628 None
629 }
630 }
631 (Decimal256(_, _, _), _) => None,
632 (Boolean(v1), Boolean(v2)) => v1.partial_cmp(v2),
633 (Boolean(_), _) => None,
634 (Float32(v1), Float32(v2)) => match (v1, v2) {
635 (Some(f1), Some(f2)) => Some(f1.total_cmp(f2)),
636 _ => v1.partial_cmp(v2),
637 },
638 (Float16(v1), Float16(v2)) => match (v1, v2) {
639 (Some(f1), Some(f2)) => Some(f1.total_cmp(f2)),
640 _ => v1.partial_cmp(v2),
641 },
642 (Float32(_), _) => None,
643 (Float16(_), _) => None,
644 (Float64(v1), Float64(v2)) => match (v1, v2) {
645 (Some(f1), Some(f2)) => Some(f1.total_cmp(f2)),
646 _ => v1.partial_cmp(v2),

Callers 2

try_cmpMethod · 0.45
scalar_decimal_testFunction · 0.45

Calls 5

partial_cmp_listFunction · 0.85
partial_cmp_structFunction · 0.85
partial_cmp_mapFunction · 0.85
eqMethod · 0.45
as_refMethod · 0.45

Tested by 1

scalar_decimal_testFunction · 0.36