forked from OpenAtomFoundation/pika
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support hyperloglog (OpenAtomFoundation#56)
* Support hyperloglog * add header file * format code * change the default number of parameters in pfcount * redis protocol compatible * redis protocol compatible and format code
- Loading branch information
1 parent
040dc47
commit 6042fd0
Showing
4 changed files
with
183 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// Copyright (c) 2015-present, Qihoo, Inc. All rights reserved. | ||
// This source code is licensed under the BSD-style license found in the | ||
// LICENSE file in the root directory of this source tree. An additional grant | ||
// of patent rights can be found in the PATENTS file in the same directory. | ||
|
||
#ifndef PIKA_HYPERLOGLOG_H_ | ||
#define PIKA_HYPERLOGLOG_H_ | ||
|
||
#include "pika_command.h" | ||
#include "nemo.h" | ||
|
||
/* | ||
* hyperloglog | ||
*/ | ||
class PfAddCmd : public Cmd { | ||
public: | ||
PfAddCmd() {}; | ||
virtual void Do(); | ||
private: | ||
std::string key_; | ||
std::vector<std::string> values_; | ||
virtual void DoInitial(PikaCmdArgsType &argvs, const CmdInfo* const ptr_info); | ||
virtual void Clear() { | ||
values_.clear(); | ||
} | ||
}; | ||
|
||
class PfCountCmd : public Cmd { | ||
public: | ||
PfCountCmd() {}; | ||
virtual void Do(); | ||
private: | ||
std::vector<std::string> keys_; | ||
virtual void DoInitial(PikaCmdArgsType &argvs, const CmdInfo* const ptr_info); | ||
virtual void Clear() { | ||
keys_.clear(); | ||
} | ||
}; | ||
|
||
class PfMergeCmd : public Cmd { | ||
public: | ||
PfMergeCmd() {}; | ||
virtual void Do(); | ||
private: | ||
std::vector<std::string> keys_; | ||
virtual void DoInitial(PikaCmdArgsType &argvs, const CmdInfo* const ptr_info); | ||
virtual void Clear() { | ||
keys_.clear(); | ||
} | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
// Copyright (c) 2015-present, Qihoo, Inc. All rights reserved. | ||
// This source code is licensed under the BSD-style license found in the | ||
// LICENSE file in the root directory of this source tree. An additional grant | ||
// of patent rights can be found in the PATENTS file in the same directory. | ||
|
||
#include <vector> | ||
#include "slash_string.h" | ||
#include "nemo.h" | ||
#include "pika_server.h" | ||
#include "pika_hyperloglog.h" | ||
|
||
extern PikaServer *g_pika_server; | ||
|
||
void PfAddCmd::DoInitial(PikaCmdArgsType &argv, const CmdInfo* const ptr_info) { | ||
if (!ptr_info->CheckArg(argv.size())) { | ||
res_.SetRes(CmdRes::kWrongNum, kCmdNamePfAdd); | ||
return; | ||
} | ||
key_ = argv[1]; | ||
size_t pos = 2; | ||
while (pos < argv.size()) { | ||
values_.push_back(argv[pos++]); | ||
} | ||
} | ||
|
||
void PfAddCmd::Do() { | ||
nemo::Status s; | ||
bool update = false; | ||
s = g_pika_server->db()->PfAdd(key_, values_, update); | ||
if (s.ok() && update) { | ||
res_.AppendInteger(1); | ||
} else if (s.ok() && !update) { | ||
res_.AppendInteger(0); | ||
} else { | ||
res_.SetRes(CmdRes::kErrOther, s.ToString()); | ||
} | ||
} | ||
|
||
void PfCountCmd::DoInitial(PikaCmdArgsType &argv, const CmdInfo* const ptr_info) { | ||
if (!ptr_info->CheckArg(argv.size())) { | ||
res_.SetRes(CmdRes::kWrongNum, kCmdNamePfCount); | ||
return; | ||
} | ||
size_t pos = 1; | ||
while (pos < argv.size()) { | ||
keys_.push_back(argv[pos++]); | ||
} | ||
} | ||
|
||
void PfCountCmd::Do() { | ||
nemo::Status s; | ||
int value_; | ||
s = g_pika_server->db()->PfCount(keys_, value_); | ||
if (s.ok()) { | ||
res_.AppendInteger(value_); | ||
} else { | ||
res_.SetRes(CmdRes::kErrOther, s.ToString()); | ||
} | ||
} | ||
|
||
void PfMergeCmd::DoInitial(PikaCmdArgsType &argv, const CmdInfo* const ptr_info) { | ||
if (!ptr_info->CheckArg(argv.size())) { | ||
res_.SetRes(CmdRes::kWrongNum, kCmdNamePfMerge); | ||
return; | ||
} | ||
size_t pos = 1; | ||
while (pos < argv.size()) { | ||
keys_.push_back(argv[pos++]); | ||
} | ||
} | ||
|
||
void PfMergeCmd::Do() { | ||
nemo::Status s; | ||
s = g_pika_server->db()->PfMerge(keys_); | ||
if (s.ok()) { | ||
res_.SetRes(CmdRes::kOk); | ||
} else { | ||
res_.SetRes(CmdRes::kErrOther, s.ToString()); | ||
} | ||
} |