[Groonga-commit] groonga/groonga [master] Fixed a bug in grn_geo_search().

Back to archive index

null+****@clear***** null+****@clear*****
2010年 7月 2日 (金) 15:57:41 JST


Daijiro MORI	2010-07-02 06:57:41 +0000 (Fri, 02 Jul 2010)

  New Revision: 0aefcbaacecf5a2980750805a32ec5246a067d8c

  Log:
    Fixed a bug in grn_geo_search().

  Modified files:
    lib/expr.c
    lib/proc.c

  Modified: lib/expr.c (+2 -2)
===================================================================
--- lib/expr.c    2010-07-02 04:24:38 +0000 (671f271)
+++ lib/expr.c    2010-07-02 06:57:41 +0000 (05a6068)
@@ -3455,7 +3455,7 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
       }
       break;
     case GRN_OP_CALL :
-      if (c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION) {
+      if (c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION || c + 1 == ce) {
         stat = SCAN_START;
         m++;
       } else {
@@ -3577,7 +3577,7 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
       break;
     case GRN_OP_CALL :
       if (!si) { SI_ALLOC(si, i, c - e->codes); }
-      if (c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION) {
+      if (c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION || c + 1 == ce) {
         stat = SCAN_START;
         si->op = c->op;
         si->end = c - e->codes;

  Modified: lib/proc.c (+7 -4)
===================================================================
--- lib/proc.c    2010-07-02 04:24:38 +0000 (e24fcaa)
+++ lib/proc.c    2010-07-02 06:57:41 +0000 (f70d99f)
@@ -1962,9 +1962,12 @@ grn_geo_search(grn_ctx *ctx, grn_obj *obj, grn_obj **args, int nargs,
 {
   grn_id domain;
   double lng0, lat0, lng1, lat1, lng2, lat2, x, y, d;
-  grn_obj *pos1 = args[1], *pos2 = args[2], pos1_, pos2_;
-  grn_obj *pat = grn_ctx_at(ctx, obj->header.domain);
-  if (nargs != 3) { goto exit; }
+  grn_obj *proc, *pat, *pos1, *pos2, pos1_, pos2_;
+  if (nargs != 4) { goto exit; }
+  pat = grn_ctx_at(ctx, obj->header.domain);
+  proc = args[0];
+  pos1 = args[2];
+  pos2 = args[3];
   domain = pat->header.domain;
   if (domain != GRN_DB_TOKYO_GEO_POINT && domain != GRN_DB_WGS84_GEO_POINT) { goto exit; }
   if (pos1->header.domain != domain) {
@@ -2028,7 +2031,7 @@ grn_geo_search(grn_ctx *ctx, grn_obj *obj, grn_obj **args, int nargs,
       x = (lng1 - lng0) * cos((lat0 + lat1) * 0.5);
       y = (lat1 - lat0);
       if (((x * x) + (y * y)) <= d) {
-        grn_ii_at(ctx, (grn_ii *)index, tid, (grn_hash *)res, op);
+        grn_ii_at(ctx, (grn_ii *)obj, tid, (grn_hash *)res, op);
       }
     }
     grn_table_cursor_close(ctx, tc);




Groonga-commit メーリングリストの案内
Back to archive index