From a0b9f2b0d34e11dccd5973bebb07814247f32bb3 Mon Sep 17 00:00:00 2001 From: rchunping Date: Fri, 10 May 2013 12:34:32 +0800 Subject: [PATCH] bug fix --- src/ds.c | 77 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/src/ds.c b/src/ds.c index 319b1df..c42adf8 100644 --- a/src/ds.c +++ b/src/ds.c @@ -95,7 +95,7 @@ void ds_exists(redisClient *c) ret = sdsempty(); ret = sdscatprintf(ret,"*%d\r\n",c->argc-1); - ret = sdscat(ret,str); + ret = sdscatsds(ret,str); addReplySds(c,ret); sdsfree(str); return ; @@ -121,9 +121,9 @@ void ds_hexists(redisClient *c) { sdsclear(key); key = sdscatlen(key,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - key = sdscat(key, c->argv[1]->ptr); + key = sdscatsds(key, c->argv[1]->ptr); key = sdscatlen(key, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - key = sdscat(key, c->argv[i]->ptr); + key = sdscatsds(key, c->argv[i]->ptr); leveldb_iter_seek(iter, key, sdslen(key)); if(leveldb_iter_valid(iter)){ @@ -155,7 +155,7 @@ void ds_hexists(redisClient *c) ret = sdsempty(); ret = sdscatprintf(ret,"*%d\r\n",c->argc-2); - ret = sdscat(ret,str); + ret = sdscatsds(ret,str); addReplySds(c,ret); sdsfree(str); return ; @@ -1095,7 +1095,7 @@ void ds_mget(redisClient *c) ret = sdsempty(); ret = sdscatprintf(ret,"*%d\r\n",c->argc-1); - ret = sdscat(ret,str); + ret = sdscatsds(ret,str); sdsfree(str); @@ -1200,10 +1200,24 @@ void ds_hincrby(redisClient *c) val_len = 0; keyword = sdsempty(); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[1]->ptr); + keyword = sdscatsds(keyword, c->argv[1]->ptr); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[2]->ptr); - + + //namesapce + leveldb_put(server.ds_db,server.woptions,keyword, sdslen(keyword), "1", 1,&err); + + if(err != NULL){ + addReplyError(c,err); + leveldb_free(err); + sdsfree(keyword); + return; + } + + + // member + keyword = sdscatsds(keyword, c->argv[2]->ptr); + + err = NULL; value = leveldb_get(server.ds_db, server.roptions, keyword, sdslen(keyword), &val_len, &err); if(err != NULL) { @@ -1275,9 +1289,9 @@ void ds_mhget(redisClient *c) sdsclear(keyword); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[i]->ptr); + keyword = sdscatsds(keyword, c->argv[i]->ptr); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[i+1]->ptr); + keyword = sdscatsds(keyword, c->argv[i+1]->ptr); //fprintf(stderr,"K:%s\n",keyword); @@ -1313,7 +1327,7 @@ void ds_mhget(redisClient *c) ret = sdsempty(); ret = sdscatprintf(ret,"*%d\r\n",(c->argc-1)/2); - ret = sdscat(ret,str); + ret = sdscatsds(ret,str); sdsfree(str); addReplySds(c,ret); @@ -1344,11 +1358,12 @@ void ds_hmget(redisClient *c) sdsclear(keyword); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, key); + keyword = sdscatsds(keyword, key); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[i]->ptr); + keyword = sdscatsds(keyword, c->argv[i]->ptr); value = leveldb_get(server.ds_db, server.roptions, keyword, sdslen(keyword), &val_len, &err); + if(err != NULL) { sdsfree(keyword); @@ -1380,7 +1395,7 @@ void ds_hmget(redisClient *c) ret = sdsempty(); ret = sdscatprintf(ret,"*%d\r\n",c->argc-2); - ret = sdscat(ret,str); + ret = sdscatsds(ret,str); sdsfree(str); addReplySds(c,ret); @@ -1405,7 +1420,7 @@ void ds_hmset(redisClient *c) key = (char *)c->argv[1]->ptr; keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, key); + keyword = sdscatsds(keyword, key); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); leveldb_writebatch_put(wb, keyword, sdslen(keyword), "1", 1); for(i=2; iargc; i++) @@ -1415,9 +1430,9 @@ void ds_hmset(redisClient *c) sdsclear(keyword); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, key); + keyword = sdscatsds(keyword, key); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - keyword = sdscat(keyword, field); + keyword = sdscatsds(keyword, field); leveldb_writebatch_put(wb, keyword, sdslen(keyword), value, sdslen((sds)value)); } sdsfree(keyword); @@ -1450,13 +1465,13 @@ void ds_hset(redisClient *c) str = sdsempty(); str = sdscatlen(str,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str, key); + str = sdscatsds(str, key); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); leveldb_writebatch_put(wb, str, sdslen(str), "1", 1); // append member - str = sdscat(str, field); + str = sdscatsds(str, field); leveldb_writebatch_put(wb, str, sdslen(str), value, sdslen((sds)value)); err = NULL; @@ -1494,7 +1509,7 @@ void ds_hsetnx(redisClient *c) val_len = 0; keyword = sdsempty(); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[1]->ptr); + keyword = sdscatsds(keyword, c->argv[1]->ptr); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); wb = leveldb_writebatch_create(); @@ -1502,7 +1517,7 @@ void ds_hsetnx(redisClient *c) leveldb_writebatch_put(wb, keyword, sdslen(keyword), "1", 1); // append hash field - keyword = sdscat(keyword, c->argv[2]->ptr); + keyword = sdscatsds(keyword, c->argv[2]->ptr); value = leveldb_get(server.ds_db, server.roptions, keyword, sdslen(keyword), &val_len, &err); if(err != NULL) @@ -1558,7 +1573,7 @@ void ds_hgetall(redisClient *c) str = sdsempty(); str = sdscatlen(str,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str, c->argv[1]->ptr); + str = sdscatsds(str, c->argv[1]->ptr); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); len = sdslen(str); keyword = zmalloc(len+1); @@ -1658,7 +1673,7 @@ void ds_hkeys(redisClient *c) str = sdsempty(); str = sdscatlen(str, KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str, c->argv[1]->ptr); + str = sdscatsds(str, c->argv[1]->ptr); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); len = sdslen(str); keyword = zmalloc(len+1); @@ -1730,7 +1745,7 @@ void ds_hvals(redisClient *c) str = sdsempty(); str = sdscatlen(str,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str, c->argv[1]->ptr); + str = sdscatsds(str, c->argv[1]->ptr); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); len = sdslen(str); keyword = zmalloc(len+1); @@ -1806,7 +1821,7 @@ void ds_hlen(redisClient *c) str = sdsempty(); str = sdscatlen(str, KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str, c->argv[1]->ptr); + str = sdscatsds(str, c->argv[1]->ptr); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); len = sdslen(str); keyword = zmalloc(len+1); @@ -1875,7 +1890,7 @@ void ds_hdel(redisClient *c) if(c->argc < 3) { keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[1]->ptr); + keyword = sdscatsds(keyword, c->argv[1]->ptr); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); @@ -1931,9 +1946,9 @@ void ds_hdel(redisClient *c) { sdsclear(keyword); keyword = sdscatlen(keyword,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[1]->ptr); + keyword = sdscatsds(keyword, c->argv[1]->ptr); keyword = sdscatlen(keyword, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - keyword = sdscat(keyword, c->argv[i]->ptr); + keyword = sdscatsds(keyword, c->argv[i]->ptr); leveldb_writebatch_delete(wb, keyword, sdslen(keyword)); } @@ -1971,9 +1986,9 @@ void ds_hget(redisClient *c) str = sdsempty(); str = sdscatlen(str,KEY_PREFIX_HASH,KEY_PREFIX_LENGTH); - str = sdscat(str,key); + str = sdscatsds(str,key); str = sdscatlen(str, MEMBER_PREFIX, MEMBER_PREFIX_LENGTH); - str = sdscat(str, field); + str = sdscatsds(str, field); value = leveldb_get(server.ds_db, server.roptions, str, sdslen(str), &val_len, &err); if(err != NULL) { @@ -2076,7 +2091,7 @@ void ds_append(redisClient *c) { recore = sdscpylen(recore, value, val_len); } - recore = sdscat(recore, c->argv[2]->ptr); + recore = sdscatsds(recore, c->argv[2]->ptr); leveldb_put(server.ds_db, server.woptions, c->argv[1]->ptr, sdslen((sds)c->argv[1]->ptr), recore, sdslen(recore), &err); if(err != NULL)