diff --git a/crates/nu-command/tests/commands/where_.rs b/crates/nu-command/tests/commands/where_.rs index 1f1ccc764b..ebf1ff5bb9 100644 --- a/crates/nu-command/tests/commands/where_.rs +++ b/crates/nu-command/tests/commands/where_.rs @@ -189,3 +189,10 @@ fn where_gt_null() { let actual = nu!("[{foo: 123} {}] | where foo? > 10 | to nuon"); assert_eq!(actual.out, "[[foo]; [123]]"); } + +#[test] +fn pass_through_empty_pipelines() { + let actual = nu!(cwd: ".", pipeline(r#"null | where name == "foo" | to json"#)); + + assert_eq!(actual.out, "[]"); +} diff --git a/crates/nu-protocol/src/pipeline_data.rs b/crates/nu-protocol/src/pipeline_data.rs index 3e47d2efca..7257cfe224 100644 --- a/crates/nu-protocol/src/pipeline_data.rs +++ b/crates/nu-protocol/src/pipeline_data.rs @@ -302,6 +302,7 @@ impl PipelineData { }, // Propagate errors by explicitly matching them before the final case. Value::Error { error } => Err(*error), + Value::Nothing { .. } => Ok(PipelineIterator(PipelineData::empty())), other => Err(ShellError::OnlySupportsThisInputType { exp_input_type: "list, binary, raw data or range".into(), wrong_type: other.get_type().to_string(), @@ -309,12 +310,7 @@ impl PipelineData { src_span: other.expect_span(), }), }, - PipelineData::Empty => Err(ShellError::OnlySupportsThisInputType { - exp_input_type: "list, binary, raw data or range".into(), - wrong_type: "null".into(), - dst_span: span, - src_span: span, - }), + PipelineData::Empty => Ok(PipelineIterator(PipelineData::empty())), other => Ok(PipelineIterator(other)), } }