diff --git a/Redis/include/Poco/Redis/Command.h b/Redis/include/Poco/Redis/Command.h index d1f0a5f92..3e54d087b 100644 --- a/Redis/include/Poco/Redis/Command.h +++ b/Redis/include/Poco/Redis/Command.h @@ -87,6 +87,12 @@ public: static Command hincrby(const std::string& hash, const std::string& field, Int64 by = 1); /// Returns an HINCRBY command + static Command hkeys(const std::string& hash); + /// Returns an HKEYS command + + static Command hlen(const std::string& hash); + /// Returns an HLEN command + static Command hset(const std::string& hash, const std::string& field, const std::string& value, bool create = true); /// Returns an HSET or HSETNX (when create is false) command diff --git a/Redis/src/Command.cpp b/Redis/src/Command.cpp index 29abb69e8..c6cefedf1 100644 --- a/Redis/src/Command.cpp +++ b/Redis/src/Command.cpp @@ -176,6 +176,24 @@ Command Command::hincrby(const std::string& hash, const std::string& field, Int6 return cmd; } +Command Command::hkeys(const std::string& hash) +{ + Command cmd("HKEYS"); + + cmd << hash; + + return cmd; +} + +Command Command::hlen(const std::string& hash) +{ + Command cmd("HLEN"); + + cmd << hash; + + return cmd; +} + Command Command::hset(const std::string& hash, const std::string& field, const std::string& value, bool create) { Command cmd(create ? "HSET" : "HSETNX"); diff --git a/Redis/testsuite/src/RedisTest.cpp b/Redis/testsuite/src/RedisTest.cpp index fdfa2e2f1..efc31e48c 100644 --- a/Redis/testsuite/src/RedisTest.cpp +++ b/Redis/testsuite/src/RedisTest.cpp @@ -561,6 +561,63 @@ void RedisTest::testHINCRBY() } } +void RedisTest::testHKEYS() +{ + if (!_connected) + { + std::cout << "Not connected, test skipped." << std::endl; + return; + } + + delKey("myhash"); + + Command hset = Command::hset("myhash", "field1", "Hello"); + try + { + Poco::Int64 value = _redis.execute(hset); + assert(value == 1); + } + catch(RedisException &e) + { + fail(e.message()); + } + + hset = Command::hset("myhash", "field2", "World"); + try + { + Poco::Int64 value = _redis.execute(hset); + assert(value == 1); + } + catch(RedisException &e) + { + fail(e.message()); + } + + Command hlen = Command::hlen("myhash"); + try + { + Poco::Int64 value = _redis.execute(hlen); + assert(value == 2); + } + catch(RedisException &e) + { + fail(e.message()); + } + + Command hkeys = Command::hkeys("myhash"); + try + { + Array result = _redis.execute(hkeys); + assert(result.size() == 2); + assert(result.get(0).value().compare("field1") == 0); + assert(result.get(1).value().compare("field2") == 0); + } + catch(RedisException &e) + { + fail(e.message()); + } +} + void RedisTest::testHSET() { if (!_connected) @@ -2629,6 +2686,7 @@ CppUnit::Test* RedisTest::suite() CppUnit_addTest(pSuite, RedisTest, testHEXISTS); CppUnit_addTest(pSuite, RedisTest, testHGETALL); CppUnit_addTest(pSuite, RedisTest, testHINCRBY); + CppUnit_addTest(pSuite, RedisTest, testHKEYS); CppUnit_addTest(pSuite, RedisTest, testHSET); CppUnit_addTest(pSuite, RedisTest, testINCR); CppUnit_addTest(pSuite, RedisTest, testINCRBY); diff --git a/Redis/testsuite/src/RedisTest.h b/Redis/testsuite/src/RedisTest.h index b4039380b..affbd62a7 100644 --- a/Redis/testsuite/src/RedisTest.h +++ b/Redis/testsuite/src/RedisTest.h @@ -41,6 +41,7 @@ public: void testHEXISTS(); void testHGETALL(); void testHINCRBY(); + void testHKEYS(); void testHSET(); void testINCR(); void testINCRBY();