diff --git a/datastore.go b/datastore.go index 78cc5da..199b849 100644 --- a/datastore.go +++ b/datastore.go @@ -174,6 +174,13 @@ func (a *accessor) queryOrig(q dsq.Query) (dsq.Results, error) { qr = dsq.NaiveFilter(qr, f) } for _, o := range q.Orders { + // leveldb iterators return entries sorted lexicographically by key, so we can bypass the naive ordering + // for OrderByKey. Since OrderByKey.Sort() has as struct receiver, the value stored in q.Orders can be a + // pointer or a struct, so we need to check for both for correctness. + switch o.(type) { + case dsq.OrderByKey, *dsq.OrderByKey: + continue + } qr = dsq.NaiveOrder(qr, o) } return qr, nil