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

View File

@ -11,3 +11,15 @@ fn count_columns_in_cal_table() {
assert_eq!(actual.out, "7"); 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");
}