delamarch3 commented on code in PR #7189: URL: https://github.com/apache/arrow-rs/pull/7189#discussion_r1974334220
########## arrow-arith/src/temporal.rs: ########## @@ -488,25 +492,31 @@ impl ExtractDatePartExt for PrimitiveArray<IntervalMonthDayNanoType> { fn date_part(&self, part: DatePart) -> Result<Int32Array, ArrowError> { match part { DatePart::Year => Ok(self.unary_opt(|d: IntervalMonthDayNano| Some(d.months / 12))), - DatePart::Month => Ok(self.unary_opt(|d: IntervalMonthDayNano| Some(d.months))), + DatePart::Month => Ok(self.unary_opt(|d: IntervalMonthDayNano| Some(d.months % 12))), Review Comment: ```sql D SELECT datepart('year', interval '12 month'); ┌────────────────────────────────────────────────┐ │ datepart('year', CAST('12 month' AS INTERVAL)) │ │ int64 │ ├────────────────────────────────────────────────┤ │ 1 │ └────────────────────────────────────────────────┘ D SELECT datepart('month', interval '12 month'); ┌─────────────────────────────────────────────────┐ │ datepart('month', CAST('12 month' AS INTERVAL)) │ │ int64 │ ├─────────────────────────────────────────────────┤ │ 0 │ └─────────────────────────────────────────────────┘ ``` ########## arrow-arith/src/temporal.rs: ########## @@ -464,11 +464,15 @@ impl ExtractDatePartExt for PrimitiveArray<IntervalDayTimeType> { DatePart::Week => Ok(self.unary_opt(|d| Some(d.days / 7))), DatePart::Day => Ok(self.unary_opt(|d| Some(d.days))), DatePart::Hour => Ok(self.unary_opt(|d| Some(d.milliseconds / (60 * 60 * 1_000)))), - DatePart::Minute => Ok(self.unary_opt(|d| Some(d.milliseconds / (60 * 1_000)))), - DatePart::Second => Ok(self.unary_opt(|d| Some(d.milliseconds / 1_000))), - DatePart::Millisecond => Ok(self.unary_opt(|d| Some(d.milliseconds))), - DatePart::Microsecond => Ok(self.unary_opt(|d| d.milliseconds.checked_mul(1_000))), - DatePart::Nanosecond => Ok(self.unary_opt(|d| d.milliseconds.checked_mul(1_000_000))), + DatePart::Minute => Ok(self.unary_opt(|d| Some(d.milliseconds / (60 * 1_000) % 60))), + DatePart::Second => Ok(self.unary_opt(|d| Some(d.milliseconds / 1_000 % 60))), + DatePart::Millisecond => Ok(self.unary_opt(|d| Some(d.milliseconds % (60 * 1_000)))), + DatePart::Microsecond => { + Ok(self.unary_opt(|d| (d.milliseconds % (60 * 1_000)).checked_mul(1_000))) + } + DatePart::Nanosecond => { + Ok(self.unary_opt(|d| (d.milliseconds % (60 * 1_000)).checked_mul(1_000_000))) + } Review Comment: ```sql D SELECT datepart('m', interval '1m 61s 33ms 44us'); ┌─────────────────────────────────────────────────────┐ │ datepart('m', CAST('1m 61s 33ms 44us' AS INTERVAL)) │ │ int64 │ ├─────────────────────────────────────────────────────┤ │ 2 │ └─────────────────────────────────────────────────────┘ D SELECT datepart('s', interval '1m 61s 33ms 44us'); ┌─────────────────────────────────────────────────────┐ │ datepart('s', CAST('1m 61s 33ms 44us' AS INTERVAL)) │ │ int64 │ ├─────────────────────────────────────────────────────┤ │ 1 │ └─────────────────────────────────────────────────────┘ D SELECT datepart('ms', interval '1m 61s 33ms 44us'); ┌──────────────────────────────────────────────────────┐ │ datepart('ms', CAST('1m 61s 33ms 44us' AS INTERVAL)) │ │ int64 │ ├──────────────────────────────────────────────────────┤ │ 1033 │ └──────────────────────────────────────────────────────┘ D SELECT datepart('us', interval '1m 61s 33ms 44us'); ┌──────────────────────────────────────────────────────┐ │ datepart('us', CAST('1m 61s 33ms 44us' AS INTERVAL)) │ │ int64 │ ├──────────────────────────────────────────────────────┤ │ 1033044 │ │ (1.03 million) │ └──────────────────────────────────────────────────────┘ ``` ########## arrow-arith/src/temporal.rs: ########## @@ -464,11 +464,15 @@ impl ExtractDatePartExt for PrimitiveArray<IntervalDayTimeType> { DatePart::Week => Ok(self.unary_opt(|d| Some(d.days / 7))), DatePart::Day => Ok(self.unary_opt(|d| Some(d.days))), DatePart::Hour => Ok(self.unary_opt(|d| Some(d.milliseconds / (60 * 60 * 1_000)))), Review Comment: ```sql D SELECT datepart('hour', interval '25 hour'); ┌───────────────────────────────────────────────┐ │ datepart('hour', CAST('25 hour' AS INTERVAL)) │ │ int64 │ ├───────────────────────────────────────────────┤ │ 25 │ └───────────────────────────────────────────────┘ D SELECT datepart('day', interval '25 hour'); ┌──────────────────────────────────────────────┐ │ datepart('day', CAST('25 hour' AS INTERVAL)) │ │ int64 │ ├──────────────────────────────────────────────┤ │ 0 │ └──────────────────────────────────────────────┘ ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org