Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2021-09-20 20:50:07 +0300
committerPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2022-04-06 22:48:10 +0300
commitb81ccbc89ee62578a0ce2d5ec38386ce5119ea03 (patch)
tree296cfb771286a44c8c49c074db5cf6d959a0d677
parent985c738876a18da389daafa5f4611b8f9cf434f4 (diff)
Issue #1894issue-1894-reset
-rw-r--r--redis.c44
-rw-r--r--redis.stub.php2
-rw-r--r--redis_arginfo.h6
-rw-r--r--redis_legacy_arginfo.h6
-rw-r--r--tests/RedisClusterTest.php1
-rw-r--r--tests/RedisTest.php13
6 files changed, 70 insertions, 2 deletions
diff --git a/redis.c b/redis.c
index a1233ac1..a28b779f 100644
--- a/redis.c
+++ b/redis.c
@@ -904,6 +904,50 @@ PHP_METHOD(Redis, renameNx)
}
/* }}} */
+/** {{{ proto bool Redis::reset()
+ */
+PHP_METHOD(Redis, reset)
+{
+ char *response;
+ int response_len;
+ RedisSock *redis_sock;
+ smart_string cmd = {0};
+ zend_bool ret = 0;
+
+ if ((redis_sock = redis_sock_get(getThis(), 0)) == NULL) {
+ RETURN_FALSE;
+ }
+
+ if (IS_PIPELINE(redis_sock)) {
+ php_error_docref(NULL, E_ERROR, "Reset ins't allowed in pipeline mode!");
+ RETURN_FALSE;
+ }
+
+ redis_cmd_init_sstr(&cmd, 0, "RESET", 5);
+
+ REDIS_PROCESS_REQUEST(redis_sock, cmd.c, cmd.len);
+
+ if ((response = redis_sock_read(redis_sock, &response_len)) != NULL) {
+ ret = REDIS_STRCMP_STATIC(response, response_len, "+RESET");
+ efree(response);
+ }
+
+ if (!ret) {
+ if (IS_ATOMIC(redis_sock)) {
+ RETURN_FALSE;
+ }
+ php_error_docref(NULL, E_WARNING, "Reset failed in multi mode!");
+ RETURN_ZVAL(getThis(), 1, 0);
+ }
+
+ free_reply_callbacks(redis_sock);
+ redis_sock->status = REDIS_SOCK_STATUS_CONNECTED;
+ redis_sock->mode = ATOMIC;
+ redis_sock->dbNumber = 0;
+ redis_sock->watching = 0;
+
+ RETURN_TRUE;
+}
/* }}} */
/* {{{ proto string Redis::get(string key)
diff --git a/redis.stub.php b/redis.stub.php
index 912eab57..c25b0e3d 100644
--- a/redis.stub.php
+++ b/redis.stub.php
@@ -336,6 +336,8 @@ public function persist(string $key): bool;
/** @return bool|Redis */
public function renameNx(string $key_src, string $key_dst);
+ public function reset(): bool;
+
public function restore(string $key, int $timeout, string $value): bool;
public function role(): mixed;
diff --git a/redis_arginfo.h b/redis_arginfo.h
index 515dacd4..1effe65b 100644
--- a/redis_arginfo.h
+++ b/redis_arginfo.h
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 2f9fb51ff39db0f8e399b937728904e3283448ff */
+ * Stub hash: ac42922990d602b1f9f7a4dd057225b0ca7eeb61 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "null")
@@ -554,6 +554,8 @@ ZEND_END_ARG_INFO()
#define arginfo_class_Redis_renameNx arginfo_class_Redis_rename
+#define arginfo_class_Redis_reset arginfo_class_Redis_bgSave
+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Redis_restore, 0, 3, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, timeout, IS_LONG, 0)
@@ -1080,6 +1082,7 @@ ZEND_METHOD(Redis, randomKey);
ZEND_METHOD(Redis, rawcommand);
ZEND_METHOD(Redis, rename);
ZEND_METHOD(Redis, renameNx);
+ZEND_METHOD(Redis, reset);
ZEND_METHOD(Redis, restore);
ZEND_METHOD(Redis, role);
ZEND_METHOD(Redis, rpoplpush);
@@ -1308,6 +1311,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, rawcommand, arginfo_class_Redis_rawcommand, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, rename, arginfo_class_Redis_rename, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, renameNx, arginfo_class_Redis_renameNx, ZEND_ACC_PUBLIC)
+ ZEND_ME(Redis, reset, arginfo_class_Redis_reset, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, restore, arginfo_class_Redis_restore, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, role, arginfo_class_Redis_role, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, rpoplpush, arginfo_class_Redis_rpoplpush, ZEND_ACC_PUBLIC)
diff --git a/redis_legacy_arginfo.h b/redis_legacy_arginfo.h
index 21150b10..b0e7f132 100644
--- a/redis_legacy_arginfo.h
+++ b/redis_legacy_arginfo.h
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 2f9fb51ff39db0f8e399b937728904e3283448ff */
+ * Stub hash: ac42922990d602b1f9f7a4dd057225b0ca7eeb61 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_INFO(0, options)
@@ -488,6 +488,8 @@ ZEND_END_ARG_INFO()
#define arginfo_class_Redis_renameNx arginfo_class_Redis_rename
+#define arginfo_class_Redis_reset arginfo_class_Redis___destruct
+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis_restore, 0, 0, 3)
ZEND_ARG_INFO(0, key)
ZEND_ARG_INFO(0, timeout)
@@ -982,6 +984,7 @@ ZEND_METHOD(Redis, randomKey);
ZEND_METHOD(Redis, rawcommand);
ZEND_METHOD(Redis, rename);
ZEND_METHOD(Redis, renameNx);
+ZEND_METHOD(Redis, reset);
ZEND_METHOD(Redis, restore);
ZEND_METHOD(Redis, role);
ZEND_METHOD(Redis, rpoplpush);
@@ -1210,6 +1213,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, rawcommand, arginfo_class_Redis_rawcommand, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, rename, arginfo_class_Redis_rename, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, renameNx, arginfo_class_Redis_renameNx, ZEND_ACC_PUBLIC)
+ ZEND_ME(Redis, reset, arginfo_class_Redis_reset, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, restore, arginfo_class_Redis_restore, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, role, arginfo_class_Redis_role, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, rpoplpush, arginfo_class_Redis_rpoplpush, ZEND_ACC_PUBLIC)
diff --git a/tests/RedisClusterTest.php b/tests/RedisClusterTest.php
index f491e92a..6ca5153d 100644
--- a/tests/RedisClusterTest.php
+++ b/tests/RedisClusterTest.php
@@ -47,6 +47,7 @@ class Redis_Cluster_Test extends Redis_Test {
public function testSwapDB() { return $this->markTestSkipped(); }
public function testConnectException() { return $this->markTestSkipped(); }
public function testTlsConnect() { return $this->markTestSkipped(); }
+ public function testReset() { return $this->markTestSkipped(); }
public function testInvalidAuthArgs() { return $this->markTestSkipped(); }
public function testlMove() { return $this->markTestSkipped(); }
diff --git a/tests/RedisTest.php b/tests/RedisTest.php
index 6a5f4153..8c79d6be 100644
--- a/tests/RedisTest.php
+++ b/tests/RedisTest.php
@@ -6847,6 +6847,19 @@ class Redis_Test extends TestSuite
}
}
+ public function testReset()
+ {
+ // Only available since 6.2.0
+ if (version_compare($this->version, '6.2.0') < 0) {
+ $this->markTestSkipped();
+ return;
+ }
+
+ $this->assertTrue($this->redis->multi()->select(2)->set('foo', 'bar')->reset());
+ $this->assertEquals(Redis::ATOMIC, $this->redis->getMode());
+ $this->assertEquals(0, $this->redis->getDBNum());
+ }
+
public function testCopy()
{
// Only available since 6.2.0