(vecs ...vector.Any)
| 70 | } |
| 71 | |
| 72 | func (r *recordExpr) eval(vecs ...vector.Any) vector.Any { |
| 73 | r.fields = r.fields[:0] |
| 74 | clear(r.fieldIndexes) |
| 75 | r.fieldVecs = make([]vector.Any, 0, len(r.elems)) |
| 76 | length := vecs[0].Len() |
| 77 | for k, vec := range vecs { |
| 78 | switch elem := r.elems[k].(type) { |
| 79 | case *NoneElem: |
| 80 | r.addOrUpdateNone(elem.Name, elem.Type, length) |
| 81 | case *FieldElem: |
| 82 | r.addOrUpdateField(elem.Name, elem.Opt, vec) |
| 83 | case *SpreadElem: |
| 84 | r.spread(vec) |
| 85 | default: |
| 86 | panic(elem) |
| 87 | } |
| 88 | } |
| 89 | typ := r.sctx.MustLookupTypeRecord(r.fields) |
| 90 | return vector.NewRecord(typ, r.fieldVecs, vecs[0].Len()) |
| 91 | } |
| 92 | |
| 93 | func (r *recordExpr) addOrUpdateField(name string, opt bool, vec vector.Any) { |
| 94 | if i, ok := r.fieldIndexes[name]; ok { |
nothing calls this directly
no test coverage detected