diff --git a/crates/nu-cli/tests/commands/select.rs b/crates/nu-cli/tests/commands/select.rs index 48ff2b7bc..59a014536 100644 --- a/crates/nu-cli/tests/commands/select.rs +++ b/crates/nu-cli/tests/commands/select.rs @@ -99,3 +99,29 @@ fn allows_if_given_unknown_column_name_is_missing() { assert_eq!(actual.out, "3"); }) } + +#[test] +fn column_names_with_spaces() { + Playground::setup("select_test_4", |dirs, sandbox| { + sandbox.with_files(vec![FileWithContentToBeTrimmed( + "test_data.csv", + r#" + first name,last name + Jonathan,Turner + Jonathan,Arns + "#, + )]); + + let actual = nu!( + cwd: dirs.test(), pipeline( + r#" + open test_data.csv + | select "last name" + | to json + "# + )); + + let expected_output = r#"[{"last name":"Turner"},{"last name":"Arns"}]"#; + assert_eq!(actual.out, expected_output); + }) +} diff --git a/crates/nu-value-ext/src/lib.rs b/crates/nu-value-ext/src/lib.rs index e86135985..08f1f55cd 100644 --- a/crates/nu-value-ext/src/lib.rs +++ b/crates/nu-value-ext/src/lib.rs @@ -570,21 +570,13 @@ pub fn as_string(value: &Value) -> Result { UntaggedValue::Primitive(Primitive::Int(x)) => Ok(format!("{}", x)), UntaggedValue::Primitive(Primitive::Filesize(x)) => Ok(format!("{}", x)), UntaggedValue::Primitive(Primitive::Path(x)) => Ok(format!("{}", x.display())), - UntaggedValue::Primitive(Primitive::ColumnPath(path)) => { - let joined = path - .iter() - .map(|member| match &member.unspanned { - UnspannedPathMember::String(name) => name.to_string(), - UnspannedPathMember::Int(n) => format!("{}", n), - }) - .join("."); - - if joined.contains(' ') { - Ok(format!("\"{}\"", joined)) - } else { - Ok(joined) - } - } + UntaggedValue::Primitive(Primitive::ColumnPath(path)) => Ok(path + .iter() + .map(|member| match &member.unspanned { + UnspannedPathMember::String(name) => name.to_string(), + UnspannedPathMember::Int(n) => format!("{}", n), + }) + .join(".")), // TODO: this should definitely be more general with better errors other => Err(ShellError::labeled_error(