Skip to content
This repository was archived by the owner on Apr 6, 2019. It is now read-only.

Commit 247eb7a

Browse files
authored
support for sort command #114 (#115)
1 parent ed1878d commit 247eb7a

File tree

2 files changed

+168
-1
lines changed

2 files changed

+168
-1
lines changed

includes/cpp_redis/core/client.hpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,33 @@ class client {
819819
client& smove(const std::string& source, const std::string& destination, const std::string& member, const reply_callback_t& reply_callback);
820820
std::future<reply> smove(const std::string& src, const std::string& dst, const std::string& member);
821821

822+
client& sort(const std::string& key, const reply_callback_t& reply_callback);
823+
std::future<reply> sort(const std::string& key);
824+
825+
client& sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback);
826+
std::future<reply> sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha);
827+
828+
client& sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback);
829+
std::future<reply> sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha);
830+
831+
client& sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback);
832+
std::future<reply> sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha);
833+
834+
client& sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback);
835+
std::future<reply> sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest);
836+
837+
client& sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback);
838+
std::future<reply> sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest);
839+
840+
client& sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback);
841+
std::future<reply> sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest);
842+
843+
client& sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback);
844+
std::future<reply> sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha);
845+
846+
client& sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback);
847+
std::future<reply> sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest);
848+
822849
client& spop(const std::string& key, const reply_callback_t& reply_callback);
823850
std::future<reply> spop(const std::string& key);
824851

