func (t *tOps) newIterator(f *tFile, slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { c, err := t.lookup(f) if err != nil { return iterator.NewEmptyIterator(err) } iter := c.Value().(*table.Reader).NewIterator(slice, ro) iter.SetReleaser(c) return iter }
// NewIterator returns an iterator for the latest snapshot of the // uderlying DB. // The returned iterator is not goroutine-safe, but it is safe to use // multiple iterators concurrently, with each in a dedicated goroutine. // It is also safe to use an iterator concurrently with modifying its // underlying DB. The resultant key/value pairs are guaranteed to be // consistent. // // Slice allows slicing the iterator to only contains keys in the given // range. A nil Range.Start is treated as a key before all keys in the // DB. And a nil Range.Limit is treated as a key after all keys in // the DB. // // The iterator must be released after use, by calling Release method. // // Also read Iterator documentation of the leveldb/iterator package. func (d *DB) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { if err := d.ok(); err != nil { return iterator.NewEmptyIterator(err) } p := d.newSnapshot() defer p.Release() return p.NewIterator(slice, ro) }