diff --git a/expr/builtins/builtins_test.go b/expr/builtins/builtins_test.go index bdb0843..4b704f7 100644 --- a/expr/builtins/builtins_test.go +++ b/expr/builtins/builtins_test.go @@ -275,6 +275,8 @@ var builtinTests = []testBuiltins{ {`filter(split("apples,oranges",","),"ora%")`, value.NewStringsValue([]string{"apples"})}, {`filter(split("apples,oranges",","),["ora%","ban*"])`, value.NewStringsValue([]string{"apples"})}, {`filter(split("apples,oranges",","), ["ora*","notmatch","stuff"] )`, value.NewStringsValue([]string{"apples"})}, + {`filter(split("apples,oranges,",","), [""] )`, value.NewStringsValue([]string{"apples", "oranges"})}, + {`filter("apples","")`, value.NewStringValue("apples")}, {`filter("apples","ban*")`, value.NewStringValue("apples")}, {`filter("apples","ban")`, value.NewStringValue("apples")}, {`filter("apples","app*")`, value.NilValueVal}, diff --git a/expr/builtins/filter.go b/expr/builtins/filter.go index e84e7b7..3a7f2be 100644 --- a/expr/builtins/filter.go +++ b/expr/builtins/filter.go @@ -107,6 +107,11 @@ func FilterEval(ctx expr.EvalContext, vals []value.Value) (value.Value, bool) { filteredOut = true break } + } else if filter == "" { + if rowKey == "" && v != nil { + filteredOut = true + break + } } else { if strings.HasPrefix(rowKey, filter) && v != nil { filteredOut = true @@ -132,6 +137,11 @@ func FilterEval(ctx expr.EvalContext, vals []value.Value) (value.Value, bool) { anyMatches = true break } + } else if filter == "" { + if val.Val() == "" { + anyMatches = true + break + } } else { if strings.HasPrefix(val.Val(), filter) { anyMatches = true @@ -157,6 +167,11 @@ func FilterEval(ctx expr.EvalContext, vals []value.Value) (value.Value, bool) { filteredOut = true break } + } else if filter == "" { + if sv == "" { + filteredOut = true + break + } } else { if strings.HasPrefix(sv, filter) && sv != "" { filteredOut = true