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