null+****@clear*****
null+****@clear*****
2011年 10月 3日 (月) 19:17:40 JST
Kouhei Sutou 2011-10-03 10:17:40 +0000 (Mon, 03 Oct 2011)
New Revision: a577e257e52c0512db6d77dd9fb73f729ab0e9a8
Log:
[wrapper] support geo index update on insert.
Modified files:
ha_mroonga.cc
ha_mroonga.h
Modified: ha_mroonga.cc (+15 -7)
===================================================================
--- ha_mroonga.cc 2011-10-03 10:13:22 +0000 (da1ad78)
+++ ha_mroonga.cc 2011-10-03 10:17:40 +0000 (ccc35e5)
@@ -1262,6 +1262,8 @@ ha_mroonga::ha_mroonga(handlerton *hton, TABLE_SHARE *share)
matched_record_keys = NULL;
fulltext_searching = FALSE;
GRN_TEXT_INIT(&key_buffer, 0);
+ GRN_VOID_INIT(&old_value_buffer);
+ GRN_VOID_INIT(&new_value_buffer);
DBUG_VOID_RETURN;
}
@@ -1269,6 +1271,8 @@ ha_mroonga::~ha_mroonga()
{
MRN_DBUG_ENTER_METHOD();
grn_obj_unlink(ctx, &key_buffer);
+ grn_obj_unlink(ctx, &old_value_buffer);
+ grn_obj_unlink(ctx, &new_value_buffer);
grn_ctx_fin(ctx);
DBUG_VOID_RETURN;
}
@@ -3140,9 +3144,6 @@ int ha_mroonga::wrapper_write_row_index(uchar *buf)
DBUG_RETURN(error);
}
- grn_obj new_value;
- GRN_VOID_INIT(&new_value);
-
#ifndef DBUG_OFF
my_bitmap_map *tmp_map = dbug_tmp_use_all_columns(table, table->read_set);
#endif
@@ -3151,7 +3152,8 @@ int ha_mroonga::wrapper_write_row_index(uchar *buf)
for (i = 0; i < n_keys; i++) {
KEY key_info = table->key_info[i];
- if (key_info.algorithm != HA_KEY_ALG_FULLTEXT) {
+ if (!(key_info.algorithm == HA_KEY_ALG_FULLTEXT ||
+ mrn_is_geo_key(&key_info))) {
continue;
}
@@ -3165,11 +3167,18 @@ int ha_mroonga::wrapper_write_row_index(uchar *buf)
continue;
int new_column_size;
- mrn_set_buf(ctx, field, &new_value, &new_column_size);
+ error = mrn_set_buf(ctx, field, &new_value_buffer, &new_column_size);
+ if (error) {
+ my_message(error,
+ "mroonga: wrapper: "
+ "failed to get new value for updating index.",
+ MYF(0));
+ goto err;
+ }
grn_rc rc;
rc = grn_column_index_update(ctx, index_column, record_id, j + 1,
- NULL, &new_value);
+ NULL, &new_value_buffer);
if (rc) {
error = ER_ERROR_ON_WRITE;
my_message(error, ctx->errbuf, MYF(0));
@@ -3181,7 +3190,6 @@ err:
#ifndef DBUG_OFF
dbug_tmp_restore_column_map(table->read_set, tmp_map);
#endif
- grn_obj_unlink(ctx, &new_value);
DBUG_RETURN(error);
}
Modified: ha_mroonga.h (+2 -0)
===================================================================
--- ha_mroonga.h 2011-10-03 10:13:22 +0000 (49c3fcd)
+++ ha_mroonga.h 2011-10-03 10:17:40 +0000 (b0c6d64)
@@ -118,6 +118,8 @@ public:
ha_mroonga *parent_for_clone;
MEM_ROOT *mem_root_for_clone;
grn_obj key_buffer;
+ grn_obj old_value_buffer;
+ grn_obj new_value_buffer;
grn_id record_id;
private: