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);