[Groonga-mysql-commit] mroonga/mroonga [master] [wrapper] extrace common codes as a method.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 6月 20日 (月) 17:17:38 JST


Kouhei Sutou	2011-06-20 08:17:38 +0000 (Mon, 20 Jun 2011)

  New Revision: 495d278d02960c5a360cedfe44c28b831ec37888

  Log:
    [wrapper] extrace common codes as a method.

  Modified files:
    ha_mroonga.cc
    ha_mroonga.h

  Modified: ha_mroonga.cc (+37 -41)
===================================================================
--- ha_mroonga.cc    2011-06-20 08:02:54 +0000 (e4e0520)
+++ ha_mroonga.cc    2011-06-20 08:17:38 +0000 (b7bcce3)
@@ -2817,6 +2817,37 @@ int ha_mroonga::write_row(uchar *buf)
   DBUG_RETURN(default_write_row(buf));
 }
 
+int ha_mroonga::wrapper_get_record_id(uchar *data, grn_id *record_id,
+                                      const char *context)
+{
+  MRN_DBUG_ENTER_METHOD();
+
+  int error = 0;
+
+  grn_obj key;
+  GRN_TEXT_INIT(&key, 0);
+
+  grn_bulk_space(ctx, &key, table->key_info->key_length);
+  key_copy((uchar *)(GRN_TEXT_VALUE(&key)),
+           data,
+           &(table->key_info[table_share->primary_key]),
+           table->key_info[table_share->primary_key].key_length);
+
+  *record_id = grn_table_get(ctx, grn_table,
+                             GRN_TEXT_VALUE(&key), GRN_TEXT_LEN(&key));
+  if (*record_id == GRN_ID_NIL) {
+    char error_message[MRN_MESSAGE_BUFFER_SIZE];
+    snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+             "%s: key=<%.*s>",
+             context, GRN_TEXT_LEN(&key), GRN_TEXT_VALUE(&key));
+    error = ER_ERROR_ON_WRITE;
+    my_message(error, error_message, MYF(0));
+  }
+  grn_obj_unlink(ctx, &key);
+
+  DBUG_RETURN(error);
+}
+
 int ha_mroonga::wrapper_update_row(const uchar *old_data, uchar *new_data)
 {
   int error;
@@ -2842,28 +2873,10 @@ int ha_mroonga::wrapper_update_row_index(const uchar *old_data, uchar *new_data)
   MRN_DBUG_ENTER_METHOD();
 
   int error = 0;
-
-  grn_obj key;
-  GRN_TEXT_INIT(&key, 0);
-
-  grn_bulk_space(ctx, &key, table->key_info->key_length);
-  key_copy((uchar *)(GRN_TEXT_VALUE(&key)),
-           (uchar *)old_data,
-           &(table->key_info[table_share->primary_key]),
-           table->key_info[table_share->primary_key].key_length);
-
   grn_id record_id;
-  record_id = grn_table_get(ctx, grn_table,
-                            GRN_TEXT_VALUE(&key), GRN_TEXT_LEN(&key));
-  if (record_id == GRN_ID_NIL) {
-    char error_message[MRN_MESSAGE_BUFFER_SIZE];
-    snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
-             "failed to get record ID for updating from groonga: key=<%.*s>",
-             GRN_TEXT_LEN(&key), GRN_TEXT_VALUE(&key));
-    error = ER_ERROR_ON_WRITE;
-    my_message(error, error_message, MYF(0));
-  }
-  grn_obj_unlink(ctx, &key);
+  error = wrapper_get_record_id((uchar *)old_data, &record_id,
+                                "failed to get record ID "
+                                "for updating from groonga");
   if (error) {
     DBUG_RETURN(error);
   }
@@ -3033,27 +3046,10 @@ int ha_mroonga::wrapper_delete_row_index(const uchar *buf)
 
   int error = 0;
 
-  grn_obj key;
-  GRN_TEXT_INIT(&key, 0);
-
-  grn_bulk_space(ctx, &key, table->key_info->key_length);
-  key_copy((uchar *)(GRN_TEXT_VALUE(&key)),
-           (uchar *)buf,
-           &(table->key_info[table_share->primary_key]),
-           table->key_info[table_share->primary_key].key_length);
-
   grn_id record_id;
-  record_id = grn_table_get(ctx, grn_table,
-                            GRN_TEXT_VALUE(&key), GRN_TEXT_LEN(&key));
-  if (record_id == GRN_ID_NIL) {
-    char error_message[MRN_MESSAGE_BUFFER_SIZE];
-    snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
-             "failed to get record ID for deleting from groonga: key=<%.*s>",
-             GRN_TEXT_LEN(&key), GRN_TEXT_VALUE(&key));
-    error = ER_ERROR_ON_WRITE;
-    my_message(error, error_message, MYF(0));
-  }
-  grn_obj_unlink(ctx, &key);
+  error = wrapper_get_record_id((uchar *)buf, &record_id,
+                                "failed to get record ID "
+                                "for deleting from groonga");
   if (error) {
     DBUG_RETURN(error);
   }

  Modified: ha_mroonga.h (+1 -0)
===================================================================
--- ha_mroonga.h    2011-06-20 08:02:54 +0000 (e23c850)
+++ ha_mroonga.h    2011-06-20 08:17:38 +0000 (7fa0cbc)
@@ -266,6 +266,7 @@ private:
   int wrapper_write_row(uchar *buf);
   int wrapper_write_row_index(uchar *buf);
   int default_write_row(uchar *buf);
+  int wrapper_get_record_id(uchar *data, grn_id *record_id, const char *context);
   int wrapper_update_row(const uchar *old_data, uchar *new_data);
   int wrapper_update_row_index(const uchar *old_data, uchar *new_data);
   int default_update_row(const uchar *old_data, uchar *new_data);




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