Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Turbo码先生
redis
提交
a3b07b17
R
redis
项目概览
Turbo码先生
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a3b07b17
编写于
6月 27, 2015
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Geo: COUNT option for GEORADIUS.
上级
cd91beea
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
2 deletion
+20
-2
src/geo.c
src/geo.c
+20
-2
未找到文件。
src/geo.c
浏览文件 @
a3b07b17
...
...
@@ -413,7 +413,7 @@ void geoAddCommand(redisClient *c) {
#define RADIUS_MEMBER 2
/* GEORADIUS key x y radius unit [WITHDIST] [WITHHASH] [WITHCOORD] [ASC|DESC]
*
[LIMI
T count]
*
[COUN
T count]
* GEORADIUSBYMEMBER key member radius unit ... options ... */
static
void
geoRadiusGeneric
(
redisClient
*
c
,
int
type
)
{
robj
*
key
=
c
->
argv
[
1
];
...
...
@@ -454,6 +454,7 @@ static void geoRadiusGeneric(redisClient *c, int type) {
/* Discover and populate all optional parameters. */
int
withdist
=
0
,
withhash
=
0
,
withcoords
=
0
;
int
sort
=
SORT_NONE
;
long
long
count
=
0
;
if
(
c
->
argc
>
base_args
)
{
int
remaining
=
c
->
argc
-
base_args
;
for
(
int
i
=
0
;
i
<
remaining
;
i
++
)
{
...
...
@@ -468,6 +469,14 @@ static void geoRadiusGeneric(redisClient *c, int type) {
sort
=
SORT_ASC
;
}
else
if
(
!
strcasecmp
(
arg
,
"desc"
))
{
sort
=
SORT_DESC
;
}
else
if
(
!
strcasecmp
(
arg
,
"count"
)
&&
remaining
>
0
)
{
if
(
getLongLongFromObjectOrReply
(
c
,
c
->
argv
[
base_args
+
i
+
1
],
&
count
,
NULL
)
!=
REDIS_OK
)
return
;
if
(
count
<=
0
)
{
addReplyError
(
c
,
"COUNT must be > 0"
);
return
;
}
i
++
;
}
else
{
addReply
(
c
,
shared
.
syntaxerr
);
return
;
...
...
@@ -475,6 +484,10 @@ static void geoRadiusGeneric(redisClient *c, int type) {
}
}
/* COUNT without ordering does not make much sense, force ASC
* ordering if COUNT was specified but no sorting was requested. */
if
(
count
!=
0
&&
sort
==
SORT_NONE
)
sort
=
SORT_ASC
;
/* Get all neighbor geohash boxes for our radius search */
GeoHashRadius
georadius
=
geohashGetAreasByRadiusWGS84
(
xy
[
0
],
xy
[
1
],
radius_meters
);
...
...
@@ -512,7 +525,8 @@ static void geoRadiusGeneric(redisClient *c, int type) {
* all strings of just zset members *or* a nested multi-bulk reply
* containing the zset member string _and_ all the additional options the
* user enabled for this request. */
addReplyMultiBulkLen
(
c
,
result_length
);
addReplyMultiBulkLen
(
c
,
(
count
==
0
||
result_length
<
count
)
?
result_length
:
count
);
/* Process [optional] requested sorting */
if
(
sort
==
SORT_ASC
)
{
...
...
@@ -546,6 +560,10 @@ static void geoRadiusGeneric(redisClient *c, int type) {
addReplyDouble
(
c
,
gp
->
longitude
);
addReplyDouble
(
c
,
gp
->
latitude
);
}
/* Stop if COUNT was specified and we already provided the
* specified number of elements. */
if
(
count
!=
0
&&
count
==
i
+
1
)
break
;
}
geoArrayFree
(
ga
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录