Chromium Code Reviews| Index: service/datastore/datastore.go |
| diff --git a/service/datastore/datastore.go b/service/datastore/datastore.go |
| index 3db1919f3fc58a246e1216515b4076d6f58a38c6..6ded9554dbc2d809f932341baf424113e6a400b6 100644 |
| --- a/service/datastore/datastore.go |
| +++ b/service/datastore/datastore.go |
| @@ -182,6 +182,29 @@ func isOkType(v reflect.Type) bool { |
| return false |
| } |
| +func (d *datastoreImpl) ExistsMulti(keys []*Key) ([]bool, error) { |
| + lme := errors.NewLazyMultiError(len(keys)) |
| + ret := make([]bool, len(keys)) |
| + i := 0 |
| + err := d.RawInterface.GetMulti(keys, nil, func(_ PropertyMap, err error) { |
|
Vadim Sh.
2015/10/13 04:05:57
hm, it looks less magical than in tumble CL... Is
|
| + if err == nil { |
| + ret[i] = true |
| + } else if err != ErrNoSuchEntity { |
| + lme.Assign(i, err) |
| + } |
| + i++ |
| + }) |
| + if err != nil { |
| + return ret, err |
| + } |
| + return ret, lme.Get() |
| +} |
| + |
| +func (d *datastoreImpl) Exists(k *Key) (bool, error) { |
| + ret, err := d.ExistsMulti([]*Key{k}) |
| + return ret[0], errors.SingleError(err) |
| +} |
| + |
| func (d *datastoreImpl) Get(dst interface{}) (err error) { |
| if !isOkType(reflect.TypeOf(dst)) { |
| return fmt.Errorf("invalid Get input type: %T", dst) |