func (udc *UpsideDownCouch) dumpPrefix(kvreader store.KVReader, rv chan interface{}, prefix []byte) { start := prefix if start == nil { start = []byte{0} } it := kvreader.Iterator(start) defer func() { cerr := it.Close() if cerr != nil { rv <- cerr } }() key, val, valid := it.Current() for valid { if prefix != nil && !bytes.HasPrefix(key, prefix) { break } row, err := ParseFromKeyValue(key, val) if err != nil { rv <- err return } rv <- row it.Next() key, val, valid = it.Current() } }
func (udc *UpsideDownCouch) loadSchema(kvreader store.KVReader) (err error) { keyPrefix := []byte{'f'} it := kvreader.Iterator(keyPrefix) defer func() { if cerr := it.Close(); err == nil && cerr != nil { err = cerr } }() it.Seek(keyPrefix) key, val, valid := it.Current() for valid { // stop when if !bytes.HasPrefix(key, keyPrefix) { break } var fieldRow *FieldRow fieldRow, err = NewFieldRowKV(key, val) if err != nil { return } udc.fieldIndexCache.AddExisting(fieldRow.name, fieldRow.index) it.Next() key, val, valid = it.Current() } keyPrefix = []byte{'v'} val, err = kvreader.Get(keyPrefix) if err != nil { return } var vr *VersionRow vr, err = NewVersionRowKV(keyPrefix, val) if err != nil { return } if vr.version != Version { err = IncompatibleVersion return } return }
func (udc *UpsideDownCouch) countDocs(kvreader store.KVReader) (count uint64, err error) { it := kvreader.Iterator([]byte{'b'}) defer func() { if cerr := it.Close(); err == nil && cerr != nil { err = cerr } }() key, _, valid := it.Current() for valid { if !bytes.HasPrefix(key, []byte{'b'}) { break } count++ it.Next() key, _, valid = it.Current() } return }