func dbGetProto(rdb *C.DBEngine, key MVCCKey, msg proto.Message) (ok bool, keyBytes, valBytes int64, err error) { if len(key.Key) == 0 { err = emptyKeyError() return } var result C.DBString if err = statusToError(C.DBGet(rdb, goToCKey(key), &result)); err != nil { return } if result.len <= 0 { msg.Reset() return } ok = true if msg != nil { // Make a byte slice that is backed by result.data. This slice // cannot live past the lifetime of this method, but we're only // using it to unmarshal the roachpb. data := cSliceToUnsafeGoBytes(C.DBSlice(result)) err = proto.Unmarshal(data, msg) } C.free(unsafe.Pointer(result.data)) keyBytes = int64(key.EncodedSize()) valBytes = int64(result.len) return }
func (r *rocksDBBatch) GetProto(key proto.EncodedKey, msg gogoproto.Message) ( ok bool, keyBytes, valBytes int64, err error) { if len(key) == 0 { err = emptyKeyError() return } var result C.DBString if err = statusToError(C.DBBatchGet(r.parent.rdb, r.batch, goToCSlice(key), &result)); err != nil { return } if result.len <= 0 { return } ok = true if msg != nil { // Make a byte slice that is backed by result.data. This slice // cannot live past the lifetime of this method, but we're only // using it to unmarshal the proto. data := cSliceToUnsafeGoBytes(C.DBSlice(result)) err = gogoproto.Unmarshal(data, msg) } C.free(unsafe.Pointer(result.data)) keyBytes = int64(len(key)) valBytes = int64(result.len) return }