Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 85419ce

Browse files
Merge branch 'issue.1502.geo-readonly-cmds' into issue.1448-require_php7
2 parents f90ba7c + 22d81a9 commit 85419ce

7 files changed

Lines changed: 65 additions & 34 deletions

File tree

php_redis.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,9 @@ PHP_METHOD(Redis, geohash);
205205
PHP_METHOD(Redis, geopos);
206206
PHP_METHOD(Redis, geodist);
207207
PHP_METHOD(Redis, georadius);
208+
PHP_METHOD(Redis, georadius_ro);
208209
PHP_METHOD(Redis, georadiusbymember);
210+
PHP_METHOD(Redis, georadiusbymember_ro);
209211

210212
PHP_METHOD(Redis, client);
211213
PHP_METHOD(Redis, command);

redis.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,9 @@ static zend_function_entry redis_functions[] = {
285285
PHP_ME(Redis, geohash, arginfo_key_members, ZEND_ACC_PUBLIC)
286286
PHP_ME(Redis, geopos, arginfo_key_members, ZEND_ACC_PUBLIC)
287287
PHP_ME(Redis, georadius, arginfo_georadius, ZEND_ACC_PUBLIC)
288+
PHP_ME(Redis, georadius_ro, arginfo_georadius, ZEND_ACC_PUBLIC)
288289
PHP_ME(Redis, georadiusbymember, arginfo_georadiusbymember, ZEND_ACC_PUBLIC)
290+
PHP_ME(Redis, georadiusbymember_ro, arginfo_georadiusbymember, ZEND_ACC_PUBLIC)
289291
PHP_ME(Redis, get, arginfo_key, ZEND_ACC_PUBLIC)
290292
PHP_ME(Redis, getAuth, arginfo_void, ZEND_ACC_PUBLIC)
291293
PHP_ME(Redis, getBit, arginfo_key_offset, ZEND_ACC_PUBLIC)
@@ -3535,11 +3537,19 @@ PHP_METHOD(Redis, geodist) {
35353537
}
35363538

35373539
PHP_METHOD(Redis, georadius) {
3538-
REDIS_PROCESS_CMD(georadius, redis_read_variant_reply);
3540+
REDIS_PROCESS_KW_CMD("GEORADIUS", redis_georadius_cmd, redis_read_variant_reply);
3541+
}
3542+
3543+
PHP_METHOD(Redis, georadius_ro) {
3544+
REDIS_PROCESS_KW_CMD("GEORADIUS_RO", redis_georadius_cmd, redis_read_variant_reply);
35393545
}
35403546

35413547
PHP_METHOD(Redis, georadiusbymember) {
3542-
REDIS_PROCESS_CMD(georadiusbymember, redis_read_variant_reply);
3548+
REDIS_PROCESS_KW_CMD("GEORADIUSBYMEMBER", redis_georadiusbymember_cmd, redis_read_variant_reply);
3549+
}
3550+
3551+
PHP_METHOD(Redis, georadiusbymember_ro) {
3552+
REDIS_PROCESS_KW_CMD("GEORADIUSBYMEMBER_RO", redis_georadiusbymember_cmd, redis_read_variant_reply);
35433553
}
35443554

35453555
/*

redis_cluster.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,9 @@ zend_function_entry redis_cluster_functions[] = {
149149
PHP_ME(RedisCluster, geohash, arginfo_key_members, ZEND_ACC_PUBLIC)
150150
PHP_ME(RedisCluster, geopos, arginfo_key_members, ZEND_ACC_PUBLIC)
151151
PHP_ME(RedisCluster, georadius, arginfo_georadius, ZEND_ACC_PUBLIC)
152+
PHP_ME(RedisCluster, georadius_ro, arginfo_georadius, ZEND_ACC_PUBLIC)
152153
PHP_ME(RedisCluster, georadiusbymember, arginfo_georadiusbymember, ZEND_ACC_PUBLIC)
154+
PHP_ME(RedisCluster, georadiusbymember_ro, arginfo_georadiusbymember, ZEND_ACC_PUBLIC)
153155
PHP_ME(RedisCluster, get, arginfo_key, ZEND_ACC_PUBLIC)
154156
PHP_ME(RedisCluster, getbit, arginfo_key_offset, ZEND_ACC_PUBLIC)
155157
PHP_ME(RedisCluster, getlasterror, arginfo_void, ZEND_ACC_PUBLIC)
@@ -2840,12 +2842,22 @@ PHP_METHOD(RedisCluster, geodist) {
28402842

28412843
/* {{{ proto array RedisCluster::georadius() }}} */
28422844
PHP_METHOD(RedisCluster, georadius) {
2843-
CLUSTER_PROCESS_CMD(georadius, cluster_variant_resp, 1);
2845+
CLUSTER_PROCESS_KW_CMD("GEORADIUS", redis_georadius_cmd, cluster_variant_resp, 1);
2846+
}
2847+
2848+
/* {{{ proto array RedisCluster::georadius() }}} */
2849+
PHP_METHOD(RedisCluster, georadius_ro) {
2850+
CLUSTER_PROCESS_KW_CMD("GEORADIUS_RO", redis_georadius_cmd, cluster_variant_resp, 1);
28442851
}
28452852

28462853
/* {{{ proto array RedisCluster::georadiusbymember() }}} */
28472854
PHP_METHOD(RedisCluster, georadiusbymember) {
2848-
CLUSTER_PROCESS_CMD(georadiusbymember, cluster_variant_resp, 1)
2855+
CLUSTER_PROCESS_KW_CMD("GEORADIUSBYMEMBER", redis_georadiusbymember_cmd, cluster_variant_resp, 1);
2856+
}
2857+
2858+
/* {{{ proto array RedisCluster::georadiusbymember() }}} */
2859+
PHP_METHOD(RedisCluster, georadiusbymember_ro) {
2860+
CLUSTER_PROCESS_KW_CMD("GEORADIUSBYMEMBER_RO", redis_georadiusbymember_cmd, cluster_variant_resp, 1);
28492861
}
28502862

28512863
/* {{{ proto array RedisCluster::role(string key)

redis_cluster.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,9 @@ PHP_METHOD(RedisCluster, geohash);
244244
PHP_METHOD(RedisCluster, geopos);
245245
PHP_METHOD(RedisCluster, geodist);
246246
PHP_METHOD(RedisCluster, georadius);
247+
PHP_METHOD(RedisCluster, georadius_ro);
247248
PHP_METHOD(RedisCluster, georadiusbymember);
249+
PHP_METHOD(RedisCluster, georadiusbymember_ro);
248250

249251
/* SCAN and friends */
250252
PHP_METHOD(RedisCluster, scan);

redis_commands.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2788,9 +2788,10 @@ void append_georadius_opts(RedisSock *redis_sock, smart_string *str, short *slot
27882788
}
27892789
}
27902790

