nushell/crates/nu-command/tests/commands
André Lazenga 03d455a688
Fix #13546: Outer joins incorrectly removing unmatched rows (#15472)
Fixes #13546 

# Description

Previously, outer joins would remove rows without join columns, since
the "did not match" logic only executed when the row had the join
column.
To solve this, missing join columns are now treated the same as "exists
but did not match" cases. The logic now executes both when the join
column doesn't exist and when it exists but doesn't match, ensuring rows
without join columns are preserved. If the join column is not defined at
all, the previous behavior remains unchanged.

Example:
```
For the tables:
let left_side = [{a: a1 ref: 1} {a: a2 ref: 2} {a: a3}]
let right_side = [[b ref]; [b1 1] [b2 2] [b3 3]]

Running "$left_side | join -l $right_side ref" now outputs:
╭───┬────┬─────┬────╮
│ # │ a  │ ref │ b  │
├───┼────┼─────┼────┤
│ 0 │ a1 │   1 │ b1 │
│ 1 │ a2 │   2 │ b2 │
│ 2 │ a3 │     │    │
╰───┴────┴─────┴────╯
```

# User-Facing Changes

The ```join``` command will behave more similarly to SQL-style joins. In
this case, rows that lack the join column are preserved.

# Tests + Formatting

Added 2 test cases.
fmt + clippy OK.

# After Submitting