@@ -963,7 +990,6 @@ class client {
963990
// client& bitfield(const std::string& key, const reply_callback_t& reply_callback) key [get type offset] [set type offset value] [incrby type offset increment] [overflow wrap|sat|fail]
964991
// client& georadius(const reply_callback_t& reply_callback) key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count] [asc|desc] [store key] [storedist key]
965992
// client& georadiusbymember(const reply_callback_t& reply_callback) key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count] [asc|desc] [store key] [storedist key]
966-
// client& sort(const reply_callback_t& reply_callback) key [by pattern] [limit offset count] [get pattern [get pattern ...]] [asc|desc] [alpha] [store destination]
967993
// client& zinterstore(const reply_callback_t& reply_callback) destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]
968994
// client& zrangebylex(const reply_callback_t& reply_callback) key min max [limit offset count]
969995
// client& zrevrangebylex(const reply_callback_t& reply_callback) key max min [limit offset count]
@@ -1000,6 +1026,10 @@ class client {
10001026
void
10011027
client_kill_impl(std::vector<std::string>& redis_cmd, reply_callback_t& reply, const T& arg);
10021028

1029+
private:
1030+
//! sort impl
1031+
client& sort(const std::string& key, const std::string& by_pattern, bool limit, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback);
1032+
10031033
private:
10041034
//!
10051035
//! redis connection receive handler, triggered whenever a reply has been read by the redis connection

sources/core/client.cpp

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,6 +1564,98 @@ client::smove(const std::string& source, const std::string& destination, const s
15641564
return *this;
15651565
}
15661566

1567+
1568+
client&
1569+
client::sort(const std::string& key, const reply_callback_t& reply_callback) {
1570+
send({"SORT", key}, reply_callback);
1571+
return *this;
1572+
}
1573+
1574+
client&
1575+
client::sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback) {
1576+
return sort(key, "", false, 0, 0, get_patterns, asc_order, alpha, "", reply_callback);
1577+
}
1578+
1579+
client&
1580+
client::sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback) {
1581+
return sort(key, "", true, offset, count, get_patterns, asc_order, alpha, "", reply_callback);
1582+
}
1583+
1584+
client&
1585+
client::sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback) {
1586+
return sort(key, by_pattern, false, 0, 0, get_patterns, asc_order, alpha, "", reply_callback);
1587+
}
1588+
1589+
client&
1590+
client::sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback) {
1591+
return sort(key, "", false, 0, 0, get_patterns, asc_order, alpha, store_dest, reply_callback);
1592+
}
1593+
1594+
client&
1595+
client::sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback) {
1596+
return sort(key, "", true, offset, count, get_patterns, asc_order, alpha, store_dest, reply_callback);
1597+
}
1598+
1599+
client&
1600+
client::sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback) {
1601+
return sort(key, by_pattern, false, 0, 0, get_patterns, asc_order, alpha, store_dest, reply_callback);
1602+
}
1603+
1604+
client&
1605+
client::sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const reply_callback_t& reply_callback) {
1606+
return sort(key, by_pattern, true, offset, count, get_patterns, asc_order, alpha, "", reply_callback);
1607+
}
1608+
1609+
client&
1610+
client::sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback) {
1611+
return sort(key, by_pattern, true, offset, count, get_patterns, asc_order, alpha, store_dest, reply_callback);
1612+
}
1613+
1614+
client&
1615+
client::sort(const std::string& key, const std::string& by_pattern, bool limit, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest, const reply_callback_t& reply_callback) {
1616+
std::vector<std::string> cmd = {"SORT", key};
1617+
1618+
//! add by pattern (optional)
1619+
if (!by_pattern.empty()) {
1620+
cmd.push_back("BY");
1621+
cmd.push_back(by_pattern);
1622+
}
1623+
1624+
//! add limit (optional)
1625+
if (limit) {
1626+
cmd.push_back("LIMIT");
1627+
cmd.push_back(std::to_string(offset));
1628+
cmd.push_back(std::to_string(count));
1629+
}
1630+
1631+
//! add get pattern (optional)
1632+
for (const auto& get_pattern : get_patterns) {
1633+
if (get_pattern.empty()) {
1634+
continue;
1635+
}
1636+
1637+
cmd.push_back("GET");
1638+
cmd.push_back(get_pattern);
1639+
}
1640+
1641+
//! add order by (optional)
1642+
cmd.push_back(asc_order ? "ASC" : "DESC");
1643+
1644+
//! add alpha (optional)
1645+
if (alpha) {
1646+
cmd.push_back("ALPHA");
1647+
}
1648+
1649+
//! add store dest (optional)
1650+
if (!store_dest.empty()) {
1651+
cmd.push_back("STORE");
1652+
cmd.push_back(store_dest);
1653+
}
1654+
1655+
send(cmd, reply_callback);
1656+
return *this;
1657+
}
1658+
15671659
client&
15681660
client::spop(const std::string& key, const reply_callback_t& reply_callback) {
15691661
send({"SPOP", key}, reply_callback);
@@ -2736,6 +2828,51 @@ client::smove(const std::string& src, const std::string& dst, const std::string&
27362828
return exec_cmd([=](const reply_callback_t& cb) -> client& { return smove(src, dst, member, cb); });
27372829
}
27382830

2831+
std::future<reply>
2832+
client::sort(const std::string& key) {
2833+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, cb); });
2834+
}
2835+
2836+
std::future<reply>
2837+
client::sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha) {
2838+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, get_patterns, asc_order, alpha, cb); });
2839+
}
2840+
2841+
std::future<reply>
2842+
client::sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha) {
2843+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, offset, count, get_patterns, asc_order, alpha, cb); });
2844+
}
2845+
2846+
std::future<reply>
2847+
client::sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha) {
2848+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, by_pattern, get_patterns, asc_order, alpha, cb); });
2849+
}
2850+
2851+
std::future<reply>
2852+
client::sort(const std::string& key, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest) {
2853+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, get_patterns, asc_order, alpha, store_dest, cb); });
2854+
}
2855+
2856+
std::future<reply>
2857+
client::sort(const std::string& key, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest) {
2858+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, offset, count, get_patterns, asc_order, alpha, store_dest, cb); });
2859+
}
2860+
2861+
std::future<reply>
2862+
client::sort(const std::string& key, const std::string& by_pattern, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest) {
2863+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, by_pattern, get_patterns, asc_order, alpha, store_dest, cb); });
2864+
}
2865+
2866+
std::future<reply>
2867+
client::sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha) {
2868+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, by_pattern, offset, count, get_patterns, asc_order, alpha, cb); });
2869+
}
2870+
2871+
std::future<reply>
2872+
client::sort(const std::string& key, const std::string& by_pattern, std::size_t offset, std::size_t count, const std::vector<std::string>& get_patterns, bool asc_order, bool alpha, const std::string& store_dest) {
2873+
return exec_cmd([=](const reply_callback_t& cb) -> client& { return sort(key, by_pattern, offset, count, get_patterns, asc_order, alpha, store_dest, cb); });
2874+
}
2875+
27392876
std::future<reply>
27402877
client::spop(const std::string& key) {
27412878
return exec_cmd([=](const reply_callback_t& cb) -> client& { return spop(key, cb); });

0 commit comments

Comments
 (0)