From 1e80f5a50ef00137fd78e833baadf0ea5c8c02e6 Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Tue, 12 May 2026 15:42:31 -0700 Subject: [PATCH] fix: avoid extra nil entries in value projection results --- interpreter.go | 2 +- interpreter_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/interpreter.go b/interpreter.go index 13c7460..7e9dab1 100644 --- a/interpreter.go +++ b/interpreter.go @@ -295,7 +295,7 @@ func (intr *treeInterpreter) Execute(node ASTNode, value interface{}) (interface if !ok { return nil, nil } - values := make([]interface{}, len(mapType)) + values := make([]interface{}, 0, len(mapType)) for _, value := range mapType { values = append(values, value) } diff --git a/interpreter_test.go b/interpreter_test.go index 76e0c5d..0637818 100644 --- a/interpreter_test.go +++ b/interpreter_test.go @@ -181,6 +181,15 @@ func TestCanSupportSliceOfStructsWithFunctions(t *testing.T) { assert.Equal(result.(float64), 2.0) } +func TestValueProjectionDoesNotEmitExtraNulls(t *testing.T) { + assert := assert.New(t) + var data interface{} + assert.Nil(json.Unmarshal([]byte(`{"a": "x", "b": "y"}`), &data)) + result, err := Search("*.to_string(@)", data) + assert.Nil(err) + assert.ElementsMatch([]interface{}{"x", "y"}, result) +} + func BenchmarkInterpretSingleFieldStruct(b *testing.B) { assert := assert.New(b) intr := newInterpreter()