Fix #1784: inconsistent mapexcept behavior (#2004)

* Fix #1784

* test/cases/dsl-mapsum-mapdiff-mapexcept/0033/
This commit is contained in:
John Kerl 2026-03-02 23:41:32 -05:00 committed by GitHub
parent 5f14dbc752
commit 56add7d1f0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 1 deletions

View file

@ -222,6 +222,8 @@ func BIF_mapselect(mlrvals []*mlrval.Mlrval) *mlrval.Mlrval {
for _, element := range selectArg.AcquireArrayValue() {
if element.IsString() {
newKeys[element.AcquireStringValue()] = true
} else if element.IsInt() {
newKeys[element.String()] = true
} else {
return mlrval.FromNotStringError("mapselect", element)
}
@ -260,8 +262,10 @@ func BIF_mapexcept(mlrvals []*mlrval.Mlrval) *mlrval.Mlrval {
for _, element := range exceptArg.AcquireArrayValue() {
if element.IsString() {
newMap.Remove(element.AcquireStringValue())
} else if element.IsInt() {
newMap.Remove(element.String())
} else {
return mlrval.FromNotStringError("mapselect", element)
return mlrval.FromNotStringError("mapexcept", element)
}
}
} else {

View file

@ -0,0 +1 @@
mlr --from ${CASEDIR}/input --ojson put -f ${CASEDIR}/mlr

View file

@ -0,0 +1,23 @@
[
{
"x": "a.b.c.d.e.f",
"y": {
"1": "a",
"2": "b",
"3": "c",
"4": "d",
"5": "e",
"6": "f"
},
"z1": {
"2": "b",
"4": "d",
"6": "f"
},
"z2": {
"2": "b",
"4": "d",
"6": "f"
}
}
]

View file

@ -0,0 +1 @@
x=a.b.c.d.e.f

View file

@ -0,0 +1,4 @@
# Issue #1784: mapexcept with array of ints should work like mapexcept with individual ints
$y = splitnv($x, ".");
$z1 = mapexcept($y, 1, 3, 5);
$z2 = mapexcept($y, [1, 3, 5]);