@@ -58,7 +58,11 @@ func NewSearchString(sctx *super.Context, s string, e Evaluator) Evaluator {
5858}
5959
6060func (s * search ) Eval (this vector.Any ) vector.Any {
61- return vector .Apply (vector .ApplyRipUnions , s .eval , s .e .Eval (this ))
61+ return s .applyEval (s .e .Eval (this ))
62+ }
63+
64+ func (s * search ) applyEval (vec vector.Any ) vector.Any {
65+ return vector .Apply (vector .ApplyRipUnions | vector .ApplyRipFusions , s .eval , vec )
6266}
6367
6468func (s * search ) eval (vecs ... vector.Any ) vector.Any {
@@ -83,7 +87,7 @@ func (s *search) eval(vecs ...vector.Any) vector.Any {
8387 if index != nil {
8488 f = vector .Pick (f , index )
8589 }
86- if vec2 := s .eval (f ); vec2 .Kind () != vector .KindNull {
90+ if vec2 := s .applyEval (f ); vec2 .Kind () != vector .KindNull {
8791 out = vector .Or (out , FlattenBool (vec2 ))
8892 }
8993 }
@@ -95,8 +99,6 @@ func (s *search) eval(vecs ...vector.Any) vector.Any {
9599 case * vector.Map :
96100 return vector .Or (s .evalForList (vec .Keys , vec .Offsets , index , n ),
97101 s .evalForList (vec .Values , vec .Offsets , index , n ))
98- case * vector.Union :
99- return vector .Apply (vector .ApplyRipUnions , s .eval , vec )
100102 case * vector.Error :
101103 return s .eval (vec .Vals )
102104 }
@@ -119,8 +121,8 @@ func (s *search) evalForList(vec vector.Any, offsets, index []uint32, length uin
119121 for k := range n {
120122 index2 [k ] = k + start
121123 }
122- view := vector .Pick (vec , index2 )
123- if FlattenBool (s . eval ( view ) ).Bits .TrueCount () > 0 {
124+ vec := s . applyEval ( vector .Pick (vec , index2 ) )
125+ if FlattenBool (vec ).Bits .TrueCount () > 0 {
124126 out .Set (j )
125127 }
126128 }
@@ -157,7 +159,7 @@ func NewRegexpMatch(re *regexp.Regexp, e Evaluator) Evaluator {
157159}
158160
159161func (r * regexpMatch ) Eval (this vector.Any ) vector.Any {
160- return vector .Apply (vector .ApplyRipUnions , r .eval , r .e .Eval (this ))
162+ return vector .Apply (vector .ApplyRipUnions | vector . ApplyRipFusions , r .eval , r .e .Eval (this ))
161163}
162164
163165func (r * regexpMatch ) eval (vecs ... vector.Any ) vector.Any {
0 commit comments