Skip to content

Commit

Permalink
derive PartialOrd for TimeUnit
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-beedie committed Oct 1, 2023
1 parent 3136ed0 commit 383b2d0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 11 deletions.
2 changes: 1 addition & 1 deletion crates/polars-core/src/datatypes/time_unit.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use super::*;

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Eq, Hash)]
#[cfg_attr(
any(feature = "serde-lazy", feature = "serde"),
derive(Serialize, Deserialize)
Expand Down
16 changes: 6 additions & 10 deletions crates/polars-plan/src/logical_plan/optimizer/type_coercion/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -367,19 +367,15 @@ impl OptimizationRule for TypeCoercionRule {
// can't check for more granular time_unit in less-granular time_unit data,
// or we'll cast away valid/necessary precision (eg: nanosecs to millisecs)
(DataType::Datetime(lhs_unit, _), DataType::Datetime(rhs_unit, _)) => {
match (lhs_unit, rhs_unit) {
(TimeUnit::Nanoseconds, _) => return Ok(None),
(TimeUnit::Microseconds, TimeUnit::Microseconds | TimeUnit::Milliseconds) => return Ok(None),
(TimeUnit::Milliseconds, TimeUnit::Milliseconds) => return Ok(None),
_ => polars_bail!(InvalidOperation: "`is_in` cannot check for {:?} precision values in {:?} Datetime data", &rhs_unit, &lhs_unit)
if lhs_unit <= rhs_unit { return Ok(None) }
else {
polars_bail!(InvalidOperation: "`is_in` cannot check for {:?} precision values in {:?} Datetime data", &rhs_unit, &lhs_unit)
}
},
(DataType::Duration(lhs_unit), DataType::Duration(rhs_unit)) => {
match (lhs_unit, rhs_unit) {
(TimeUnit::Nanoseconds, _) => return Ok(None),
(TimeUnit::Microseconds, TimeUnit::Microseconds | TimeUnit::Milliseconds) => return Ok(None),
(TimeUnit::Milliseconds, TimeUnit::Milliseconds) => return Ok(None),
_ => polars_bail!(InvalidOperation: "`is_in` cannot check for {:?} precision values in {:?} Duration data", &rhs_unit, &lhs_unit)
if lhs_unit <= rhs_unit { return Ok(None) }
else {
polars_bail!(InvalidOperation: "`is_in` cannot check for {:?} precision values in {:?} Duration data", &rhs_unit, &lhs_unit)
}
},
// don't attempt to cast between obviously mismatched types;
Expand Down

0 comments on commit 383b2d0

Please sign in to comment.