OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package datastore | 5 package datastore |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "reflect" | 9 "reflect" |
10 | 10 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 return true | 93 return true |
94 }) | 94 }) |
95 } | 95 } |
96 | 96 |
97 slice := v.Elem() | 97 slice := v.Elem() |
98 mat := parseMultiArg(slice.Type()) | 98 mat := parseMultiArg(slice.Type()) |
99 if !mat.valid || mat.newElem == nil { | 99 if !mat.valid || mat.newElem == nil { |
100 return fmt.Errorf("invalid GetAll input type: %T", dst) | 100 return fmt.Errorf("invalid GetAll input type: %T", dst) |
101 } | 101 } |
102 | 102 |
103 » lme := errors.LazyMultiError{Size: slice.Len()} | 103 » lme := errors.NewLazyMultiError(slice.Len()) |
104 i := 0 | 104 i := 0 |
105 err := d.RawInterface.Run(q, func(k Key, pm PropertyMap, _ CursorCB) boo
l { | 105 err := d.RawInterface.Run(q, func(k Key, pm PropertyMap, _ CursorCB) boo
l { |
106 slice.Set(reflect.Append(slice, mat.newElem())) | 106 slice.Set(reflect.Append(slice, mat.newElem())) |
107 itm := slice.Index(i) | 107 itm := slice.Index(i) |
108 mat.setKey(itm, k) | 108 mat.setKey(itm, k) |
109 lme.Assign(i, mat.setPM(itm, pm)) | 109 lme.Assign(i, mat.setPM(itm, pm)) |
110 i++ | 110 i++ |
111 return true | 111 return true |
112 }) | 112 }) |
113 if err == nil { | 113 if err == nil { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 mat := parseMultiArg(slice.Type()) | 149 mat := parseMultiArg(slice.Type()) |
150 if !mat.valid { | 150 if !mat.valid { |
151 return fmt.Errorf("invalid GetMulti input type: %T", dst) | 151 return fmt.Errorf("invalid GetMulti input type: %T", dst) |
152 } | 152 } |
153 | 153 |
154 keys, pms, err := mat.GetKeysPMs(d.NewKey, slice) | 154 keys, pms, err := mat.GetKeysPMs(d.NewKey, slice) |
155 if err != nil { | 155 if err != nil { |
156 return err | 156 return err |
157 } | 157 } |
158 | 158 |
159 » lme := errors.LazyMultiError{Size: len(keys)} | 159 » lme := errors.NewLazyMultiError(len(keys)) |
160 i := 0 | 160 i := 0 |
161 meta := NewMultiMetaGetter(pms) | 161 meta := NewMultiMetaGetter(pms) |
162 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { | 162 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { |
163 if !lme.Assign(i, err) { | 163 if !lme.Assign(i, err) { |
164 lme.Assign(i, mat.setPM(slice.Index(i), pm)) | 164 lme.Assign(i, mat.setPM(slice.Index(i), pm)) |
165 } | 165 } |
166 i++ | 166 i++ |
167 }) | 167 }) |
168 | 168 |
169 if err == nil { | 169 if err == nil { |
170 err = lme.Get() | 170 err = lme.Get() |
171 } | 171 } |
172 return err | 172 return err |
173 } | 173 } |
174 | 174 |
175 func (d *datastoreImpl) PutMulti(src interface{}) error { | 175 func (d *datastoreImpl) PutMulti(src interface{}) error { |
176 slice := reflect.ValueOf(src) | 176 slice := reflect.ValueOf(src) |
177 mat := parseMultiArg(slice.Type()) | 177 mat := parseMultiArg(slice.Type()) |
178 if !mat.valid { | 178 if !mat.valid { |
179 return fmt.Errorf("invalid PutMulti input type: %T", src) | 179 return fmt.Errorf("invalid PutMulti input type: %T", src) |
180 } | 180 } |
181 | 181 |
182 keys, vals, err := mat.GetKeysPMs(d.NewKey, slice) | 182 keys, vals, err := mat.GetKeysPMs(d.NewKey, slice) |
183 if err != nil { | 183 if err != nil { |
184 return err | 184 return err |
185 } | 185 } |
186 | 186 |
187 » lme := errors.LazyMultiError{Size: len(keys)} | 187 » lme := errors.NewLazyMultiError(len(keys)) |
188 i := 0 | 188 i := 0 |
189 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { | 189 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { |
190 if key != keys[i] { | 190 if key != keys[i] { |
191 mat.setKey(slice.Index(i), key) | 191 mat.setKey(slice.Index(i), key) |
192 } | 192 } |
193 lme.Assign(i, err) | 193 lme.Assign(i, err) |
194 i++ | 194 i++ |
195 }) | 195 }) |
196 | 196 |
197 if err == nil { | 197 if err == nil { |
198 err = lme.Get() | 198 err = lme.Get() |
199 } | 199 } |
200 return err | 200 return err |
201 } | 201 } |
202 | 202 |
203 func (d *datastoreImpl) DeleteMulti(keys []Key) (err error) { | 203 func (d *datastoreImpl) DeleteMulti(keys []Key) (err error) { |
204 » lme := errors.LazyMultiError{Size: len(keys)} | 204 » lme := errors.NewLazyMultiError(len(keys)) |
205 i := 0 | 205 i := 0 |
206 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) { | 206 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) { |
207 lme.Assign(i, internalErr) | 207 lme.Assign(i, internalErr) |
208 i++ | 208 i++ |
209 }) | 209 }) |
210 err = lme.Get() | 210 err = lme.Get() |
211 if err == nil { | 211 if err == nil { |
212 err = extErr | 212 err = extErr |
213 } | 213 } |
214 return | 214 return |
215 } | 215 } |
216 | 216 |
217 func (d *datastoreImpl) Raw() RawInterface { | 217 func (d *datastoreImpl) Raw() RawInterface { |
218 return d.RawInterface | 218 return d.RawInterface |
219 } | 219 } |
OLD | NEW |