[Groonga-commit] groonga/groonga [master] Fixed a bug in sub_search() cause wrong result when GRN_CURSOR_RK assigned.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 8月 17日 (火) 17:38:58 JST


Daijiro MORI	2010-08-17 08:38:58 +0000 (Tue, 17 Aug 2010)

  New Revision: b5e9186d44ea19068acebd1cdc113643d8c2d764

  Log:
    Fixed a bug in sub_search() cause wrong result when GRN_CURSOR_RK assigned.

  Modified files:
    lib/pat.c

  Modified: lib/pat.c (+5 -5)
===================================================================
--- lib/pat.c    2010-08-17 07:14:25 +0000 (5a6f82a)
+++ lib/pat.c    2010-08-17 08:38:58 +0000 (d36e01a)
@@ -2691,12 +2691,12 @@ sub_search(grn_ctx *ctx, grn_pat *pat, grn_id id,
 {
   pat_node *pn;
   uint32_t len = key_len * 16;
+  if (!key_len) { return id; }
   PAT_AT(pat, id, pn);
   while (pn) {
     int ch;
     ch = PAT_CHK(pn);
     if (*c0 < ch && ch < len - 1) {
-      grn_id id;
       if (ch & 1) {
         id = (ch + 1 < len) ? pn->lr[1] : pn->lr[0];
       } else {
@@ -2720,13 +2720,13 @@ search_push(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
     int step;
     uint16_t ns, ne;
     if (flags & GRN_CURSOR_DESCENDING) {
-      ns = rk_tree_idx[state] - 1;
-      ne = rk_tree_idx[state - 1] - 1;
-      step = -1;
-    } else {
       ns = rk_tree_idx[state - 1];
       ne = rk_tree_idx[state];
       step = 1;
+    } else {
+      ns = rk_tree_idx[state] - 1;
+      ne = rk_tree_idx[state - 1] - 1;
+      step = -1;
     }
     for (; ns != ne; ns += step) {
       rk_tree_node *rn = &rk_tree[ns];




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