2791-
/* GEORADIUS */
2791+
/* GEORADIUS / GEORADIUS_RO */
27922792
int redis_georadius_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
2793-
char **cmd, int *cmd_len, short *slot, void **ctx)
2793+
char *kw, char **cmd, int *cmd_len, short *slot,
2794+
void **ctx)
27942795
{
27952796
char *key, *unit;
27962797
short store_slot = 0;
@@ -2823,7 +2824,7 @@ int redis_georadius_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
28232824
(gopts.store != STORE_NONE ? 2 : 0);
28242825

28252826
/* Begin construction of our command */
2826-
REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "GEORADIUS");
2827+
redis_cmd_init_sstr(&cmdstr, argc, kw, strlen(kw));
28272828

28282829
/* Prefix and set slot */
28292830
keyfree = redis_key_prefix(redis_sock, &key, &keylen);
@@ -2858,9 +2859,11 @@ int redis_georadius_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
28582859
return SUCCESS;
28592860
}
28602861

2861-
/* GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] */
2862+
/* GEORADIUSBYMEMBER/GEORADIUSBYMEMBER_RO
2863+
* key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] */
28622864
int redis_georadiusbymember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
2863-
char **cmd, int *cmd_len, short *slot, void **ctx)
2865+
char *kw, char **cmd, int *cmd_len, short *slot,
2866+
void **ctx)
28642867
{
28652868
char *key, *mem, *unit;
28662869
size_t keylen, memlen, unitlen;
@@ -2890,7 +2893,7 @@ int redis_georadiusbymember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_s
28902893
(gopts.store != STORE_NONE ? 2 : 0);
28912894

28922895
/* Begin command construction*/
2893-
REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "GEORADIUSBYMEMBER");
2896+
redis_cmd_init_sstr(&cmdstr, argc, kw, strlen(kw));
28942897

