func dbMerge(rdb *C.DBEngine, key MVCCKey, value []byte) error { if len(key.Key) == 0 { return emptyKeyError() } // DBMerge calls memcpy() (by way of MemTable::Add) // when called, so we do not need to worry about these byte slices being // reclaimed by the GC. return statusToError(C.DBMerge(rdb, goToCKey(key), goToCSlice(value))) }
// Merge implements the RocksDB merge operator using the function goMergeInit // to initialize missing values and goMerge to merge the old and the given // value into a new value, which is then stored under key. // Currently 64-bit counter logic is implemented. See the documentation of // goMerge and goMergeInit for details. // // The key and value byte slices may be reused safely. merge takes a copy // of them before returning. func (r *RocksDB) Merge(key proto.EncodedKey, value []byte) error { if len(key) == 0 { return emptyKeyError() } // DBMerge calls memcpy() (by way of MemTable::Add) // when called, so we do not need to worry about these byte slices being // reclaimed by the GC. return statusToError(C.DBMerge(r.rdb, goToCSlice(key), goToCSlice(value))) }