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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 return errors.SingleError(d.DeleteMulti([]*Key{key})) | 192 return errors.SingleError(d.DeleteMulti([]*Key{key})) |
193 } | 193 } |
194 | 194 |
195 func (d *datastoreImpl) GetMulti(dst interface{}) error { | 195 func (d *datastoreImpl) GetMulti(dst interface{}) error { |
196 slice := reflect.ValueOf(dst) | 196 slice := reflect.ValueOf(dst) |
197 mat := parseMultiArg(slice.Type()) | 197 mat := parseMultiArg(slice.Type()) |
198 if !mat.valid { | 198 if !mat.valid { |
199 return fmt.Errorf("invalid GetMulti input type: %T", dst) | 199 return fmt.Errorf("invalid GetMulti input type: %T", dst) |
200 } | 200 } |
201 | 201 |
202 » keys, pms, err := mat.GetKeysPMs(d.aid, d.ns, slice) | 202 » keys, pms, err := mat.GetKeysPMs(d.aid, d.ns, slice, true) |
203 if err != nil { | 203 if err != nil { |
204 return err | 204 return err |
205 } | 205 } |
206 | 206 |
207 lme := errors.NewLazyMultiError(len(keys)) | 207 lme := errors.NewLazyMultiError(len(keys)) |
208 i := 0 | 208 i := 0 |
209 meta := NewMultiMetaGetter(pms) | 209 meta := NewMultiMetaGetter(pms) |
210 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { | 210 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { |
211 if !lme.Assign(i, err) { | 211 if !lme.Assign(i, err) { |
212 lme.Assign(i, mat.setPM(slice.Index(i), pm)) | 212 lme.Assign(i, mat.setPM(slice.Index(i), pm)) |
213 } | 213 } |
214 i++ | 214 i++ |
215 }) | 215 }) |
216 | 216 |
217 if err == nil { | 217 if err == nil { |
218 err = lme.Get() | 218 err = lme.Get() |
219 } | 219 } |
220 return err | 220 return err |
221 } | 221 } |
222 | 222 |
223 func (d *datastoreImpl) PutMulti(src interface{}) error { | 223 func (d *datastoreImpl) PutMulti(src interface{}) error { |
224 slice := reflect.ValueOf(src) | 224 slice := reflect.ValueOf(src) |
225 mat := parseMultiArg(slice.Type()) | 225 mat := parseMultiArg(slice.Type()) |
226 if !mat.valid { | 226 if !mat.valid { |
227 return fmt.Errorf("invalid PutMulti input type: %T", src) | 227 return fmt.Errorf("invalid PutMulti input type: %T", src) |
228 } | 228 } |
229 | 229 |
230 » keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice) | 230 » keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice, false) |
231 if err != nil { | 231 if err != nil { |
232 return err | 232 return err |
233 } | 233 } |
234 | 234 |
235 lme := errors.NewLazyMultiError(len(keys)) | 235 lme := errors.NewLazyMultiError(len(keys)) |
236 i := 0 | 236 i := 0 |
237 err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) { | 237 err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) { |
238 if key != keys[i] { | 238 if key != keys[i] { |
239 mat.setKey(slice.Index(i), key) | 239 mat.setKey(slice.Index(i), key) |
240 } | 240 } |
(...skipping 17 matching lines...) Expand all Loading... |
258 err = lme.Get() | 258 err = lme.Get() |
259 if err == nil { | 259 if err == nil { |
260 err = extErr | 260 err = extErr |
261 } | 261 } |
262 return | 262 return |
263 } | 263 } |
264 | 264 |
265 func (d *datastoreImpl) Raw() RawInterface { | 265 func (d *datastoreImpl) Raw() RawInterface { |
266 return d.RawInterface | 266 return d.RawInterface |
267 } | 267 } |
OLD | NEW |