]> granicus.if.org Git - jq/commit
Make |= delete LHS when RHS is empty (Fix #1314)
authorNicolas Williams <nico@cryptonector.com>
Fri, 27 Jan 2017 23:46:00 +0000 (17:46 -0600)
committerNicolas Williams <nico@cryptonector.com>
Mon, 30 Jan 2017 20:11:05 +0000 (14:11 -0600)
commitbd7b48c1b97063bd21aa7e264e61ea3350145486
treedbed47060c389967523c33d78e78aa09eb3e8619
parentaac8132f47435ef2d44411df327d90350e92bef6
Make |= delete LHS when RHS is empty (Fix #1314)

Now that #1313 is fixed, |= no longer outputs null when the RHS update
expression outputs empty.

When a user wants to keep the current value of the LHS they would have
the RHS update expression output `.`, so having `empty` achieve the same
thing would be redundant.  The obvious thing to do is to delete the LHS
when the RHS update outputs `empty` (i.e., doesn't output any values).

It's reasonable to think that existing programs won't be broken by this
change, because reduce and |= not handling empty well is clearly a bug.
(Though it's possible that some programs were using empty to quickly
terminate reduce or |=, it's not likely.  They should use label/break
instead.)

Prior to this change |= would use the _last_ value output by the RHS
update expression.  With this change |= will use the _first_ value
instead.  This change _is_ a minor backwards-incompatible change.  It
may or may not be acceptable; we'll see.  It is a useful change in that
it makes |= faster when the update expression produces multiple values.
docs/content/3.manual/manual.yml
jq.1.prebuilt
src/builtin.jq