Fix column count to not break on empty tables (#2374)

This commit is contained in:
Joseph T. Lyons 2020-08-18 22:16:35 -04:00 committed by GitHub
parent 43e061f8c6
commit 6126209f57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 14 deletions

View File

@ -39,23 +39,26 @@ impl WholeStreamCommand for Count {
let (CountArgs { column }, input) = args.process(&registry).await?;
let rows: Vec<Value> = input.collect().await;
if column {
if let UntaggedValue::Row(dict) = &rows[0].value {
return Ok(OutputStream::one(
UntaggedValue::int(dict.length()).into_value(tag),
));
let count = if column {
if rows.is_empty() {
0
} else {
return Err(ShellError::labeled_error(
"Cannot obtain column count",
"cannot obtain column count",
tag,
));
match &rows[0].value {
UntaggedValue::Row(dictionary) => dictionary.length(),
_ => {
return Err(ShellError::labeled_error(
"Cannot obtain column count",
"cannot obtain column count",
tag,
));
}
}
}
}
} else {
rows.len()
};
Ok(OutputStream::one(
UntaggedValue::int(rows.len()).into_value(tag),
))
Ok(OutputStream::one(UntaggedValue::int(count).into_value(tag)))
}
fn examples(&self) -> Vec<Example> {

View File

@ -11,3 +11,15 @@ fn count_columns_in_cal_table() {
assert_eq!(actual.out, "7");
}
#[test]
fn count_columns_no_rows() {
let actual = nu!(
cwd: ".", pipeline(
r#"
echo [] | count -c
"#
));
assert_eq!(actual.out, "0");
}