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) backIndexRowForDoc(kvreader store.KVReader, docID string) (*BackIndexRow, error) { // use a temporary row structure to build key tempRow := &BackIndexRow{ doc: []byte(docID), } key := tempRow.Key() value, err := kvreader.Get(key) if err != nil { return nil, err } if value == nil { return nil, nil } backIndexRow, err := NewBackIndexRowKV(key, value) if err != nil { return nil, err } return backIndexRow, nil }