28952898
/* Prefix our key if we're prefixing and set the slot */
28962899
keyfree = redis_key_prefix(redis_sock, &key, &keylen);

redis_commands.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ int redis_flush_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
118118
int redis_xrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
119119
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
120120

121+
int redis_georadius_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
122+
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
123+
124+
int redis_georadiusbymember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
125+
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
126+
121127
/* Commands which need a unique construction mechanism. This is either because
122128
* they don't share a signature with any other command, or because there is
123129
* specific processing we do (e.g. verifying subarguments) that make them
@@ -253,12 +259,6 @@ int redis_fmt_scan_cmd(char **cmd, REDIS_SCAN_TYPE type, char *key, int key_len,
253259
int redis_geodist_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
254260
char **cmd, int *cmd_len, short *slot, void **ctx);
255261

256-
int redis_georadius_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
257-
char **cmd, int *cmd_len, short *slot, void **ctx);
258-
259-
int redis_georadiusbymember_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
260-
char **cmd, int *cmd_len, short *slot, void **ctx);
261-
262262
int redis_migrate_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
263263
char **cmd, int *cmd_len, short *slot, void **ctx);
264264

tests/RedisTest.php

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5109,29 +5109,29 @@ public function genericGeoRadiusTest($cmd) {
51095109
$this->addCities('{gk}');
51105110

51115111
/* Pre tested with redis-cli. We're just verifying proper delivery of distance and unit */
5112-
if ($cmd == 'georadius') {
5113-
$this->assertEquals($this->redis->georadius('{gk}', $lng, $lat, 10, 'mi'), ['Chico']);
5114-
$this->assertEquals($this->redis->georadius('{gk}', $lng, $lat, 30, 'mi'), ['Gridley','Chico']);
5115-
$this->assertEquals($this->redis->georadius('{gk}', $lng, $lat, 50, 'km'), ['Gridley','Chico']);
5116-
$this->assertEquals($this->redis->georadius('{gk}', $lng, $lat, 50000, 'm'), ['Gridley','Chico']);
5117-
$this->assertEquals($this->redis->georadius('{gk}', $lng, $lat, 150000, 'ft'), ['Gridley', 'Chico']);
5118-
$args = ['georadius', '{gk}', $lng, $lat, 500, 'mi'];
5112+
if ($cmd == 'georadius' || $cmd == 'georadius_ro') {
5113+
$this->assertEquals($this->redis->$cmd('{gk}', $lng, $lat, 10, 'mi'), Array('Chico'));
5114+
$this->assertEquals($this->redis->$cmd('{gk}', $lng, $lat, 30, 'mi'), Array('Gridley','Chico'));
5115+
$this->assertEquals($this->redis->$cmd('{gk}', $lng, $lat, 50, 'km'), Array('Gridley','Chico'));
5116+
$this->assertEquals($this->redis->$cmd('{gk}', $lng, $lat, 50000, 'm'), Array('Gridley','Chico'));
5117+
$this->assertEquals($this->redis->$cmd('{gk}', $lng, $lat, 150000, 'ft'), Array('Gridley', 'Chico'));
5118+
$args = Array($cmd, '{gk}', $lng, $lat, 500, 'mi');
51195119

51205120
/* Test a bad COUNT argument */
5121-
foreach ([-1, 0, 'notanumber'] as $count) {
5122-
$this->assertFalse(@$this->redis->georadius('{gk}', $lng, $lat, 10, 'mi', ['count' => $count]));
5121+
foreach (Array(-1, 0, 'notanumber') as $count) {
5122+
$this->assertFalse(@$this->redis->$cmd('{gk}', $lng, $lat, 10, 'mi', Array('count' => $count)));
51235123
}
51245124
} else {
5125-
$this->assertEquals($this->redis->georadiusbymember('{gk}', $city, 10, 'mi'), ['Chico']);
5126-
$this->assertEquals($this->redis->georadiusbymember('{gk}', $city, 30, 'mi'), ['Gridley','Chico']);
5127-
$this->assertEquals($this->redis->georadiusbymember('{gk}', $city, 50, 'km'), ['Gridley','Chico']);
5128-
$this->assertEquals($this->redis->georadiusbymember('{gk}', $city, 50000, 'm'), ['Gridley','Chico']);
5129-
$this->assertEquals($this->redis->georadiusbymember('{gk}', $city, 150000, 'ft'), ['Gridley', 'Chico']);
5130-
$args = ['georadiusbymember', '{gk}', $city, 500, 'mi'];
5125+
$this->assertEquals($this->redis->$cmd('{gk}', $city, 10, 'mi'), Array('Chico'));
5126+
$this->assertEquals($this->redis->$cmd('{gk}', $city, 30, 'mi'), Array('Gridley','Chico'));
5127+
$this->assertEquals($this->redis->$cmd('{gk}', $city, 50, 'km'), Array('Gridley','Chico'));
5128+
$this->assertEquals($this->redis->$cmd('{gk}', $city, 50000, 'm'), Array('Gridley','Chico'));
5129+
$this->assertEquals($this->redis->$cmd('{gk}', $city, 150000, 'ft'), Array('Gridley', 'Chico'));
5130+
$args = Array($cmd, '{gk}', $city, 500, 'mi');
51315131

51325132
/* Test a bad COUNT argument */
5133-
foreach ([-1, 0, 'notanumber'] as $count) {
5134-
$this->assertFalse(@$this->redis->georadiusbymember('{gk}', $city, 10, 'mi', ['count' => $count]));
5133+
foreach (Array(-1, 0, 'notanumber') as $count) {
5134+
$this->assertFalse(@$this->redis->$cmd('{gk}', $city, 10, 'mi', Array('count' => $count)));
51355135
}
51365136
}
51375137

@@ -5185,7 +5185,7 @@ public function genericGeoRadiusTest($cmd) {
51855185
}
51865186

51875187
$ret1 = $this->rawCommandArray('{gk}', $realargs);
5188-
if ($cmd == 'georadius') {
5188+
if ($cmd == 'georadius' || $cmd == 'georadius_ro') {
51895189
$ret2 = $this->redis->$cmd('{gk}', $lng, $lat, 500, 'mi', $realopts);
51905190
} else {
51915191
$ret2 = $this->redis->$cmd('{gk}', $city, 500, 'mi', $realopts);
@@ -5205,6 +5205,7 @@ public function testGeoRadius() {
52055205
}
52065206

52075207
$this->genericGeoRadiusTest('georadius');
5208+
$this->genericGeoRadiusTest('georadius_ro');
52085209
}
52095210

52105211
public function testGeoRadiusByMember() {
@@ -5213,6 +5214,7 @@ public function testGeoRadiusByMember() {
52135214
}
52145215

52155216
$this->genericGeoRadiusTest('georadiusbymember');
5217+
$this->genericGeoRadiusTest('georadiusbymember_ro');
52165218
}
52175219

52185220
public function testGeoPos() {

0 commit comments

Comments
 (0)