[Groonga-commit] groonga/groonga [master] adopted grn_dat for table/column name management. refs #1167

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 18日 (金) 17:58:12 JST


Daijiro MORI	2011-11-18 08:58:12 +0000 (Fri, 18 Nov 2011)

  New Revision: 964ec43bf468229b119de155bc14b3eee49706d1

  Log:
    adopted grn_dat for table/column name management. refs #1167

  Modified files:
    lib/db.c
    lib/db.h

  Modified: lib/db.c (+169 -88)
===================================================================
--- lib/db.c    2011-11-17 19:41:18 +0000 (3ea6d1b)
+++ lib/db.c    2011-11-18 08:58:12 +0000 (a4c8686)
@@ -89,8 +89,14 @@ grn_db_create(grn_ctx *ctx, const char *path, grn_db_create_optarg *optarg)
                           GRN_TINY_ARRAY_CLEAR|
                           GRN_TINY_ARRAY_THREADSAFE|
                           GRN_TINY_ARRAY_USE_MALLOC);
-      if ((s->keys = grn_pat_create(ctx, path, GRN_PAT_MAX_KEY_SIZE, 0,
-                                    GRN_OBJ_KEY_VAR_SIZE))) {
+#ifdef USE_PAT_AS_DB_KEYS
+      s->keys = (grn_obj *)grn_pat_create(ctx, path, GRN_PAT_MAX_KEY_SIZE,
+                                          0, GRN_OBJ_KEY_VAR_SIZE);
+#else /* USE_PAT_AS_DB_KEYS */
+      s->keys = (grn_obj *)grn_dat_create(ctx, path, GRN_PAT_MAX_KEY_SIZE,
+                                          0, GRN_OBJ_KEY_VAR_SIZE);
+#endif /* USE_PAT_AS_DB_KEYS */
+      if (s->keys) {
         CRITICAL_SECTION_INIT(s->lock);
         GRN_DB_OBJ_SET_TYPE(s, GRN_DB);
         s->obj.db = (grn_obj *)s;
@@ -113,8 +119,13 @@ grn_db_create(grn_ctx *ctx, const char *path, grn_db_create_optarg *optarg)
           grn_db_init_builtin_types(ctx);
           GRN_API_RETURN((grn_obj *)s);
         }
-        grn_pat_close(ctx, s->keys);
+#ifdef USE_PAT_AS_DB_KEYS
+        grn_pat_close(ctx, (grn_pat *)s->keys);
         grn_pat_remove(ctx, path);
+#else /* USE_PAT_AS_DB_KEYS */
+        grn_dat_close(ctx, (grn_dat *)s->keys);
+        grn_dat_remove(ctx, path);
+#endif /* USE_PAT_AS_DB_KEYS */
       }
       grn_tiny_array_fin(&s->values);
       GRN_FREE(s);
