func (fs *Datastore) Query(q query.Query) (query.Results, error) { if (q.Prefix != "" && q.Prefix != "/") || len(q.Filters) > 0 || len(q.Orders) > 0 || q.Limit > 0 || q.Offset > 0 || !q.KeysOnly { // TODO this is overly simplistic, but the only caller is // `ipfs refs local` for now, and this gets us moving. return nil, errors.New("flatfs only supports listing all keys in random order") } // TODO this dumb implementation gathers all keys into a single slice. root, err := os.Open(fs.path) if err != nil { return nil, err } defer root.Close() var res []query.Entry prefixes, err := root.Readdir(0) if err != nil { return nil, err } for _, fi := range prefixes { var err error res, err = fs.enumerateKeys(fi, res) if err != nil { return nil, err } } return query.ResultsWithEntries(q, res), nil }
// Query implements Datastore.Query func (d *MapDatastore) Query(q dsq.Query) (dsq.Results, error) { re := make([]dsq.Entry, 0, len(d.values)) for k, v := range d.values { re = append(re, dsq.Entry{Key: k.String(), Value: v}) } r := dsq.ResultsWithEntries(q, re) r = dsq.NaiveQueryApply(q, r) return r, nil }
// Query implements Datastore.Query func (d *NullDatastore) Query(q dsq.Query) (dsq.Results, error) { return dsq.ResultsWithEntries(q, nil), nil }