// AllRecords returns all the IDs of this index func (idx *ListIndex) AllRecords(opts *Options) ([][]byte, error) { var list [][]byte c := internal.Cursor{C: idx.IndexBucket.Cursor(), Reverse: opts != nil && opts.Reverse} for k, id := c.First(); k != nil; k, id = c.Next() { if id == nil || bytes.Equal(k, []byte("storm__ids")) { continue } if opts != nil && opts.Skip > 0 { opts.Skip-- continue } if opts != nil && opts.Limit == 0 { break } if opts != nil && opts.Limit > 0 { opts.Limit-- } list = append(list, id) } return list, nil }
func (q *query) query(tx *bolt.Tx, sink sink) error { bucketName := q.bucket if bucketName == "" { bucketName = sink.bucketName() } bucket := q.node.GetBucket(tx, bucketName) if q.limit == 0 { return q.sorter.flush(sink) } if bucket != nil { c := internal.Cursor{C: bucket.Cursor(), Reverse: q.reverse} for k, v := c.First(); k != nil; k, v = c.Next() { if v == nil { continue } stop, err := q.sorter.filter(sink, q.tree, bucket, k, v) if err != nil { return err } if stop { break } } } return q.sorter.flush(sink) }
// AllRecords returns all the IDs of this index func (idx *UniqueIndex) AllRecords(opts *Options) ([][]byte, error) { var list [][]byte c := internal.Cursor{C: idx.IndexBucket.Cursor(), Reverse: opts != nil && opts.Reverse} for val, ident := c.First(); val != nil; val, ident = c.Next() { if opts != nil && opts.Skip > 0 { opts.Skip-- continue } if opts != nil && opts.Limit == 0 { break } if opts != nil && opts.Limit > 0 { opts.Limit-- } list = append(list, ident) } return list, nil }
// All the IDs corresponding to the given value func (idx *ListIndex) All(value []byte, opts *Options) ([][]byte, error) { var list [][]byte c := idx.IndexBucket.Cursor() cur := internal.Cursor{C: c, Reverse: opts != nil && opts.Reverse} prefix := generatePrefix(value) k, id := c.Seek(prefix) if cur.Reverse { var count int for ; bytes.HasPrefix(k, prefix) && k != nil; k, _ = c.Next() { count++ } k, id = c.Prev() list = make([][]byte, 0, count) } for ; bytes.HasPrefix(k, prefix); k, id = cur.Next() { if opts != nil && opts.Skip > 0 { opts.Skip-- continue } if opts != nil && opts.Limit == 0 { break } if opts != nil && opts.Limit > 0 { opts.Limit-- } list = append(list, id) } return list, nil }