in crates/iceberg/src/spec/values.rs [218:317]
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
match (&self.literal, &other.literal, &self.r#type, &other.r#type) {
// generate the arm with same type and same literal
(
PrimitiveLiteral::Boolean(val),
PrimitiveLiteral::Boolean(other_val),
PrimitiveType::Boolean,
PrimitiveType::Boolean,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Int(val),
PrimitiveLiteral::Int(other_val),
PrimitiveType::Int,
PrimitiveType::Int,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Long(val),
PrimitiveLiteral::Long(other_val),
PrimitiveType::Long,
PrimitiveType::Long,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Float(val),
PrimitiveLiteral::Float(other_val),
PrimitiveType::Float,
PrimitiveType::Float,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Double(val),
PrimitiveLiteral::Double(other_val),
PrimitiveType::Double,
PrimitiveType::Double,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Int(val),
PrimitiveLiteral::Int(other_val),
PrimitiveType::Date,
PrimitiveType::Date,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Long(val),
PrimitiveLiteral::Long(other_val),
PrimitiveType::Time,
PrimitiveType::Time,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Long(val),
PrimitiveLiteral::Long(other_val),
PrimitiveType::Timestamp,
PrimitiveType::Timestamp,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Long(val),
PrimitiveLiteral::Long(other_val),
PrimitiveType::Timestamptz,
PrimitiveType::Timestamptz,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::String(val),
PrimitiveLiteral::String(other_val),
PrimitiveType::String,
PrimitiveType::String,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::UInt128(val),
PrimitiveLiteral::UInt128(other_val),
PrimitiveType::Uuid,
PrimitiveType::Uuid,
) => Uuid::from_u128(*val).partial_cmp(&Uuid::from_u128(*other_val)),
(
PrimitiveLiteral::Binary(val),
PrimitiveLiteral::Binary(other_val),
PrimitiveType::Fixed(_),
PrimitiveType::Fixed(_),
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Binary(val),
PrimitiveLiteral::Binary(other_val),
PrimitiveType::Binary,
PrimitiveType::Binary,
) => val.partial_cmp(other_val),
(
PrimitiveLiteral::Int128(val),
PrimitiveLiteral::Int128(other_val),
PrimitiveType::Decimal {
precision: _,
scale,
},
PrimitiveType::Decimal {
precision: _,
scale: other_scale,
},
) => {
let val = Decimal::from_i128_with_scale(*val, *scale);
let other_val = Decimal::from_i128_with_scale(*other_val, *other_scale);
val.partial_cmp(&other_val)
}
_ => None,
}
}