Skip to content

Commit

Permalink
support struct array in pretty display
Browse files Browse the repository at this point in the history
  • Loading branch information
houqp committed Jul 21, 2021
1 parent 68a4b5b commit b1d6e11
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions arrow/src/util/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,29 @@ pub fn make_string_from_decimal(column: &Arc<dyn Array>, row: usize) -> Result<S
Ok(formatted_decimal)
}

fn append_struct_field_string(
target: &mut String,
name: &str,
field_col: &Arc<dyn Array>,
row: usize,
) -> Result<()> {
target.push('"');
target.push_str(name);
target.push_str("\": ");
match field_col.data_type() {
DataType::Utf8 | DataType::LargeUtf8 => {
target.push('"');
target.push_str(array_value_to_string(field_col, row)?.as_str());
target.push('"');
}
_ => {
target.push_str(array_value_to_string(field_col, row)?.as_str());
}
}

Ok(())
}

/// Get the value at the given row in an array as a String.
///
/// Note this function is quite inefficient and is unlikely to be
Expand Down Expand Up @@ -280,6 +303,27 @@ pub fn array_value_to_string(column: &array::ArrayRef, row: usize) -> Result<Str
column.data_type()
))),
},
DataType::Struct(_) => {
let st = column.as_any().downcast_ref::<array::StructArray>().ok_or(
ArrowError::InvalidArgumentError(format!(
"Repl error: could not convert struct column to struct array."
)),
)?;

let mut s = String::new();
s.push_str("{");
let mut kv_iter = st.columns().into_iter().zip(st.column_names().into_iter());
if let Some((col, name)) = kv_iter.next() {
append_struct_field_string(&mut s, name, col, row)?;
}
for (col, name) in kv_iter {
s.push_str(", ");
append_struct_field_string(&mut s, name, col, row)?;
}
s.push_str("}");

Ok(s)
}
_ => Err(ArrowError::InvalidArgumentError(format!(
"Pretty printing not implemented for {:?} type",
column.data_type()
Expand Down

0 comments on commit b1d6e11

Please sign in to comment.