[Groonga-mysql-commit] mroonga/mroonga [master] [wrapper][geo] *just* create index.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 10月 3日 (月) 18:17:13 JST


Kouhei Sutou	2011-10-03 09:17:13 +0000 (Mon, 03 Oct 2011)

  New Revision: f2c8296950f467638ae73b3e3d6d66967506d82b

  Log:
    [wrapper][geo] *just* create index.

  Modified files:
    ha_mroonga.cc
    ha_mroonga.h

  Modified: ha_mroonga.cc (+53 -0)
===================================================================
--- ha_mroonga.cc    2011-10-03 09:16:32 +0000 (e95d359)
+++ ha_mroonga.cc    2011-10-03 09:17:13 +0000 (d86016c)
@@ -1538,6 +1538,55 @@ int ha_mroonga::wrapper_create_index_fulltext(grn_obj *grn_table,
   DBUG_RETURN(error);
 }
 
+int ha_mroonga::wrapper_create_index_geo(grn_obj *grn_table,
+                                         const char *grn_table_name,
+                                         int i,
+                                         KEY *key_info,
+                                         grn_obj **index_tables,
+                                         MRN_SHARE *tmp_share)
+{
+  MRN_DBUG_ENTER_METHOD();
+  int error = 0;
+
+  char index_name[MRN_MAX_PATH_SIZE];
+  mrn_index_table_name_gen(grn_table_name, key_info->name, index_name);
+
+  grn_obj_flags index_table_flags =
+    GRN_OBJ_TABLE_PAT_KEY |
+    GRN_OBJ_PERSISTENT;
+  grn_obj *index_table;
+
+  grn_obj_flags index_column_flags =
+    GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT;
+
+  grn_obj *lexicon_key_type = grn_ctx_at(ctx, GRN_DB_WGS84_GEO_POINT);
+  index_table = grn_table_create(ctx, index_name, strlen(index_name), NULL,
+                                 index_table_flags, lexicon_key_type, 0);
+  if (ctx->rc) {
+    error = ER_CANT_CREATE_TABLE;
+    my_message(ER_CANT_CREATE_TABLE, ctx->errbuf, MYF(0));
+    grn_obj_unlink(ctx, lexicon_key_type);
+    DBUG_RETURN(error);
+  }
+  grn_obj_unlink(ctx, lexicon_key_type);
+  index_tables[i] = index_table;
+
+  grn_obj *index_column = grn_column_create(ctx, index_table,
+                                            index_column_name,
+                                            strlen(index_column_name),
+                                            NULL,
+                                            index_column_flags,
+                                            grn_table);
+  if (ctx->rc) {
+    error = ER_CANT_CREATE_TABLE;
+    my_message(error, ctx->errbuf, MYF(0));
+    DBUG_RETURN(error);
+  }
+  grn_obj_unlink(ctx, index_column);
+
+  DBUG_RETURN(error);
+}
+
 int ha_mroonga::wrapper_create_index(const char *name, TABLE *table,
                                      HA_CREATE_INFO *info, MRN_SHARE *tmp_share)
 {
@@ -1576,6 +1625,10 @@ int ha_mroonga::wrapper_create_index(const char *name, TABLE *table,
       error = wrapper_create_index_fulltext(grn_table, grn_table_name,
                                             i, &key_info,
                                             index_tables, tmp_share);
+    } else if (mrn_is_geo_key(&key_info)) {
+      error = wrapper_create_index_geo(grn_table, grn_table_name,
+                                       i, &key_info,
+                                       index_tables, tmp_share);
     }
   }
 

  Modified: ha_mroonga.h (+6 -0)
===================================================================
--- ha_mroonga.h    2011-10-03 09:16:32 +0000 (3c4ab8f)
+++ ha_mroonga.h    2011-10-03 09:17:13 +0000 (a1d9aff)
@@ -354,6 +354,12 @@ private:
                                     KEY *key_info,
                                     grn_obj **index_tables,
                                     MRN_SHARE *tmp_share);
+  int wrapper_create_index_geo(grn_obj *grn_table,
+                               const char *grn_table_name,
+                               int i,
+                               KEY *key_info,
+                               grn_obj **index_tables,
+                               MRN_SHARE *tmp_share);
   int wrapper_create_index(const char *name, TABLE *table,
                            HA_CREATE_INFO *info, MRN_SHARE *tmp_share);
   int storage_create_validate_pseudo_column(TABLE *table);




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