[Groonga-commit] groonga/groonga [master] updated to use grn_dat_lcp_search() and grn_dat_next().

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 27日 (火) 11:01:16 JST


Susumu Yata	2011-12-27 11:01:16 +0900 (Tue, 27 Dec 2011)

  New Revision: ff2a41f66588cb522e5e0e5c5e84ab606ccbf569

  Log:
    updated to use grn_dat_lcp_search() and grn_dat_next().

  Modified files:
    lib/db.c

  Modified: lib/db.c (+6 -19)
===================================================================
--- lib/db.c    2011-12-27 10:55:00 +0900 (78322b9)
+++ lib/db.c    2011-12-27 11:01:16 +0900 (bb00462)
@@ -946,12 +946,7 @@ grn_table_lcp_search(grn_ctx *ctx, grn_obj *table, const void *key, unsigned key
     {
       grn_dat *dat = (grn_dat *)table;
       WITH_NORMALIZE(dat, key, key_size, {
-        grn_dat_cursor *c;
-        if ((c = grn_dat_cursor_open(ctx, dat, NULL, 0, key, key_size,
-                                     0, 1, GRN_CURSOR_PREFIX))) {
-          id = grn_dat_cursor_next(ctx, c);
-          grn_dat_cursor_close(ctx, c);
-        }
+        id = grn_dat_lcp_search(ctx, dat, key, key_size);
       });
     }
     break;
@@ -2656,14 +2651,13 @@ grn_table_search(grn_ctx *ctx, grn_obj *table, const void *key, uint32_t key_siz
   case GRN_TABLE_DAT_KEY :
     {
       grn_dat *dat = (grn_dat *)table;
-      grn_id id;
       WITH_NORMALIZE(dat, key, key_size, {
         switch (mode) {
         case GRN_OP_EXACT :
           {
-            id = grn_dat_get(ctx, dat, key, key_size, NULL);
+            grn_id id = grn_dat_get(ctx, dat, key, key_size, NULL);
+            if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
           }
-          if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
           break;
         case GRN_OP_PREFIX :
           {
@@ -2680,15 +2674,8 @@ grn_table_search(grn_ctx *ctx, grn_obj *table, const void *key, uint32_t key_siz
           break;
         case GRN_OP_LCP :
           {
-            grn_dat_cursor *dc = grn_dat_cursor_open(ctx, dat, NULL, 0, key, key_size,
-                                                     0, 1, GRN_CURSOR_PREFIX);
-            if (dc) {
-              grn_id id;
-              if ((id = grn_dat_cursor_next(ctx, dc))) {
-                grn_table_add(ctx, res, &id, sizeof(grn_id), NULL);
-              }
-              grn_dat_cursor_close(ctx, dc);
-            }
+            grn_id id = grn_dat_lcp_search(ctx, dat, key, key_size);
+            if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
           }
           break;
         default :
@@ -2723,7 +2710,7 @@ grn_table_next(grn_ctx *ctx, grn_obj *table, grn_id id)
       r = grn_pat_next(ctx, (grn_pat *)table, id);
       break;
     case GRN_TABLE_DAT_KEY :
-      r = (id >= grn_dat_curr_id(ctx, (grn_dat *)table)) ? GRN_ID_NIL : id + 1;
+      r = grn_dat_next(ctx, (grn_dat *)table, id);
       break;
     case GRN_TABLE_HASH_KEY :
       r = grn_hash_next(ctx, (grn_hash *)table, id);




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