// walkCompIdxs walks the table of compound indexes in the store. If `endsWith` // is provided, this will only walk over compound indexes which match // Kind, Ancestor, and whose SortBy has `endsWith.SortBy` as a suffix. func walkCompIdxs(store *memStore, endsWith *ds.IndexDefinition, cb func(*ds.IndexDefinition) bool) { idxColl := store.GetCollection("idx") if idxColl == nil { return } itrDef := iterDefinition{c: idxColl} if endsWith != nil { full := serialize.ToBytes(*endsWith.Flip()) // chop off the null terminating byte itrDef.prefix = full[:len(full)-1] } it := itrDef.mkIter() defer it.stop() for !it.stopped { it.next(nil, func(i *gkvlite.Item) { if i == nil { return } qi, err := serialize.ReadIndexDefinition(bytes.NewBuffer(i.Key)) memoryCorruption(err) if !cb(qi.Flip()) { it.stop() } }) } }