@@ -135,11 +146,22 @@ grn_db_open(grn_ctx *ctx, const char *path)
   GRN_API_ENTER;
   if (path && strlen(path) <= PATH_MAX - 14) {
     if ((s = GRN_MALLOC(sizeof(grn_db)))) {
+      uint32_t type = grn_io_detect_type(ctx, path);
       grn_tiny_array_init(ctx, &s->values, sizeof(db_value),
                           GRN_TINY_ARRAY_CLEAR|
                           GRN_TINY_ARRAY_THREADSAFE|
                           GRN_TINY_ARRAY_USE_MALLOC);
-      if ((s->keys = grn_pat_open(ctx, path))) {
+      switch (type) {
+      case GRN_TABLE_PAT_KEY :
+        s->keys = (grn_obj *)grn_pat_open(ctx, path);
+        break;
+      case GRN_TABLE_DAT_KEY :
+        s->keys = (grn_obj *)grn_dat_open(ctx, path);
+        break;
+      default :
+        s->keys = NULL;
+      }
+      if (s->keys) {
         char buffer[PATH_MAX];
         gen_pathname(path, buffer, 0);
         if ((s->specs = grn_ja_open(ctx, buffer))) {
@@ -159,7 +181,14 @@ grn_db_open(grn_ctx *ctx, const char *path)
           grn_db_init_builtin_query(ctx);
           GRN_API_RETURN((grn_obj *)s);
         }
-        grn_pat_close(ctx, s->keys);
+        switch (type) {
+        case GRN_TABLE_PAT_KEY :
+          grn_pat_close(ctx, (grn_pat *)s->keys);
+          break;
+        case GRN_TABLE_DAT_KEY :
+          grn_dat_close(ctx, (grn_dat *)s->keys);
+          break;
+        }
       }
       grn_tiny_array_fin(&s->values);
       GRN_FREE(s);
@@ -172,6 +201,22 @@ grn_db_open(grn_ctx *ctx, const char *path)
   GRN_API_RETURN(NULL);
 }
 
+static grn_id
+grn_db_curr_id(grn_ctx *ctx, grn_obj *db)
+{
+  grn_id curr_id = GRN_ID_NIL;
+  grn_db *s = (grn_db *)db;
+  switch (s->keys->header.type) {
+  case GRN_TABLE_PAT_KEY :
+    curr_id = grn_pat_curr_id(ctx, (grn_pat *)s->keys);
+    break;
+  case GRN_TABLE_DAT_KEY :
+    curr_id = grn_dat_curr_id(ctx, (grn_dat *)s->keys);
+    break;
+  }
+  return curr_id;
+}
+
 /* s must be validated by caller */
 grn_rc
 grn_db_close(grn_ctx *ctx, grn_obj *db)
@@ -186,7 +231,7 @@ grn_db_close(grn_ctx *ctx, grn_obj *db)
   if (ctx_used_db) {
     grn_ctx_loader_clear(ctx);
   }
-  GRN_TINY_ARRAY_EACH(&s->values, 1, grn_pat_curr_id(ctx, s->keys), id, vp, {
+  GRN_TINY_ARRAY_EACH(&s->values, 1, grn_db_curr_id(ctx, db), id, vp, {
     if (vp->ptr) { grn_obj_close(ctx, vp->ptr); }
   });
 /* grn_tiny_array_fin should be refined.. */
@@ -197,7 +242,14 @@ grn_db_close(grn_ctx *ctx, grn_obj *db)
   }
 #endif
   grn_tiny_array_fin(&s->values);
-  grn_pat_close(ctx, s->keys);
+  switch (s->keys->header.type) {
+  case GRN_TABLE_PAT_KEY :
+    grn_pat_close(ctx, (grn_pat *)s->keys);
+    break;
+  case GRN_TABLE_DAT_KEY :
+    grn_dat_close(ctx, (grn_dat *)s->keys);
+    break;
+  }
   CRITICAL_SECTION_FIN(s->lock);
   if (s->specs) { grn_ja_close(ctx, s->specs); }
   GRN_FREE(s);
@@ -222,7 +274,7 @@ grn_ctx_get(grn_ctx *ctx, const char *name, unsigned name_size)
   GRN_API_ENTER;
   if (GRN_DB_P(db)) {
     grn_db *s = (grn_db *)db;
-    if ((id = grn_pat_get(ctx, s->keys, name, name_size, NULL))) {
+    if ((id = grn_table_get(ctx, s->keys, name, name_size))) {
       obj = grn_ctx_at(ctx, id);
     }
   }
@@ -241,10 +293,46 @@ grn_db_keys(grn_obj *s)
   return (grn_obj *)(((grn_db *)s)->keys);
 }
 
+static grn_io*
+grn_obj_io(grn_obj *obj)
+{
+  grn_io *io = NULL;
+  if (obj) {
+    if (obj->header.type == GRN_DB) { obj = ((grn_db *)obj)->keys; }
+    switch (obj->header.type) {
+    case GRN_TABLE_PAT_KEY :
+      io = ((grn_pat *)obj)->io;
+      break;
+    case GRN_TABLE_DAT_KEY :
+      io = ((grn_dat *)obj)->io;
+      break;
+    case GRN_TABLE_HASH_KEY :
+      io = ((grn_hash *)obj)->io;
+      break;
+    case GRN_TABLE_NO_KEY :
+      io = ((grn_array *)obj)->io;
+      break;
+    case GRN_TABLE_VIEW :
+      io = ((grn_view *)obj)->hash->io;
+      break;
+    case GRN_COLUMN_VAR_SIZE :
+      io = ((grn_ja *)obj)->io;
+      break;
+    case GRN_COLUMN_FIX_SIZE :
+      io = ((grn_ra *)obj)->io;
+      break;
+    case GRN_COLUMN_INDEX :
+      io = ((grn_ii *)obj)->seg;
+      break;
+    }
+  }
+  return io;
+}
+
 uint32_t
 grn_db_lastmod(grn_obj *s)
 {
-  return (((grn_db *)s)->keys)->io->header->lastmod;
+  return grn_obj_io(((grn_db *)s)->keys)->header->lastmod;
 }
 
 void
@@ -252,7 +340,7 @@ grn_db_touch(grn_ctx *ctx, grn_obj *s)
 {
   grn_timeval tv;
   grn_timeval_now(ctx, &tv);
-  (((grn_db *)s)->keys)->io->header->lastmod = tv.tv_sec;
+  grn_obj_io(s)->header->lastmod = tv.tv_sec;
 }
 
 #define IS_TEMP(obj) (DB_OBJ(obj)->id & GRN_OBJ_TMP_OBJECT)
@@ -268,7 +356,7 @@ grn_obj_touch(grn_ctx *ctx, grn_obj *obj, grn_timeval *tv)
   if (obj) {
     switch (obj->header.type) {
     case GRN_DB :
-      ((grn_db *)obj)->keys->io->header->lastmod = tv->tv_sec;
+      grn_obj_io(obj)->header->lastmod = tv->tv_sec;
       break;
     case GRN_TABLE_HASH_KEY :
     case GRN_TABLE_PAT_KEY :
@@ -278,7 +366,7 @@ grn_obj_touch(grn_ctx *ctx, grn_obj *obj, grn_timeval *tv)
     case GRN_COLUMN_FIX_SIZE :
     case GRN_COLUMN_INDEX :
       if (!IS_TEMP(obj)) {
-        ((grn_db *)DB_OBJ(obj)->db)->keys->io->header->lastmod = tv->tv_sec;
+        grn_obj_io(DB_OBJ(obj)->db)->header->lastmod = tv->tv_sec;
       }
       break;
     }
@@ -386,8 +474,8 @@ grn_proc_create(grn_ctx *ctx, const char *name, unsigned name_size, grn_proc_typ
   }
   if (name && name_size) {
     grn_db *s = (grn_db *)db;
-    if (!(id = grn_pat_add(ctx, s->keys, name, name_size, NULL, &added))) {
-      ERR(GRN_NO_MEMORY_AVAILABLE, "grn_pat_add failed");
+    if (!(id = grn_table_add(ctx, s->keys, name, name_size, &added))) {
+      ERR(GRN_NO_MEMORY_AVAILABLE, "grn_table_add failed");
       GRN_API_RETURN(NULL);
     }
     if (!added) {
@@ -593,7 +681,7 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
     GRN_LOG(ctx, GRN_LOG_NOTICE, "DDL:table_create %.*s", name_size, name);
     if (!path) {
       if (GRN_DB_PERSISTENT_P(db)) {
-        gen_pathname(((grn_db *)db)->keys->io->path, buffer, id);
+        gen_pathname(grn_obj_io(db)->path, buffer, id);
         path = buffer;
       } else {
         ERR(GRN_INVALID_ARGUMENT, "path not assigned for persistent table");
@@ -1350,7 +1438,17 @@ grn_table_delete(grn_ctx *ctx, grn_obj *table, const void *key, unsigned key_siz
         });
         break;
       case GRN_TABLE_DAT_KEY :
-        rc = GRN_OPERATION_NOT_SUPPORTED;
+        WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+          grn_dat *dat = (grn_dat *)table;
+          if (dat->io && !(dat->io->flags & GRN_IO_TEMPORARY)) {
+            if (!(rc = grn_io_lock(ctx, dat->io, 10000000))) {
+              rc = grn_dat_delete(ctx, dat, key, key_size, NULL);
+              grn_io_unlock(dat->io);
+            }
+          } else {
+            rc = grn_dat_delete(ctx, dat, key, key_size, NULL);
+          }
+        });
         break;
       case GRN_TABLE_HASH_KEY :
         WITH_NORMALIZE((grn_hash *)table, key, key_size, {
@@ -1390,7 +1488,7 @@ _grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
         rc = grn_pat_delete_by_id(ctx, (grn_pat *)table, id, optarg);
         break;
       case GRN_TABLE_DAT_KEY :
-        rc = GRN_OPERATION_NOT_SUPPORTED;
+        rc = grn_dat_delete_by_id(ctx, (grn_dat *)table, id, optarg);
         break;
       case GRN_TABLE_HASH_KEY :
         rc = grn_hash_delete_by_id(ctx, (grn_hash *)table, id, optarg);
@@ -1407,44 +1505,6 @@ _grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
   return rc;
 }
 
-static grn_io*
-grn_obj_io(grn_obj *obj)
-{
-  grn_io *io = NULL;
-  if (obj) {
-    switch (obj->header.type) {
-    case GRN_DB :
-      io = ((grn_db *)obj)->keys->io;
-      break;
-    case GRN_TABLE_PAT_KEY :
-      io = ((grn_pat *)obj)->io;
-      break;
-    case GRN_TABLE_DAT_KEY :
-      io = ((grn_dat *)obj)->io;
-      break;
-    case GRN_TABLE_HASH_KEY :
-      io = ((grn_hash *)obj)->io;
-      break;
-    case GRN_TABLE_NO_KEY :
-      io = ((grn_array *)obj)->io;
-      break;
-    case GRN_TABLE_VIEW :
-      io = ((grn_view *)obj)->hash->io;
-      break;
-    case GRN_COLUMN_VAR_SIZE :
-      io = ((grn_ja *)obj)->io;
-      break;
-    case GRN_COLUMN_FIX_SIZE :
-      io = ((grn_ra *)obj)->io;
-      break;
-    case GRN_COLUMN_INDEX :
-      io = ((grn_ii *)obj)->seg;
-      break;
-    }
-  }
-  return io;
-}
-
 grn_rc
 grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id)
 {
@@ -1598,7 +1658,7 @@ grn_table_size(grn_ctx *ctx, grn_obj *table)
   if (table) {
     switch (table->header.type) {
     case GRN_DB :
-      n = grn_pat_size(ctx, ((grn_db *)table)->keys);
+      n = grn_table_size(ctx, ((grn_db *)table)->keys);
       break;
     case GRN_TABLE_PAT_KEY :
       n = grn_pat_size(ctx, (grn_pat *)table);
@@ -1991,12 +2051,8 @@ grn_table_cursor_open(grn_ctx *ctx, grn_obj *table,
     }
   }
   if (!ctx->rc) {
+    if (table->header.type == GRN_DB) { table = ((grn_db *)table)->keys; }
     switch (table->header.type) {
-    case GRN_DB :
-      tc = (grn_table_cursor *)grn_pat_cursor_open(ctx, ((grn_db *)table)->keys,
-                                                   min, min_size,
-                                                   max, max_size, offset, limit, flags);
-      break;
     case GRN_TABLE_PAT_KEY :
       tc = (grn_table_cursor *)grn_pat_cursor_open(ctx, (grn_pat *)table,
                                                    min, min_size,
@@ -2433,10 +2489,30 @@ grn_table_search(grn_ctx *ctx, grn_obj *table, const void *key, uint32_t key_siz
           if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
           break;
         case GRN_OP_PREFIX :
-          rc = GRN_OPERATION_NOT_SUPPORTED;
+          {
+            grn_dat_cursor *dc = grn_dat_cursor_open(ctx, dat, key, key_size, NULL, 0,
+                                                     0, -1, GRN_CURSOR_PREFIX);
+            if (dc) {
+              grn_id id;
+              while ((id = grn_dat_cursor_next(ctx, dc))) {
+                grn_table_add(ctx, res, &id, sizeof(grn_id), NULL);
+              }
+              grn_dat_cursor_close(ctx, dc);
+            }
+          }
           break;
         case GRN_OP_LCP :
-          rc = GRN_OPERATION_NOT_SUPPORTED;
+          {
+            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);
+            }
+          }
           break;
         default :
           rc = GRN_INVALID_ARGUMENT;
@@ -2918,16 +2994,17 @@ grn_table_columns(grn_ctx *ctx, grn_obj *table, const char *name, unsigned name_
 {
   int n = 0;
   GRN_API_ENTER;
-  if (GRN_OBJ_TABLEP(table) && !(DB_OBJ(table)->id & GRN_OBJ_TMP_OBJECT)) {
+  if (GRN_OBJ_TABLEP(table) && DB_OBJ(table)->id &&
+      !(DB_OBJ(table)->id & GRN_OBJ_TMP_OBJECT)) {
     grn_db *s = (grn_db *)DB_OBJ(table)->db;
     if (s->keys) {
       grn_obj bulk;
       GRN_TEXT_INIT(&bulk, 0);
-      grn_pat_get_key2(ctx, s->keys, DB_OBJ(table)->id, &bulk);
+      grn_table_get_key2(ctx, s->keys, DB_OBJ(table)->id, &bulk);
       GRN_TEXT_PUTC(ctx, &bulk, GRN_DB_DELIMITER);
       grn_bulk_write(ctx, &bulk, name, name_size);
-      grn_pat_prefix_search(ctx, s->keys, GRN_BULK_HEAD(&bulk), GRN_BULK_VSIZE(&bulk),
-                            (grn_hash *)res);
+      grn_table_search(ctx, s->keys, GRN_BULK_HEAD(&bulk), GRN_BULK_VSIZE(&bulk),
+                       GRN_OP_PREFIX, res, GRN_OP_OR);
       grn_obj_close(ctx, &bulk);
       n = grn_table_size(ctx, res);
     }
@@ -2939,9 +3016,8 @@ const char *
 _grn_table_key(grn_ctx *ctx, grn_obj *table, grn_id id, uint32_t *key_size)
 {
   GRN_ASSERT(table);
+  if (table->header.type == GRN_DB) { table = ((grn_db *)table)->keys; }
   switch (table->header.type) {
-  case GRN_DB :
-    return _grn_pat_key(ctx, ((grn_db *)table)->keys, id, key_size);
   case GRN_TABLE_HASH_KEY :
     return _grn_hash_key(ctx, (grn_hash *)table, id, key_size);
   case GRN_TABLE_PAT_KEY :
@@ -3022,8 +3098,7 @@ grn_column_create(grn_ctx *ctx, grn_obj *table,
     goto exit;
   }
   if ((domain = DB_OBJ(table)->id)) {
-    int len = grn_pat_get_key(ctx, s->keys, domain,
-                              fullname, GRN_PAT_MAX_KEY_SIZE);
+    int len = grn_table_get_key(ctx, s->keys, domain, fullname, GRN_PAT_MAX_KEY_SIZE);
     if (name_size + 1 + len > GRN_PAT_MAX_KEY_SIZE) {
       ERR(GRN_INVALID_ARGUMENT,
           "[column][create]: too long column name: required name_size(%d) < %d"
@@ -3068,7 +3143,7 @@ grn_column_create(grn_ctx *ctx, grn_obj *table,
   if (GRN_OBJ_PERSISTENT & flags) {
     if (!path) {
       if (GRN_DB_PERSISTENT_P(db)) {
-        gen_pathname(s->keys->io->path, buffer, id);
+        gen_pathname(grn_obj_io(db)->path, buffer, id);
         path = buffer;
       } else {
         int table_name_len;
@@ -3181,7 +3256,7 @@ grn_column_open(grn_ctx *ctx, grn_obj *table,
     goto exit;
   }
   if ((domain = DB_OBJ(table)->id)) {
-    int len = grn_pat_get_key(ctx, s->keys, domain, fullname, GRN_PAT_MAX_KEY_SIZE);
+    int len = grn_table_get_key(ctx, s->keys, domain, fullname, GRN_PAT_MAX_KEY_SIZE);
     if (name_size + 1 + len > GRN_PAT_MAX_KEY_SIZE) {
       ERR(GRN_INVALID_ARGUMENT, "too long column name");
       goto exit;
@@ -4422,7 +4497,7 @@ grn_accessor_get_value_(grn_ctx *ctx, grn_accessor *a, grn_id id, uint32_t *size
       value = grn_obj_get_value_(ctx, a->obj, id, size);
       break;
     case GRN_ACCESSOR_GET_DB_OBJ :
-      value = _grn_pat_key(ctx, ((grn_db *)ctx->impl->db)->keys, id, size);
+      value = _grn_table_key(ctx, ((grn_db *)ctx->impl->db)->keys, id, size);
       break;
     case GRN_ACCESSOR_LOOKUP :
       /* todo */
@@ -5342,11 +5417,8 @@ grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valueb
       }
       {
         grn_encoding enc;
+        if (obj->header.type == GRN_DB) { obj = ((grn_db *)obj)->keys; }
         switch (obj->header.type) {
-        case GRN_DB :
-          enc = ((grn_db *)obj)->keys->encoding;
-          grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
-          break;
         case GRN_TABLE_PAT_KEY :
           enc = ((grn_pat *)obj)->encoding;
           grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
@@ -6087,9 +6159,9 @@ grn_obj_register(grn_ctx *ctx, grn_obj *db, const char *name, unsigned name_size
   if (name && name_size) {
     grn_db *s = (grn_db *)db;
     int added;
-    if (!(id = grn_pat_add(ctx, s->keys, name, name_size, NULL, &added))) {
+    if (!(id = grn_table_add(ctx, s->keys, name, name_size, &added))) {
       ERR(GRN_NO_MEMORY_AVAILABLE,
-          "grn_pat_add failed: <%.*s>", name_size, name);
+          "grn_table_add failed: <%.*s>", name_size, name);
     } else if (!added) {
       ERR(GRN_INVALID_ARGUMENT,
           "already used name was assigned: <%.*s>", name_size, name);
@@ -6119,7 +6191,16 @@ grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, int removep)
         vp->ptr = NULL;
         vp->done = 0;
       }
-      return removep ? grn_pat_delete_by_id(ctx, s->keys, id, NULL) : GRN_SUCCESS;
+      if (removep) {
+        switch (s->keys->header.type) {
+        case GRN_TABLE_PAT_KEY :
+          return grn_pat_delete_by_id(ctx, (grn_pat *)s->keys, id, NULL);
+        case GRN_TABLE_DAT_KEY :
+          return grn_dat_delete_by_id(ctx, (grn_dat *)s->keys, id, NULL);
+        }
+      } else {
+        return GRN_SUCCESS;
+      }
     }
   }
   return GRN_INVALID_ARGUMENT;
@@ -6173,7 +6254,7 @@ grn_db_obj_init(grn_ctx *ctx, grn_obj *db, grn_id id, grn_db_obj *obj)
     memcpy(buffer, path, size);\
     buffer[size] = '\0';\
   } else {\
-    gen_pathname(s->keys->io->path, buffer, id);\
+    gen_pathname(grn_obj_io(s->keys)->path, buffer, id);  \
   }\
 }
 
@@ -6655,7 +6736,7 @@ grn_obj_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
     if (DB_OBJ(obj)->id) {
       grn_db *s = (grn_db *)DB_OBJ(obj)->db;
       if (!(DB_OBJ(obj)->id & GRN_OBJ_TMP_OBJECT)) {
-        len = grn_pat_get_key(ctx, s->keys, DB_OBJ(obj)->id, namebuf, buf_size);
+        len = grn_table_get_key(ctx, s->keys, DB_OBJ(obj)->id, namebuf, buf_size);
       }
     }
   }
@@ -6672,7 +6753,7 @@ grn_column_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
   if (GRN_DB_OBJP(obj)) {
     if (DB_OBJ(obj)->id && DB_OBJ(obj)->id < GRN_ID_MAX) {
       grn_db *s = (grn_db *)DB_OBJ(obj)->db;
-      len = grn_pat_get_key(ctx, s->keys, DB_OBJ(obj)->id, buf, GRN_TABLE_MAX_KEY_SIZE);
+      len = grn_table_get_key(ctx, s->keys, DB_OBJ(obj)->id, buf, GRN_TABLE_MAX_KEY_SIZE);
       if (len) {
         int cl;
         char *p = buf, *p0 = p, *pe = p + len;
@@ -6737,7 +6818,7 @@ grn_column_name_(grn_ctx *ctx, grn_obj *obj, grn_obj *buf)
     if (DB_OBJ(obj)->id && DB_OBJ(obj)->id < GRN_ID_MAX) {
       uint32_t len;
       grn_db *s = (grn_db *)DB_OBJ(obj)->db;
-      const char *p = _grn_pat_key(ctx, s->keys, DB_OBJ(obj)->id, &len);
+      const char *p = _grn_table_key(ctx, s->keys, DB_OBJ(obj)->id, &len);
       if (len) {
         int cl;
         const char *p0 = p, *pe = p + len;
@@ -7500,7 +7581,7 @@ grn_db_init_builtin_types(grn_ctx *ctx)
   obj = deftype(ctx, "WGS84GeoPoint",
                 GRN_OBJ_KEY_GEO_POINT, sizeof(grn_geo_point));
   if (!obj || DB_OBJ(obj)->id != GRN_DB_WGS84_GEO_POINT) { return GRN_FILE_CORRUPT; }
-  for (id = grn_pat_curr_id(ctx, ((grn_db *)db)->keys) + 1; id < GRN_DB_MECAB; id++) {
+  for (id = grn_db_curr_id(ctx, db) + 1; id < GRN_DB_MECAB; id++) {
     grn_itoh(id, buf + 3, 2);
     grn_obj_register(ctx, db, buf, 5);
   }
@@ -7513,12 +7594,12 @@ grn_db_init_builtin_types(grn_ctx *ctx)
   }
 #endif
   grn_db_init_builtin_tokenizers(ctx);
-  for (id = grn_pat_curr_id(ctx, ((grn_db *)db)->keys) + 1; id < 128; id++) {
+  for (id = grn_db_curr_id(ctx, db) + 1; id < 128; id++) {
     grn_itoh(id, buf + 3, 2);
     grn_obj_register(ctx, db, buf, 5);
   }
   grn_db_init_builtin_query(ctx);
-  for (id = grn_pat_curr_id(ctx, ((grn_db *)db)->keys) + 1; id < GRN_N_RESERVED_TYPES; id++) {
+  for (id = grn_db_curr_id(ctx, db) + 1; id < GRN_N_RESERVED_TYPES; id++) {
     grn_itoh(id, buf + 3, 2);
     grn_obj_register(ctx, db, buf, 5);
   }

  Modified: lib/db.h (+1 -1)
===================================================================
--- lib/db.h    2011-11-17 19:41:18 +0000 (bd10d2a)
+++ lib/db.h    2011-11-18 08:58:12 +0000 (ae9e13f)
@@ -67,7 +67,7 @@ typedef struct _grn_proc grn_proc;
 
 struct _grn_db {
   grn_db_obj obj;
-  grn_pat *keys;
+  grn_obj *keys;
   grn_ja *specs;
   grn_tiny_array values;
   grn_critical_section lock;




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