Index: service/datastore/datastore.go |
diff --git a/service/datastore/datastore.go b/service/datastore/datastore.go |
index 306df526153e401e75e64126194539ade80c206c..1c2691a387a4e1e4d3699b9d2aed6f7fd89d1950 100644 |
--- a/service/datastore/datastore.go |
+++ b/service/datastore/datastore.go |
@@ -147,19 +147,20 @@ func (d *datastoreImpl) Run(q *Query, cbIface interface{}) error { |
} |
if isKey { |
- return d.RawInterface.Run(fq, func(k *Key, _ PropertyMap, gc CursorCB) error { |
+ err = d.RawInterface.Run(fq, func(k *Key, _ PropertyMap, gc CursorCB) error { |
return cb(reflect.ValueOf(k), gc) |
}) |
+ } else { |
+ err = d.RawInterface.Run(fq, func(k *Key, pm PropertyMap, gc CursorCB) error { |
+ itm := mat.newElem() |
+ if err := mat.setPM(itm, pm); err != nil { |
+ return err |
+ } |
+ mat.setKey(itm, k) |
+ return cb(itm, gc) |
+ }) |
} |
- |
- return d.RawInterface.Run(fq, func(k *Key, pm PropertyMap, gc CursorCB) error { |
- itm := mat.newElem() |
- if err := mat.setPM(itm, pm); err != nil { |
- return err |
- } |
- mat.setKey(itm, k) |
- return cb(itm, gc) |
- }) |
+ return filterStop(err) |
} |
func (d *datastoreImpl) Count(q *Query) (int64, error) { |
@@ -249,7 +250,7 @@ func (d *datastoreImpl) ExistsMulti(keys []*Key) (BoolList, error) { |
lme := errors.NewLazyMultiError(len(keys)) |
ret := make(BoolList, len(keys)) |
i := 0 |
- err := d.RawInterface.GetMulti(keys, nil, func(_ PropertyMap, err error) error { |
+ err := filterStop(d.RawInterface.GetMulti(keys, nil, func(_ PropertyMap, err error) error { |
if err == nil { |
ret[i] = true |
} else if err != ErrNoSuchEntity { |
@@ -257,7 +258,7 @@ func (d *datastoreImpl) ExistsMulti(keys []*Key) (BoolList, error) { |
} |
i++ |
return nil |
- }) |
+ })) |
if err != nil { |
return ret, err |
} |
@@ -299,13 +300,13 @@ func (d *datastoreImpl) GetMulti(dst interface{}) error { |
lme := errors.NewLazyMultiError(len(keys)) |
i := 0 |
meta := NewMultiMetaGetter(pms) |
- err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error) error { |
+ err = filterStop(d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error) error { |
if !lme.Assign(i, err) { |
lme.Assign(i, mat.setPM(slice.Index(i), pm)) |
} |
i++ |
return nil |
- }) |
+ })) |
if err == nil { |
err = lme.Get() |
@@ -324,13 +325,13 @@ func (d *datastoreImpl) PutMulti(src interface{}) error { |
lme := errors.NewLazyMultiError(len(keys)) |
i := 0 |
- err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) error { |
+ err = filterStop(d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) error { |
if !lme.Assign(i, err) && key != keys[i] { |
mat.setKey(slice.Index(i), key) |
} |
i++ |
return nil |
- }) |
+ })) |
if err == nil { |
err = lme.Get() |
@@ -341,11 +342,11 @@ func (d *datastoreImpl) PutMulti(src interface{}) error { |
func (d *datastoreImpl) DeleteMulti(keys []*Key) (err error) { |
lme := errors.NewLazyMultiError(len(keys)) |
i := 0 |
- extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) error { |
+ extErr := filterStop(d.RawInterface.DeleteMulti(keys, func(internalErr error) error { |
lme.Assign(i, internalErr) |
i++ |
return nil |
- }) |
+ })) |
err = lme.Get() |
if err == nil { |
err = extErr |
@@ -439,3 +440,10 @@ func FindAndParseIndexYAML(path string) ([]*IndexDefinition, error) { |
currentDir = filepath.Dir(currentDir) |
} |
} |
+ |
+func filterStop(err error) error { |
+ if err == Stop { |
+ err = nil |
+ } |
+ return err |
+} |