| 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 |