diff --git a/index/store/moss/lower.go b/index/store/moss/lower.go index 6f1b1dcf..2aff2aea 100644 --- a/index/store/moss/lower.go +++ b/index/store/moss/lower.go @@ -102,8 +102,9 @@ type llStore struct { // llSnapshot represents a lower-level snapshot, wrapping a bleve // store.KVReader, and implements the moss.Snapshot interface. type llSnapshot struct { - llStore *llStore // Holds 1 refs on the llStore. - kvReader store.KVReader + llStore *llStore // Holds 1 refs on the llStore. + kvReader store.KVReader + childSnapshots map[string]*llSnapshot m sync.Mutex // Protects fields that follow. refs int @@ -316,6 +317,29 @@ func (llss *llSnapshot) decRef() { llss.m.Unlock() } +// ChildCollectionNames returns an array of child collection name strings. +func (llss *llSnapshot) ChildCollectionNames() ([]string, error) { + var childCollections = make([]string, len(llss.childSnapshots)) + idx := 0 + for name, _ := range llss.childSnapshots { + childCollections[idx] = name + idx++ + } + return childCollections, nil +} + +// ChildCollectionSnapshot returns a Snapshot on a given child +// collection by its name. +func (llss *llSnapshot) ChildCollectionSnapshot(childCollectionName string) ( + moss.Snapshot, error) { + childSnapshot, exists := llss.childSnapshots[childCollectionName] + if !exists { + return nil, nil + } + childSnapshot.addRef() + return childSnapshot, nil +} + func (llss *llSnapshot) Close() error { llss.decRef()