Exemple #1
0
 int Ardb::HIncrbyFloat(Context& ctx, RedisCommandFrame& cmd)
 {
     double increment, val = 0;
     if (!GetDoubleValue(ctx, cmd.GetArguments()[2], increment))
     {
         return 0;
     }
     ValueObject meta;
     int err = GetMetaValue(ctx, cmd.GetArguments()[0], HASH_META, meta);
     CHECK_ARDB_RETURN_VALUE(ctx.reply, err);
     Data value;
     Data field(cmd.GetArguments()[1]);
     if (0 == err)
     {
         HashGet(ctx, meta, field, value);
         if (!value.GetDouble(val))
         {
             fill_error_reply(ctx.reply, "value is not a float or out of range");
             return 0;
         }
     }
     val += increment;
     std::string tmp;
     fast_dtoa(val, 10, tmp);
     value.SetString(tmp, false);
     HashSet(ctx, meta, field, value);
     fill_str_reply(ctx.reply, tmp);
     return 0;
 }
Exemple #2
0
int main()
{
    Hash *h = HashCreateN(1024);

    HashSet(h, (String) { "abc", 3 }, "def");
    printf("%s\n", (char*) HashGet(h, (String) { GC_STRDUP("abc"), 3 }));
}
Exemple #3
0
 int Ardb::HIncrby(Context& ctx, RedisCommandFrame& cmd)
 {
     int64 increment, val = 0;
     if (!GetInt64Value(ctx, cmd.GetArguments()[2], increment))
     {
         return 0;
     }
     ValueObject meta;
     int err = GetMetaValue(ctx, cmd.GetArguments()[0], HASH_META, meta);
     CHECK_ARDB_RETURN_VALUE(ctx.reply, err);
     Data field(cmd.GetArguments()[1]);
     Data value;
     if (err == 0)
     {
         err = HashGet(ctx, meta, field, value);
     }
     if (err == ERR_NOT_EXIST)
     {
         value.SetInt64(increment);
     }
     else
     {
         if (!value.GetInt64(val))
         {
             fill_error_reply(ctx.reply, "value is not a integer or out of range");
             return 0;
         }
         value.SetInt64(val + increment);
     }
     HashSet(ctx, meta, field, value);
     fill_int_reply(ctx.reply, val + increment);
     return 0;
 }
Exemple #4
0
static int Clear(HashTable *ht)
{
    HashIndex HashIdx,*hi;
    for (hi = first(&HashIdx); hi; hi = next(hi))
        HashSet(ht, hi->This->key, hi->This->klen, NULL);
    return 1;
}
Exemple #5
0
static int Remove(HashTable *ht,const void *key,size_t klen)
{
    HashEntry **hep = HashSet(ht,key,klen,NULL);
    if (hep)
        return 1;
    return 0;
}
Exemple #6
0
 int Ardb::HSet(Context& ctx, RedisCommandFrame& cmd)
 {
     ValueObject meta;
     int err = GetMetaValue(ctx, cmd.GetArguments()[0], HASH_META, meta);
     CHECK_ARDB_RETURN_VALUE(ctx.reply, err);
     Data field(cmd.GetArguments()[1]), value(cmd.GetArguments()[2]);
     HashSet(ctx, meta, field, value);
     //fill_int_reply(ctx.reply, err);
     return 0;
 }
Exemple #7
0
static Object symbolFromCString(string str) {
  Object oString = makeStringFromCString(str);
  Object obj = HashGet(symbol_table, oString);

  if (!obj) {
    obj = malloc(sizeof(sObject));
    obj->type              = SYMBOL;
    obj->value.stringValue = str;
    obj->print             = &printSymbol;
    obj->eval              = &evalSymbol;

    HashSet(symbol_table, oString, obj);
  }

  return obj;
}
Exemple #8
0
 int Ardb::RenameHash(Context& ctx, DBID srcdb, const std::string& srckey, DBID dstdb, const std::string& dstkey)
 {
     Context tmpctx;
     tmpctx.currentDB = srcdb;
     ValueObject v;
     int err = GetMetaValue(tmpctx, srckey, HASH_META, v);
     CHECK_ARDB_RETURN_VALUE(ctx.reply, err);
     if (0 != err)
     {
         fill_error_reply(ctx.reply, "no such key or some error");
         return 0;
     }
     if (v.meta.encoding == COLLECTION_ECODING_ZIPMAP)
     {
         DelKeyValue(tmpctx, v.key);
         v.key.encode_buf.Clear();
         v.key.db = dstdb;
         v.key.key = dstkey;
         v.meta.expireat = 0;
         SetKeyValue(ctx, v);
     }
     else
     {
         HashIterator iter;
         HashIter(ctx, v, "", iter, false);
         tmpctx.currentDB = dstdb;
         ValueObject dstmeta;
         dstmeta.key.type = KEY_META;
         dstmeta.key.key = dstkey;
         dstmeta.type = HASH_META;
         dstmeta.meta.encoding = COLLECTION_ECODING_ZIPMAP;
         BatchWriteGuard guard(GetKeyValueEngine());
         while (iter.Valid())
         {
             HashSet(tmpctx, dstmeta, *(iter.Field()), *(iter.Value()));
             iter.Next();
         }
         SetKeyValue(tmpctx, dstmeta);
         tmpctx.currentDB = srcdb;
         DeleteKey(tmpctx, srckey);
     }
     ctx.data_change = true;
     return 0;
 }
Exemple #9
0
 int Ardb::HSetNX(Context& ctx, RedisCommandFrame& cmd)
 {
     ValueObject meta;
     int err = GetMetaValue(ctx, cmd.GetArguments()[0], HASH_META, meta);
     CHECK_ARDB_RETURN_VALUE(ctx.reply, err);
     Data value;
     Data field(cmd.GetArguments()[1]);
     err = HashGet(ctx, meta, field, value);
     if (err == ERR_NOT_EXIST)
     {
         value.SetString(cmd.GetArguments()[2], true);
         HashSet(ctx, meta, field, value);
         err = 1;
     }
     else
     {
         err = 0;
     }
     fill_int_reply(ctx.reply, err);
     return 0;
 }