Index: impl/memory/datastore_query_execution.go |
diff --git a/impl/memory/datastore_query_execution.go b/impl/memory/datastore_query_execution.go |
index eb42c780c76f2ec9ec5e5afea09ca7f7a01f2948..6fdd28bbf68fc7bcfee0c77429739309b7a770e5 100644 |
--- a/impl/memory/datastore_query_execution.go |
+++ b/impl/memory/datastore_query_execution.go |
@@ -22,7 +22,7 @@ type queryStrategy interface { |
// - key is the decoded Key from the index row (the last item in rawData and |
// decodedProps) |
// - gc is the getCursor function to be passed to the user's callback |
- handle(rawData [][]byte, decodedProps []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) bool |
+ handle(rawData [][]byte, decodedProps []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) error |
} |
type projectionLookup struct { |
@@ -60,7 +60,7 @@ func newProjectionStrategy(fq *ds.FinalizedQuery, rq *reducedQuery, cb ds.RawRun |
return ret |
} |
-func (s *projectionStrategy) handle(rawData [][]byte, decodedProps []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) bool { |
+func (s *projectionStrategy) handle(rawData [][]byte, decodedProps []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) error { |
projectedRaw := [][]byte(nil) |
if s.distinct != nil { |
projectedRaw = make([][]byte, len(decodedProps)) |
@@ -74,7 +74,7 @@ func (s *projectionStrategy) handle(rawData [][]byte, decodedProps []ds.Property |
} |
if s.distinct != nil { |
if !s.distinct.Add(string(serialize.Join(projectedRaw...))) { |
- return true |
+ return nil |
} |
} |
return s.cb(key, pmap, gc) |
@@ -86,9 +86,9 @@ type keysOnlyStrategy struct { |
dedup stringset.Set |
} |
-func (s *keysOnlyStrategy) handle(rawData [][]byte, _ []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) bool { |
+func (s *keysOnlyStrategy) handle(rawData [][]byte, _ []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) error { |
if !s.dedup.Add(string(rawData[len(rawData)-1])) { |
- return true |
+ return nil |
} |
return s.cb(key, nil, gc) |
} |
@@ -110,16 +110,16 @@ func newNormalStrategy(aid, ns string, cb ds.RawRunCB, head *memStore) queryStra |
return &normalStrategy{cb, aid, ns, coll, stringset.New(0)} |
} |
-func (s *normalStrategy) handle(rawData [][]byte, _ []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) bool { |
+func (s *normalStrategy) handle(rawData [][]byte, _ []ds.Property, key *ds.Key, gc func() (ds.Cursor, error)) error { |
rawKey := rawData[len(rawData)-1] |
if !s.dedup.Add(string(rawKey)) { |
- return true |
+ return nil |
} |
rawEnt := s.head.Get(rawKey) |
if rawEnt == nil { |
// entity doesn't exist at head |
- return true |
+ return nil |
} |
pm, err := serialize.ReadPropertyMap(bytes.NewBuffer(rawEnt), serialize.WithoutContext, s.aid, s.ns) |
memoryCorruption(err) |
@@ -171,9 +171,9 @@ func countQuery(fq *ds.FinalizedQuery, aid, ns string, isTxn bool, idx, head *me |
return |
} |
} |
- err = executeQuery(fq, aid, ns, isTxn, idx, head, func(_ *ds.Key, _ ds.PropertyMap, _ ds.CursorCB) bool { |
+ err = executeQuery(fq, aid, ns, isTxn, idx, head, func(_ *ds.Key, _ ds.PropertyMap, _ ds.CursorCB) error { |
ret++ |
- return true |
+ return nil |
}) |
return |
} |
@@ -225,14 +225,14 @@ func executeQuery(fq *ds.FinalizedQuery, aid, ns string, isTxn bool, idx, head * |
} |
} |
- multiIterate(idxs, func(suffix []byte) bool { |
+ return multiIterate(idxs, func(suffix []byte) error { |
if offset > 0 { |
offset-- |
- return true |
+ return nil |
} |
if hasLimit { |
if limit <= 0 { |
- return false |
+ return ds.Stop |
} |
limit-- |
} |
@@ -248,6 +248,4 @@ func executeQuery(fq *ds.FinalizedQuery, aid, ns string, isTxn bool, idx, head * |
rawData, decodedProps, keyProp.Value().(*ds.Key), |
getCursorFn(suffix)) |
}) |
- |
- return nil |
} |