// Helper function to perform a primary index scan on the given keyspace. Returns a map of // all primary key names. func doPrimaryIndexScan(t *testing.T, b datastore.Keyspace) (m map[string]bool, excp errors.Error) { conn := datastore.NewIndexConnection(&testingContext{t}) m = map[string]bool{} nitems, excp := b.Count() if excp != nil { t.Fatalf("failed to get keyspace count") return } indexers, excp := b.Indexers() if excp != nil { t.Fatalf("failed to retrieve indexers") return } pindexes, excp := indexers[0].PrimaryIndexes() if excp != nil || len(pindexes) < 1 { t.Fatalf("failed to retrieve primary indexes") return } idx := pindexes[0] go idx.ScanEntries("", nitems, datastore.UNBOUNDED, nil, conn) for { v, ok := <-conn.EntryChannel() if !ok { // Channel closed => Scan complete return } m[v.PrimaryKey] = true } }
// Helper function to scan the primary index of given keyspace with given span func doIndexScan(t *testing.T, b datastore.Keyspace, span *datastore.Span) ( e []*datastore.IndexEntry, excp errors.Error) { conn := datastore.NewIndexConnection(&testingContext{t}) e = []*datastore.IndexEntry{} nitems, excp := b.Count() if excp != nil { t.Fatalf("failed to get keyspace count") return } indexers, excp := b.Indexers() if excp != nil { t.Fatalf("failed to retrieve indexers") return } idx, excp := indexers[0].IndexByName("#primary") if excp != nil { t.Fatalf("failed to retrieve primary index") return } go idx.Scan("", span, false, nitems, datastore.UNBOUNDED, nil, conn) for { entry, ok := <-conn.EntryChannel() if !ok { return } e = append(e, entry) } return }