diff --git a/arrow-cast/src/display.rs b/arrow-cast/src/display.rs index b29f844fb67..ae1c799a4ef 100644 --- a/arrow-cast/src/display.rs +++ b/arrow-cast/src/display.rs @@ -89,7 +89,7 @@ macro_rules! make_string_interval_day_time { let mins = mins - (hours * 60); format!( - "0 years 0 mons {} days {} hours {} mins {}.{:02} secs", + "0 years 0 mons {} days {} hours {} mins {}.{:03} secs", days_parts, hours, mins, @@ -127,7 +127,7 @@ macro_rules! make_string_interval_month_day_nano { let mins = mins - (hours * 60); format!( - "0 years {} mons {} days {} hours {} mins {}.{:02} secs", + "0 years {} mons {} days {} hours {} mins {}.{:09} secs", months_part, days_part, hours, diff --git a/arrow/src/util/pretty.rs b/arrow/src/util/pretty.rs index 63d5977e21c..c98c8a649cb 100644 --- a/arrow/src/util/pretty.rs +++ b/arrow/src/util/pretty.rs @@ -987,4 +987,88 @@ mod tests { Ok(()) } + + #[test] + fn test_pretty_format_interval_day_time() -> Result<()> { + let arr = Arc::new(arrow_array::IntervalDayTimeArray::from(vec![ + Some(1), + Some(10), + Some(100), + ])); + + let schema = Arc::new(Schema::new(vec![Field::new( + "IntervalDayTime", + arr.data_type().clone(), + true, + )])); + + let batch = RecordBatch::try_new(schema, vec![arr])?; + + let table = pretty_format_batches(&[batch])?.to_string(); + + let expected = vec![ + "+-------------------------------------------------+", + "| IntervalDayTime |", + "+-------------------------------------------------+", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.001 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.010 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.100 secs |", + "+-------------------------------------------------+", + ]; + + let actual: Vec<&str> = table.lines().collect(); + + assert_eq!(expected, actual, "Actual result:\n{}", table); + + Ok(()) + } + + #[test] + fn test_pretty_format_interval_month_day_nano_array() -> Result<()> { + let arr = Arc::new(arrow_array::IntervalMonthDayNanoArray::from(vec![ + Some(1), + Some(10), + Some(100), + Some(1_000), + Some(10_000), + Some(100_000), + Some(1_000_000), + Some(10_000_000), + Some(100_000_000), + Some(1_000_000_000), + ])); + + let schema = Arc::new(Schema::new(vec![Field::new( + "IntervalMonthDayNano", + arr.data_type().clone(), + true, + )])); + + let batch = RecordBatch::try_new(schema, vec![arr])?; + + let table = pretty_format_batches(&[batch])?.to_string(); + + let expected = vec![ + "+-------------------------------------------------------+", + "| IntervalMonthDayNano |", + "+-------------------------------------------------------+", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000000001 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000000010 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000000100 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000001000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000010000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.000100000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.001000000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.010000000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 0.100000000 secs |", + "| 0 years 0 mons 0 days 0 hours 0 mins 1.000000000 secs |", + "+-------------------------------------------------------+", + ]; + + let actual: Vec<&str> = table.lines().collect(); + + assert_eq!(expected, actual, "Actual result:\n{}", table); + + Ok(()) + } }