func (t *tOps) createFrom(src iter.Iterator) (f *tFile, n int, err error) { w, err := t.create() if err != nil { return } defer func() { if err != nil { w.drop() } }() for src.Next() { err = w.add(src.Key(), src.Value()) if err != nil { return } } err = src.Error() if err != nil { return } n = w.tw.Len() f, err = w.finish() return }
// Get lookup for given key on the table. Get returns errors.ErrNotFound if // given key did not exist. func (t *Reader) Get(key []byte, ro opt.ReadOptionsGetter) (rkey, rvalue []byte, err error) { // create an iterator of index block index_iter := t.index.NewIterator() if !index_iter.Seek(key) { err = index_iter.Error() if err == nil { err = errors.ErrNotFound } return } // decode data block info bi := new(bInfo) _, err = bi.decodeFrom(index_iter.Value()) if err != nil { return } // get the data block if t.filter == nil || t.filter.KeyMayMatch(uint(bi.offset), key) { var it iter.Iterator var cache cache.Object it, cache, err = t.getDataIter(bi, ro) if err != nil { return } if cache != nil { defer cache.Release() } // seek to key if !it.Seek(key) { err = it.Error() if err == nil { err = errors.ErrNotFound } return } rkey, rvalue = it.Key(), it.Value() } else { err = errors.ErrNotFound } return }