diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2021-09-20 20:50:07 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2022-04-11 21:57:12 +0300 |
commit | 947a2d3897f2be2d51fb4672c351df9835724e78 (patch) | |
tree | 062d5fbdc10730806098af4a11a67ba922a3fe4d /redis.c | |
parent | 77ee15c243933c2f279babed8b32c6b65aa12421 (diff) |
Issue #1894
Diffstat (limited to 'redis.c')
-rw-r--r-- | redis.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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; + } + REDIS_THROW_EXCEPTION("Reset failed in multi mode!", 0); + 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) |