It seems that column transformation functions defined using macros can behave differently than functions defined without macros. Here's an example:
using Match, DataFrames, Query
df = DataFrame(a = [1, 2], b = [3, missing])
f(x) = @match x begin
3 => "three"
_ => missing
end
df |>
@map({_..., c = f(_.b)}) |>
@replacena("successfully replaced")
The output still has NAs in it, despite the final @replacena command.
If I replace f with an equivalent version without macros (even just the one obtained by expanding the macro), this works as expected.