int SSDB::zincr(const Bytes &name, const Bytes &key, int64_t by, std::string *new_val, char log_type){ Transaction trans(binlogs); int64_t val; std::string old; int ret = this->zget(name, key, &old); if(ret == -1){ return -1; }else if(ret == 0){ val = by; }else{ val = str_to_int64(old.data(), old.size()) + by; } *new_val = int64_to_str(val); ret = zset_one(this, name, key, *new_val, log_type); if(ret >= 0){ if(ret > 0){ if(incr_zsize(this, name, ret) == -1){ return -1; } } leveldb::Status s = binlogs->commit(); if(!s.ok()){ log_error("zset error: %s", s.ToString().c_str()); return -1; } } return ret; }
int SSDB::multi_zset(const Bytes &name, const std::vector<Bytes> &kvs, int offset, char log_type){ Transaction trans(binlogs); int ret = 0; std::vector<Bytes>::const_iterator it; it = kvs.begin() + offset; for(; it != kvs.end(); it += 2){ const Bytes &key = *it; const Bytes &score = *(it + 1); int tmp = zset_one(this, name, key, score, log_type); if(tmp == -1){ return -1; } ret += tmp; } if(ret >= 0){ if(ret > 0){ if(incr_zsize(this, name, ret) == -1){ return -1; } } leveldb::Status s = binlogs->commit(); if(!s.ok()){ log_error("zdel error: %s", s.ToString().c_str()); return -1; } } return ret; }
int SSDB::zdel(const Bytes &name, const Bytes &key, char log_type){ Transaction trans(binlogs); int ret = zdel_one(this, name, key, log_type); if(ret >= 0){ if(ret > 0){ if(incr_zsize(this, name, -ret) == -1){ return -1; } } leveldb::Status s = binlogs->commit(); if(!s.ok()){ log_error("zdel error: %s", s.ToString().c_str()); return -1; } } return ret; }