Index: impl/memory/datastore_data.go |
diff --git a/impl/memory/datastore_data.go b/impl/memory/datastore_data.go |
index b0613e6defa409ea8f70fe6cc285e1fa5ad979fc..ff06a4722099e6dbd770ea2ca067ad5bd5a888a9 100644 |
--- a/impl/memory/datastore_data.go |
+++ b/impl/memory/datastore_data.go |
@@ -7,6 +7,7 @@ package memory |
import ( |
"bytes" |
"fmt" |
+ "strings" |
"sync" |
"sync/atomic" |
@@ -79,10 +80,10 @@ func (d *dataStoreData) setConsistent(always bool) { |
} |
} |
-func (d *dataStoreData) addIndexes(ns string, idxs []*ds.IndexDefinition) { |
+func (d *dataStoreData) addIndexes(idxs []*ds.IndexDefinition) { |
d.Lock() |
defer d.Unlock() |
- addIndexes(d.head, d.aid, ns, idxs) |
+ addIndexes(d.head, d.aid, idxs) |
} |
func (d *dataStoreData) setAutoIndex(enable bool) { |
@@ -105,7 +106,7 @@ func (d *dataStoreData) maybeAutoIndex(err error) bool { |
return false |
} |
- d.addIndexes(mi.ns, []*ds.IndexDefinition{mi.Missing}) |
+ d.addIndexes([]*ds.IndexDefinition{mi.Missing}) |
return true |
} |
@@ -165,6 +166,13 @@ func (d *dataStoreData) catchupIndexes() { |
d.snap = d.head.Snapshot() |
} |
+func (d *dataStoreData) namespaces() []string { |
+ d.rwlock.Lock() |
+ defer d.rwlock.Unlock() |
+ |
+ return namespaces(d.head) |
+} |
+ |
/////////////////////////// indexes(dataStoreData) //////////////////////////// |
func groupMetaKey(key *ds.Key) []byte { |
@@ -570,3 +578,25 @@ func rpm(data []byte) (ds.PropertyMap, error) { |
return serialize.ReadPropertyMap(bytes.NewBuffer(data), |
serialize.WithContext, "", "") |
} |
+ |
+func namespaces(store *memStore) []string { |
+ var namespaces []string |
+ for _, c := range store.GetCollectionNames() { |
+ ns, has := trimPrefix(c, "ents:") |
+ if !has { |
+ if len(namespaces) > 0 { |
+ break |
+ } |
+ continue |
+ } |
+ namespaces = append(namespaces, ns) |
+ } |
+ return namespaces |
+} |
+ |
+func trimPrefix(v, p string) (string, bool) { |
+ if strings.HasPrefix(v, p) { |
+ return v[len(p):], true |
+ } |
+ return v, false |
+} |