func()

in banyand/tsdb/seriesdb.go [540:585]


func (s *seriesDB) filterSeries(ctx context.Context, path Path, filter index.Filter) (SeriesList, error) {
	var seriesList SeriesList
	var err error
	if filter == nil {
		return s.List(ctx, path)
	}
	var pl posting.List
	if pl, err = filter.Execute(func(ruleType databasev1.IndexRule_Type) (index.Searcher, error) {
		switch ruleType {
		case databasev1.IndexRule_TYPE_TREE:
			return s.lsmIndex, nil
		case databasev1.IndexRule_TYPE_INVERTED:
			return s.invertedIndex, nil
		default:
			return nil, errUnspecifiedIndexType
		}
	}, 0); err != nil {
		return nil, err
	}

	if len(path.seekKey) == 0 {
		iter := pl.Iterator()
		defer func() {
			err = multierr.Append(err, iter.Close())
		}()
		for iter.Next() {
			var series Series
			if series, err = s.GetByID(common.SeriesID(iter.Current())); err != nil {
				return nil, err
			}
			seriesList = append(seriesList, series)
		}
		return seriesList, err
	}
	if seriesList, err = s.List(ctx, path); err != nil {
		return nil, err
	}
	// Remove a series from seriesList if its ID is not in the pl
	for i := 0; i < len(seriesList); i++ {
		if !pl.Contains(uint64(seriesList[i].ID())) {
			seriesList = append(seriesList[:i], seriesList[i+1:]...)
			i--
		}
	}
	return seriesList, nil
}