Fix deletion using assigning empty against arrays (fix #2051)
This commit is contained in:
1 parent
cd8898d5b9
commit
371abc73ba
2 files changed
+18
-5
No files matched your search
+5
-5
@@ -12,24 +12,24 @@ def add: reduce .[] as $x (null; . + $x);
|
|||||||
def del(f): delpaths([path(f)]);
|
def del(f): delpaths([path(f)]);
|
||||||
def _assign(paths; $value): reduce path(paths) as $p (.; setpath($p; $value));
|
def _assign(paths; $value): reduce path(paths) as $p (.; setpath($p; $value));
|
||||||
def _modify(paths; update):
|
def _modify(paths; update):
|
||||||
reduce path(paths) as $p (.;
|
reduce path(paths) as $p ([., []];
|
||||||
. as $dot
|
. as $dot
|
||||||
| null
|
| null
|
||||||
| label $out
|
| label $out
|
||||||
| ($dot | getpath($p)) as $v
|
| ($dot[0] | getpath($p)) as $v
|
||||||
| (
|
| (
|
||||||
( $$$$v
|
( $$$$v
|
||||||
| update
|
| update
|
||||||
| (., break $out) as $v
|
| (., break $out) as $v
|
||||||
| $$$$dot
|
| $$$$dot
|
||||||
| setpath($p; $v)
|
| setpath([0] + $p; $v)
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
$$$$dot
|
$$$$dot
|
||||||
| delpaths([$p])
|
| setpath([1]; .[1] + [$p])
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
) | . as $dot | $dot[0] | delpaths($dot[1]);
|
||||||
def map_values(f): .[] |= f;
|
def map_values(f): .[] |= f;
|
||||||
|
|
||||||
# recurse
|
# recurse
|
||||||
|
|||||||
@@ -1044,6 +1044,19 @@ def inc(x): x |= .+1; inc(.[].a)
|
|||||||
{"a":[{"b":5}]}
|
{"a":[{"b":5}]}
|
||||||
{"a":[{"c":3,"b":5}]}
|
{"a":[{"c":3,"b":5}]}
|
||||||
|
|
||||||
|
# #2051, deletion using assigning empty against arrays
|
||||||
|
(.[] | select(. >= 2)) |= empty
|
||||||
|
[1,5,3,0,7]
|
||||||
|
[1,0]
|
||||||
|
|
||||||
|
.[] |= select(. % 2 == 0)
|
||||||
|
[0,1,2,3,4,5]
|
||||||
|
[0,2,4]
|
||||||
|
|
||||||
|
.foo[1,4,2,3] |= empty
|
||||||
|
{"foo":[0,1,2,3,4,5]}
|
||||||
|
{"foo":[0,5]}
|
||||||
|
|
||||||
.[2][3] = 1
|
.[2][3] = 1
|
||||||
[4]
|
[4]
|
||||||
[4, null, [null, null, null, 1]]
|
[4, null, [null, null, null, 1]]
|
||||||
|
|||||||
Reference in new issue
Block a user