func TestMerge(t *testing.T) { for _, m := range mergeTests { got := proto.Clone(m.dst) proto.Merge(got, m.src) if !proto.Equal(got, m.want) { t.Errorf("Merge(%v, %v)\n got %v\nwant %v\n", m.dst, m.src, got, m.want) } } }
// DeleteMulti is a batch version of Delete. func (t *Transaction) DeleteMulti(keys []*Key) error { if t.id == nil { return errExpiredTransaction } mutation, err := deleteMutation(keys) if err != nil { return err } proto.Merge(t.mutation, mutation) return nil }
// PutMulti is a batch version of Put. One PendingKey is returned for each // element of src in the same order. func (t *Transaction) PutMulti(keys []*Key, src interface{}) ([]*PendingKey, error) { if t.id == nil { return nil, errExpiredTransaction } mutation, err := putMutation(keys, src) if err != nil { return nil, err } proto.Merge(t.mutation, mutation) // Prepare the returned handles, pre-populating where possible. ret := make([]*PendingKey, len(keys)) for _, key := range keys { h := &PendingKey{} if key.Incomplete() { // This key will be in the final commit result. t.pending = append(t.pending, h) } else { h.key = key } ret = append(ret, h) } return ret, nil }