I don't believe anything is necessary.
2025-04-22 07:19:08 +08:00
..
assignment Rework operator type errors (#14429) 2025-02-12 20:03:40 -08:00
base Update rand and rand_chacha to 0.9 (#15463) 2025-04-01 07:15:39 -05:00
bytes fix range bugs in str substring, str index-of, slice, bytes at (#14863) 2025-01-30 06:50:01 -06:00
conversions Change behavior of into record on lists to be more useful (#13637) 2024-08-22 11:38:43 +02:00
database Update rand and rand_chacha to 0.9 (#15463) 2025-04-01 07:15:39 -05:00
date fix format date based on users locale (#11908) 2024-02-20 11:08:49 -06:00
debug Make timeit take only closures as an argument (#14483) 2024-12-10 23:08:53 +08:00
hash_ Replace the old encode base64 and decode base64 with new-base64 commands (#14018) 2024-10-08 11:01:43 +08:00
math Bugfix/loss of precision when parsing value with unit (#15606) 2025-04-19 17:02:40 -05:00
move_ Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
network Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
path Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
platform Add ansi codes to move cursor position (#15221) 2025-03-01 11:30:00 -06:00
query Feature cleanup (#7182) 2022-11-22 16:58:11 -08:00
random feat(random uuid): add support for uuid versions other than 4. (#15239) 2025-03-06 14:21:52 +01:00
skip Add string/binary type color to ByteStream (#12897) 2024-05-20 00:35:32 +00:00
str_ fix ranges over zero-length input (#15062) 2025-02-08 19:57:28 -05:00
take Add string/binary type color to ByteStream (#12897) 2024-05-20 00:35:32 +00:00
url Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
alias.rs allow export alias in repl (#15054) 2025-02-10 15:32:05 +08:00
all.rs Rewrite run_external.rs (#12921) 2024-05-23 02:05:27 +00:00
any.rs Rewrite run_external.rs (#12921) 2024-05-23 02:05:27 +00:00
append.rs fix(nu-command/tests): further remove unnecessary pipeline() and cwd() (#8793) 2023-04-07 14:09:55 -07:00
break_.rs don't allow break/continue in each and items command (#13398) 2024-07-19 00:21:02 -07:00
cal.rs Suppress column index for default cal output (#13188) 2024-06-22 07:41:29 -05:00
cd.rs More precise ErrorKind::NotFound errors (#15149) 2025-02-22 11:42:44 -05:00
chunk_by.rs Implement chunk_by operation (#14410) 2024-11-29 13:37:27 -08:00
chunks.rs Deprecate group in favor of chunks (#13377) 2024-07-16 03:49:00 +00:00
compact.rs fix compact to handle empty list or record in column (#15213) 2025-03-01 07:47:55 -05:00
complete.rs Make assignment and const consistent with let/mut (#13385) 2024-07-30 18:55:22 -05:00
config_env_default.rs Command: Add config env/nu --default to print defaults (#10480) 2023-09-25 08:00:59 -05:00
config_nu_default.rs Command: Add config env/nu --default to print defaults (#10480) 2023-09-25 08:00:59 -05:00
continue_.rs fix(nu-command/tests): further remove unnecessary pipeline() and cwd() (#8793) 2023-04-07 14:09:55 -07:00
debug_info.rs Make debug info lazy (#10728) 2023-10-24 12:48:05 -05:00
def.rs make command signature parsing more strict (#14309) 2024-11-18 08:01:52 +08:00
default.rs Fix #15440 default --empty fails at empty streams (#15562) 2025-04-17 16:57:25 +02:00
detect_columns.rs Improves commands that support range input (#13113) 2024-06-18 07:19:13 -05:00
do_.rs remove -s, -p in do (#15456) 2025-04-01 07:17:05 -05:00
drop.rs Refactor drop columns to fix issues (#10903) 2023-11-09 13:51:46 +01:00
du.rs Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
each.rs Remove group command (#14056) 2024-10-11 06:43:12 -05:00
echo.rs make echo const (#14997) 2025-02-06 06:56:30 -06:00
empty.rs fix(nu-command/tests): further remove unnecessary pipeline() and cwd() (#8793) 2023-04-07 14:09:55 -07:00
error_make.rs Change the error style during tests to plain (#13061) 2024-06-18 21:37:24 -07:00
every.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
exec.rs Isolate tests from user config (#12437) 2024-04-10 06:27:46 +08:00
export_def.rs Removes unnecessary cwd and pipeline from various tests (#9202) 2023-05-17 18:55:26 -05:00
fill.rs Removes unnecessary cwd and pipeline from various tests (#9202) 2023-05-17 18:55:26 -05:00
filter.rs Fix return in filter closure eval (#12292) 2024-03-26 17:50:36 +01:00
find.rs Add --raw to find command (#14970) 2025-01-30 18:27:55 -06:00
first.rs Add string/binary type color to ByteStream (#12897) 2024-05-20 00:35:32 +00:00
flatten.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
for_.rs Change echo to print when not redirected (#10338) 2023-09-13 06:35:01 +12:00
format.rs Improve and fix filesize formatting/display (#14397) 2025-01-22 22:24:51 -08:00
generate.rs Add input support to generate (#14804) 2025-01-14 11:44:31 -06:00
get.rs Make get const (#14751) 2025-01-04 16:41:03 -05:00
glob.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
griddle.rs make grid throw an error when not enough columns (#12672) 2024-04-26 06:33:00 -05:00
group_by.rs Add run-time type checking for command pipeline input (#14741) 2025-01-08 23:09:47 +01:00
headers.rs Fix: remove unnecessary r#"..."# (#8670) (#9764) 2023-07-21 17:32:37 +02:00
help.rs Change the usage misnomer to "description" (#13598) 2024-08-22 12:02:08 +02:00
histogram.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
ignore.rs Change the ignore command to use drain() instead of collecting a value (#12120) 2024-03-08 02:18:26 -05:00
insert.rs Remove lazy records (#12682) 2024-05-03 08:36:10 +08:00
inspect.rs fix inspect and explore panics on empty records (#13893) 2024-09-25 07:48:16 -05:00
interleave.rs Isolate tests from user config (#12437) 2024-04-10 06:27:46 +08:00
into_datetime.rs feat: duration from record (#15600) 2025-04-19 18:29:12 -05:00
into_duration.rs feat: duration from record (#15600) 2025-04-19 18:29:12 -05:00
into_filesize.rs Bump bytesize to fix into filesize (#15088) 2025-02-11 11:33:48 +01:00
into_int.rs add --signed flag for binary into int conversions (#11902) 2024-02-27 15:05:26 +00:00
job.rs Add job tags (#15555) 2025-04-21 20:08:00 +08:00
join.rs Fix #13546: Outer joins incorrectly removing unmatched rows (#15472) 2025-04-22 07:19:08 +08:00
last.rs Add string/binary type color to ByteStream (#12897) 2024-05-20 00:35:32 +00:00
length.rs support binary input in length (#14224) 2024-11-04 03:39:24 +00:00
let_.rs fix error when exporting consts with type signatures in modules (#14118) 2024-10-22 11:54:31 +02:00
lines.rs fix panic with lines on an error (#9967) 2023-08-09 14:12:58 +02:00
loop_.rs Change echo to print when not redirected (#10338) 2023-09-13 06:35:01 +12:00
ls.rs Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
match_.rs prevent panic when parsing incomplete multi-expr (|) matches (#15230) 2025-03-04 05:34:34 -06:00
merge_deep.rs Add merge deep command (#14525) 2024-12-18 06:36:04 -06:00
merge.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
mktemp.rs Path migration part 4: various tests (#13373) 2024-08-03 10:09:13 +02:00
mod.rs Bugfix/loss of precision when parsing value with unit (#15606) 2025-04-19 17:02:40 -05:00
mut_.rs raise ParseError if assign to a non-variable or non-mutable-variable (#14405) 2024-11-29 23:02:21 +01:00
nu_check.rs More precise ErrorKind::NotFound errors (#15149) 2025-02-22 11:42:44 -05:00
open.rs fix: command open sets default flags when calling "from xxx" converters (#15383) 2025-03-25 17:40:20 +01:00
par_each.rs Fix: remove unnecessary r#"..."# (#8670) (#9764) 2023-07-21 17:32:37 +02:00
parse.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
prepend.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
print.rs Add --raw switch to print for binary data (#13597) 2024-08-12 17:29:25 +08:00
redirection.rs Overhaul $in expressions (#13357) 2024-07-17 16:02:42 -05:00
reduce.rs Rework operator type errors (#14429) 2025-02-12 20:03:40 -08:00
reject.rs Fix reject regression (#14931) 2025-01-27 18:23:44 -05:00
rename.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
return_.rs Fix return setting last exit code (#14120) 2024-10-18 03:05:58 +00:00
reverse.rs Clean up tests containing unnecessary cwd: tokens (#9692) 2023-07-17 18:43:51 +02:00
rm.rs bump the rust toolchain to 1.83.0 (#15148) 2025-02-20 16:34:09 -06:00
roll.rs Fix: remove unnecessary r#"..."# (#8670) (#9764) 2023-07-21 17:32:37 +02:00
rotate.rs Fix panic in rotate; Add safe record creation function (#11718) 2024-02-03 13:23:16 +02:00
run_external.rs Remove required positional arguments from run-external and exec (#14765) 2025-01-16 06:10:28 +08:00
save.rs Refactor I/O Errors (#14927) 2025-01-28 16:03:31 -06:00
select.rs allow select to stream more (#14492) 2024-12-03 20:45:31 -06:00
semicolon.rs Slim down tests (#9021) 2023-04-28 13:25:44 +02:00
seq_char.rs Seq char update will work on all char (#14261) 2024-11-15 21:05:29 +01:00
seq_date.rs seq date: generalize to allow any duration for --increment argument (#14903) 2025-01-25 13:24:39 -06:00
seq.rs Slim down tests (#9021) 2023-04-28 13:25:44 +02:00
slice.rs fix range bugs in str substring, str index-of, slice, bytes at (#14863) 2025-01-30 06:50:01 -06:00
sort_by.rs to json -r not removing whitespaces fix (#11948) 2024-03-20 22:14:31 +01:00
sort.rs Rework sorting and add cell path and closure comparators to sort-by (#13154) 2024-10-09 19:18:16 -07:00
source_env.rs Path migration part 2: nu-test-support (#13329) 2024-07-12 02:43:10 +00:00
split_column.rs Add --number flag to split column (#13831) 2024-09-12 07:16:33 -05:00
split_row.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
start.rs check signals while printing values (#14980) 2025-02-07 06:56:07 -05:00
stor.rs Fix improperly escaped strings in stor update (#14921) 2025-01-26 07:20:39 -06:00
table.rs fix f25525b (#15500) 2025-04-11 08:02:01 -05:00
tee.rs Make tee work more nicely with non-collections (#13652) 2024-09-01 19:03:46 +02:00
terminal.rs Add is-terminal to determine if stdin/out/err are a terminal (#10970) 2023-11-21 20:48:39 -06:00
to_text.rs Make to text line endings consistent for list (streams) (#14166) 2024-11-05 09:33:54 +01:00
transpose.rs Transpose now rejects streams with non-record values (#15151) 2025-02-20 23:34:26 -05:00
try_.rs reset argument/redirection state after eval_call errors (#15400) 2025-03-26 19:41:16 -04:00
ucp.rs Improve and fix filesize formatting/display (#14397) 2025-01-22 22:24:51 -08:00
ulimit.rs FreeBSD compatibility patches (#11869) 2024-02-17 20:04:59 +01:00
umkdir.rs [umkdir][tests] get umask instead of assuming it (#14046) 2024-10-11 14:13:42 +02:00
uname.rs Initial implementation for uutils uname (#11684) 2024-03-25 16:51:50 -05:00
uniq_by.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
uniq.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
update.rs Remove lazy records (#12682) 2024-05-03 08:36:10 +08:00
upsert.rs Remove lazy records (#12682) 2024-05-03 08:36:10 +08:00
use_.rs Change tests which may invoke externals to use non-conflicting names (#14516) 2024-12-04 19:26:48 -06:00
utouch.rs Make utouch the new touch (#14721) 2025-01-02 06:26:46 -06:00
where_.rs Add new operators has and not-has (#14841) 2025-01-17 06:20:00 -06:00
which.rs change the output of which to be more explicit (#9646) 2023-07-20 19:10:53 -05:00
while_.rs Change echo to print when not redirected (#10338) 2023-09-13 06:35:01 +12:00
window.rs Refactor window (#13401) 2024-07-19 04:16:09 +00:00
with_env.rs Improve with-env robustness (#12523) 2024-04-16 19:08:58 +08:00
wrap.rs Remove file I/O from tests that don't need it (#11182) 2023-11-29 23:21:34 +01:00
zip.rs Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00