diff options
author | Leibale Eidelman <me@leibale.com> | 2023-05-09 07:24:37 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-09 14:24:37 +0300 |
commit | e04ebdb8d3f558b27ecdc6555a33ed91966371cd (patch) | |
tree | b165f7e927d2e9a0213e88ad1a59b8dfdf1582fc | |
parent | 6ab2174d37185cd20280ff3e0f7f287ebefd4c92 (diff) | |
download | redis-e04ebdb8d3f558b27ecdc6555a33ed91966371cd.tar.gz |
fix `GEORADIUS[BYMEMBER]` `STORE` & `STOREDIST` args spec (#12151)
in GEO commands, `STORE` and `STOREDIST` are mutually exclusive.
use `oneof` block to contain them
-rw-r--r-- | src/commands/georadius.json | 33 | ||||
-rw-r--r-- | src/commands/georadiusbymember.json | 33 | ||||
-rw-r--r-- | src/db.c | 2 | ||||
-rw-r--r-- | src/geo.c | 2 | ||||
-rw-r--r-- | tests/assets/test_cli_hint_suite.txt | 16 |
5 files changed, 48 insertions, 38 deletions
diff --git a/src/commands/georadius.json b/src/commands/georadius.json index 0eb919407..6ced9049c 100644 --- a/src/commands/georadius.json +++ b/src/commands/georadius.json @@ -186,20 +186,25 @@ ] }, { - "token": "STORE", - "name": "storekey", - "display": "key", - "type": "key", - "key_spec_index": 1, - "optional": true - }, - { - "token": "STOREDIST", - "name": "storedistkey", - "display": "key", - "type": "key", - "key_spec_index": 2, - "optional": true + "name": "store", + "type": "oneof", + "optional": true, + "arguments": [ + { + "token": "STORE", + "name": "storekey", + "display": "key", + "type": "key", + "key_spec_index": 1 + }, + { + "token": "STOREDIST", + "name": "storedistkey", + "display": "key", + "type": "key", + "key_spec_index": 2 + } + ] } ], "reply_schema": { diff --git a/src/commands/georadiusbymember.json b/src/commands/georadiusbymember.json index 0a8b27119..4b627419b 100644 --- a/src/commands/georadiusbymember.json +++ b/src/commands/georadiusbymember.json @@ -177,20 +177,25 @@ ] }, { - "token": "STORE", - "name": "storekey", - "display": "key", - "type": "key", - "key_spec_index": 1, - "optional": true - }, - { - "token": "STOREDIST", - "name": "storedistkey", - "display": "key", - "type": "key", - "key_spec_index": 2, - "optional": true + "name": "store", + "type": "oneof", + "optional": true, + "arguments": [ + { + "token": "STORE", + "name": "storekey", + "display": "key", + "type": "key", + "key_spec_index": 1 + }, + { + "token": "STOREDIST", + "name": "storedistkey", + "display": "key", + "type": "key", + "key_spec_index": 2 + } + ] } ], "reply_schema": { @@ -2315,7 +2315,7 @@ int migrateGetKeys(struct redisCommand *cmd, robj **argv, int argc, getKeysResul /* Helper function to extract keys from following commands: * GEORADIUS key x y radius unit [WITHDIST] [WITHHASH] [WITHCOORD] [ASC|DESC] - * [COUNT count] [STORE key] [STOREDIST key] + * [COUNT count] [STORE key|STOREDIST key] * GEORADIUSBYMEMBER key member radius unit ... options ... * * This command has a fully defined keyspec, so returning flags isn't needed. */ @@ -513,7 +513,7 @@ void geoaddCommand(client *c) { #define GEOSEARCHSTORE (1<<4) /* GEOSEARCHSTORE just accept STOREDIST option */ /* GEORADIUS key x y radius unit [WITHDIST] [WITHHASH] [WITHCOORD] [ASC|DESC] - * [COUNT count [ANY]] [STORE key] [STOREDIST key] + * [COUNT count [ANY]] [STORE key|STOREDIST key] * GEORADIUSBYMEMBER key member radius unit ... options ... * GEOSEARCH key [FROMMEMBER member] [FROMLONLAT long lat] [BYRADIUS radius unit] * [BYBOX width height unit] [WITHCOORD] [WITHDIST] [WITHASH] [COUNT count [ANY]] [ASC|DESC] diff --git a/tests/assets/test_cli_hint_suite.txt b/tests/assets/test_cli_hint_suite.txt index 3b9adea31..18c1fe07a 100644 --- a/tests/assets/test_cli_hint_suite.txt +++ b/tests/assets/test_cli_hint_suite.txt @@ -86,17 +86,17 @@ # Incorrect type for EX 'seconds' parameter - stop hinting. "SET key value EX sec " "" -# Reordering partially-matched optional argument: GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key] -"GEORADIUS key " "longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]" -"GEORADIUS key 1 2 3 M " "[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]" -"GEORADIUS key 1 2 3 M COUNT " "count [ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key] [STOREDIST key]" -"GEORADIUS key 1 2 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key] [STOREDIST key]" -"GEORADIUS key 1 2 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key] [STOREDIST key]" -"GEORADIUS key 1 -2.345 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key] [STOREDIST key]"" "" +# Reordering partially-matched optional argument: GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key|STOREDIST key] +"GEORADIUS key " "longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key|STOREDIST key]" +"GEORADIUS key 1 2 3 M " "[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key|STOREDIST key]" +"GEORADIUS key 1 2 3 M COUNT " "count [ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key|STOREDIST key]" +"GEORADIUS key 1 2 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key|STOREDIST key]" +"GEORADIUS key 1 2 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key|STOREDIST key]" +"GEORADIUS key 1 -2.345 3 M COUNT 12 " "[ANY] [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [STORE key|STOREDIST key]"" "" # Wrong data type: latitude must be a double. Hinting fails. "GEORADIUS key 1 X " "" # Once the next optional argument is started, the [ANY] hint completing the COUNT argument disappears. -"GEORADIUS key 1 2 3 M COUNT 12 ASC " "[WITHCOORD] [WITHDIST] [WITHHASH] [STORE key] [STOREDIST key]" +"GEORADIUS key 1 2 3 M COUNT 12 ASC " "[WITHCOORD] [WITHDIST] [WITHHASH] [STORE key|STOREDIST key]" # Incorrect argument type for double-valued token parameter. "GEOSEARCH k FROMLONLAT " "longitude latitude BYRADIUS radius M|KM|FT|MI|BYBOX width height M|KM|FT|MI [ASC|DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]" |