[Groonga-mysql-commit] mroonga/mroonga [master] [wrapper] support geo index update on insert.

Back to archive index

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:




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