From ea3b2df83d97fbeb4eac835dce151faf71764ca8 Mon Sep 17 00:00:00 2001 From: universalmind303 Date: Mon, 2 Oct 2023 22:54:30 -0500 Subject: [PATCH] chore: better list dtype formatting (#1840) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #1769 before: ``` > select current_schemas(); ┌────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ current_schemas │ │ ── │ │ List(Field { name: "item", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, m… │ ╞════════════════════════════════════════════════════════════════════════════════════════════════════╡ │ [public] │ └────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` after: ``` > select current_schemas(); ┌─────────────────┐ │ current_schemas │ │ ── │ │ List[Utf8] │ ╞═════════════════╡ │ [public] │ └─────────────────┘ ``` --- crates/arrow_util/src/pretty.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/crates/arrow_util/src/pretty.rs b/crates/arrow_util/src/pretty.rs index 80ca930f3..cab7a2a01 100644 --- a/crates/arrow_util/src/pretty.rs +++ b/crates/arrow_util/src/pretty.rs @@ -265,6 +265,23 @@ struct ColumnHeader { alignment: CellAlignment, } +fn fmt_dtype(dtype: &DataType) -> String { + match dtype { + DataType::Timestamp(tu, tz) => { + format!("Timestamp[{}, {}]", fmt_timeunit(tu), fmt_timezone(tz)) + } + DataType::List(fld) | DataType::LargeList(fld) => { + format!("List[{}]", fmt_dtype(fld.data_type())) + } + DataType::Struct(flds) => flds + .iter() + .map(|f| format!("{}: {}", f.name(), fmt_dtype(f.data_type()))) + .collect::>() + .join(", "), + dtype => format!("{}", dtype), + } +} + impl ColumnHeader { fn from_field(f: &Field) -> Self { let alignment = if f.data_type().is_numeric() { @@ -275,12 +292,7 @@ impl ColumnHeader { ColumnHeader { name: f.name().clone(), - data_type: match f.data_type() { - DataType::Timestamp(tu, tz) => { - format!("Timestamp[{}, {}]", fmt_timeunit(tu), fmt_timezone(tz)) - } - dtype => format!("{}", dtype), - }, + data_type: fmt_dtype(f.data_type()), alignment, } }