Implement VISMEMBER command.

This commit is contained in:
michael-grunder
2025-08-29 10:44:52 -07:00
committed by Michael Grunder
parent c4b2ea6ca5
commit 92dd256f98
9 changed files with 71 additions and 16 deletions

View File

@@ -3196,6 +3196,10 @@ PHP_METHOD(Redis, vinfo) {
REDIS_PROCESS_KW_CMD("VINFO", redis_key_cmd, redis_vinfo_reply);
}
PHP_METHOD(Redis, vismember) {
REDIS_PROCESS_KW_CMD("VISMEMBER", redis_kv_cmd, redis_long_response);
}
PHP_METHOD(Redis, vemb) {
REDIS_PROCESS_CMD(vemb, redis_vemb_reply);
}

View File

@@ -4270,6 +4270,16 @@ class Redis {
*/
public function vinfo(string $key): Redis|array|false;
/**
* Check if an element is a member of a vectorset
*
* @param string $key The vector set to query.
* @param mixed $member The member to check for.
*
* @return Redis|int|false 1 if the member exists, 0 if it does not.
*/
public function vismember(string $key, mixed $member): Redis|int|false;
/**
* Get the embeddings for a specific member
*

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 8f05c875df78af256842222b4116f34dad1930d0 */
* Stub hash: 44ceaf06991ed7aa445c0106df591416a9437a77 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
@@ -1082,6 +1082,11 @@ ZEND_END_ARG_INFO()
#define arginfo_class_Redis_vinfo arginfo_class_Redis_getWithMeta
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_vismember, 0, 2, Redis, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_vemb, 0, 2, Redis, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
@@ -1093,10 +1098,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_vrandmember, 0,
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, count, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_vrem, 0, 2, Redis, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_Redis_vrem arginfo_class_Redis_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_vsetattr, 0, 3, Redis, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
@@ -1198,7 +1200,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_zRandMember, 0,
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
ZEND_END_ARG_INFO()
#define arginfo_class_Redis_zRank arginfo_class_Redis_vrem
#define arginfo_class_Redis_zRank arginfo_class_Redis_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_zRem, 0, 2, Redis, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_MIXED, 0)
@@ -1242,7 +1244,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_zRevRangeByScore
ZEND_ARG_TYPE_MASK(0, options, MAY_BE_ARRAY|MAY_BE_BOOL, "[]")
ZEND_END_ARG_INFO()
#define arginfo_class_Redis_zRevRank arginfo_class_Redis_vrem
#define arginfo_class_Redis_zRevRank arginfo_class_Redis_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_Redis_zScore, 0, 2, Redis, MAY_BE_DOUBLE|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
@@ -1529,6 +1531,7 @@ ZEND_METHOD(Redis, vsim);
ZEND_METHOD(Redis, vcard);
ZEND_METHOD(Redis, vdim);
ZEND_METHOD(Redis, vinfo);
ZEND_METHOD(Redis, vismember);
ZEND_METHOD(Redis, vemb);
ZEND_METHOD(Redis, vrandmember);
ZEND_METHOD(Redis, vrem);
@@ -1816,6 +1819,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, vcard, arginfo_class_Redis_vcard, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vdim, arginfo_class_Redis_vdim, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vinfo, arginfo_class_Redis_vinfo, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vismember, arginfo_class_Redis_vismember, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vemb, arginfo_class_Redis_vemb, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vrandmember, arginfo_class_Redis_vrandmember, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vrem, arginfo_class_Redis_vrem, ZEND_ACC_PUBLIC)

View File

@@ -3200,6 +3200,10 @@ PHP_METHOD(RedisCluster, vinfo) {
CLUSTER_PROCESS_KW_CMD("VINFO", redis_key_cmd, cluster_vinfo_resp, 1);
}
PHP_METHOD(RedisCluster, vismember) {
CLUSTER_PROCESS_KW_CMD("VISMEMBER", redis_kv_cmd, cluster_1_resp, 1);
}
PHP_METHOD(RedisCluster, vemb) {
CLUSTER_PROCESS_CMD(vemb, cluster_vemb_resp, 1);
}

View File

