Remove select error if same row/column is provided (#10350)

This PR is in reference to #10215.

This PR changes `select` to work even if multiple equal items were
provided.
This would previously error, but now works
```nushell
let arg = [ 1 a ]
[[a b c]; [1 2 3] [4 5 6] [7 8 9]] 
| select $arg

```
# User-Facing Changes

Nothing too radical, just experience improvements. Users won't need to
pass the values through `unique` beforehand.
This commit is contained in:
Tilen Gimpelj 2023-09-13 13:49:55 +02:00 committed by GitHub
parent 7f39609d9a
commit bbea7da669
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 13 deletions

View File

@ -214,18 +214,13 @@ fn select(
Vec::new(),
));
}
if unique_rows.contains(val) {
return Err(ShellError::GenericError(
"Select can't get the same row twice".into(),
"duplicated row index".into(),
Some(*span),
None,
Vec::new(),
));
}
unique_rows.insert(*val);
}
_ => new_columns.push(column),
_ => {
if !new_columns.contains(&column) {
new_columns.push(column)
}
}
};
}
let columns = new_columns;

View File

@ -218,10 +218,17 @@ fn select_failed3() {
}
#[test]
fn select_failed4() {
let actual = nu!("[{a: 1 b: 10}, {a:2, b:11}] | select 0 0");
fn select_repeated_rows() {
let actual = nu!("[[a b c]; [1 2 3] [4 5 6] [7 8 9]] | select 0 0 | to nuon");
assert!(actual.err.contains("Select can't get the same row twice"));
assert_eq!(actual.out, "[[a, b, c]; [1, 2, 3]]");
}
#[test]
fn select_repeated_column() {
let actual = nu!("[[a b c]; [1 2 3] [4 5 6] [7 8 9]] | select a a | to nuon");
assert_eq!(actual.out, "[[a]; [1], [4], [7]]");
}
#[test]