@@ -1088,6 +1088,16 @@ class RedisCluster {
*/
public function vinfo(string $key): RedisCluster|array|false;
/**
* Check if an element is a member of a vectorset
*
* @param string $key The vector set to query.
* @param mixed $member The member to check for.
*
* @return RedisCluster|int|false 1 if the member exists, 0 if it does not.
*/
public function vismember(string $key, mixed $member): RedisCluster|int|false;
/**
* @see Redis::vemb
*/

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 35039adc623aee3961fc81995fa53a73ac698ffe */
* Stub hash: 3a4992567c20fe852dfd0351625314e82ccec30a */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 1)
@@ -898,6 +898,11 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_vinfo arginfo_class_RedisCluster_getWithMeta
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_vismember, 0, 2, RedisCluster, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_vemb, 0, 2, RedisCluster, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
@@ -909,10 +914,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_vrandmemb
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, count, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_vrem, 0, 2, RedisCluster, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, member, IS_MIXED, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_vrem arginfo_class_RedisCluster_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_vlinks, 0, 2, RedisCluster, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
@@ -1102,7 +1104,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_zrangebys
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]")
ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_zrank arginfo_class_RedisCluster_vrem
#define arginfo_class_RedisCluster_zrank arginfo_class_RedisCluster_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_zrem, 0, 2, RedisCluster, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
@@ -1127,7 +1129,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_zrevrangebyscore arginfo_class_RedisCluster_zrevrange
#define arginfo_class_RedisCluster_zrevrank arginfo_class_RedisCluster_vrem
#define arginfo_class_RedisCluster_zrevrank arginfo_class_RedisCluster_vismember
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_zscan, 0, 2, RedisCluster, MAY_BE_BOOL|MAY_BE_ARRAY)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
@@ -1369,6 +1371,7 @@ ZEND_METHOD(RedisCluster, vsim);
ZEND_METHOD(RedisCluster, vcard);
ZEND_METHOD(RedisCluster, vdim);
ZEND_METHOD(RedisCluster, vinfo);
ZEND_METHOD(RedisCluster, vismember);
ZEND_METHOD(RedisCluster, vemb);
ZEND_METHOD(RedisCluster, vrandmember);
ZEND_METHOD(RedisCluster, vrem);
@@ -1624,6 +1627,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, vcard, arginfo_class_RedisCluster_vcard, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vdim, arginfo_class_RedisCluster_vdim, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vinfo, arginfo_class_RedisCluster_vinfo, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vismember, arginfo_class_RedisCluster_vismember, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vemb, arginfo_class_RedisCluster_vemb, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vrandmember, arginfo_class_RedisCluster_vrandmember, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vrem, arginfo_class_RedisCluster_vrem, ZEND_ACC_PUBLIC)

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 35039adc623aee3961fc81995fa53a73ac698ffe */
* Stub hash: 3a4992567c20fe852dfd0351625314e82ccec30a */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_INFO(0, name)
@@ -761,6 +761,8 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_vinfo arginfo_class_RedisCluster__prefix
#define arginfo_class_RedisCluster_vismember arginfo_class_RedisCluster_hexists
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster_vemb, 0, 0, 2)
ZEND_ARG_INFO(0, key)
ZEND_ARG_INFO(0, member)
@@ -1201,6 +1203,7 @@ ZEND_METHOD(RedisCluster, vsim);
ZEND_METHOD(RedisCluster, vcard);
ZEND_METHOD(RedisCluster, vdim);
ZEND_METHOD(RedisCluster, vinfo);
ZEND_METHOD(RedisCluster, vismember);
ZEND_METHOD(RedisCluster, vemb);
ZEND_METHOD(RedisCluster, vrandmember);
ZEND_METHOD(RedisCluster, vrem);
@@ -1456,6 +1459,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, vcard, arginfo_class_RedisCluster_vcard, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vdim, arginfo_class_RedisCluster_vdim, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vinfo, arginfo_class_RedisCluster_vinfo, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vismember, arginfo_class_RedisCluster_vismember, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vemb, arginfo_class_RedisCluster_vemb, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vrandmember, arginfo_class_RedisCluster_vrandmember, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, vrem, arginfo_class_RedisCluster_vrem, ZEND_ACC_PUBLIC)

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 8f05c875df78af256842222b4116f34dad1930d0 */
* Stub hash: 44ceaf06991ed7aa445c0106df591416a9437a77 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis___construct, 0, 0, 0)
ZEND_ARG_INFO(0, options)
@@ -962,6 +962,8 @@ ZEND_END_ARG_INFO()
#define arginfo_class_Redis_vinfo arginfo_class_Redis__prefix
#define arginfo_class_Redis_vismember arginfo_class_Redis_hGet
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Redis_vemb, 0, 0, 2)
ZEND_ARG_INFO(0, key)
ZEND_ARG_INFO(0, member)
@@ -1364,6 +1366,7 @@ ZEND_METHOD(Redis, vsim);
ZEND_METHOD(Redis, vcard);
ZEND_METHOD(Redis, vdim);
ZEND_METHOD(Redis, vinfo);
ZEND_METHOD(Redis, vismember);
ZEND_METHOD(Redis, vemb);
ZEND_METHOD(Redis, vrandmember);
ZEND_METHOD(Redis, vrem);
@@ -1651,6 +1654,7 @@ static const zend_function_entry class_Redis_methods[] = {
ZEND_ME(Redis, vcard, arginfo_class_Redis_vcard, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vdim, arginfo_class_Redis_vdim, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vinfo, arginfo_class_Redis_vinfo, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vismember, arginfo_class_Redis_vismember, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vemb, arginfo_class_Redis_vemb, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vrandmember, arginfo_class_Redis_vrandmember, ZEND_ACC_PUBLIC)
ZEND_ME(Redis, vrem, arginfo_class_Redis_vrem, ZEND_ACC_PUBLIC)

View File

@@ -7754,6 +7754,17 @@ class Redis_Test extends TestSuite {
$this->assertEquals(1, $this->redis->del('v'));
}
public function testVIsMember() {
if ( ! $this->minVersionCheck('8.0'))
$this->markTestSkipped();
$this->assertIsInt($this->redis->del('v'));
$this->assertEquals(1, $this->redis->vadd('v', [0.5, 1.0], 'exists'));
$this->assertEquals(1, $this->redis->vismember('v', 'exists'));
$this->assertEquals(0, $this->redis->vismember('v', 'doesnotexist'));
}
public function testVEmb() {
if ( ! $this->minVersionCheck('8.0'))
$this->markTestSkipped();