[Groonga-mysql-commit] mroonga/mroonga [master] [wrapper][transaction] recover record index by update.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 26日 (月) 14:53:36 JST


Kouhei Sutou	2011-12-26 14:53:36 +0900 (Mon, 26 Dec 2011)

  New Revision: ba11013079163edfc9bd671a4be12d734fc00f12

  Log:
    [wrapper][transaction] recover record index by update.
    
    It recovers broken index by rollbacked delete in transaction.
    
    refs #1224

  Copied files:
    test/sql/suite/groonga_wrapper/r/transaction_rollback_delete_delete.result
      (from test/sql/suite/groonga_wrapper/r/transaction_rollback_delete.result)
    test/sql/suite/groonga_wrapper/t/transaction_rollback_delete_delete.test
      (from test/sql/suite/groonga_wrapper/t/transaction_rollback_delete.test)
  Modified files:
    ha_mroonga.cc
  Renamed files:
    test/sql/suite/groonga_wrapper/r/transaction_rollback_delete_update.result
      (from test/sql/suite/groonga_wrapper/r/transaction_rollback_delete.result)
    test/sql/suite/groonga_wrapper/t/transaction_rollback_delete_update.test
      (from test/sql/suite/groonga_wrapper/t/transaction_rollback_delete.test)

  Modified: ha_mroonga.cc (+11 -2)
===================================================================
--- ha_mroonga.cc    2011-12-26 14:00:02 +0900 (3fd3a79)
+++ ha_mroonga.cc    2011-12-26 14:53:36 +0900 (ace0b6d)
@@ -4425,8 +4425,17 @@ int ha_mroonga::wrapper_update_row_index(const uchar *old_data, uchar *new_data)
 
       grn_rc rc;
       if (old_record_id == new_record_id) {
-        rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
-                                     &old_value_buffer, &new_value_buffer);
+        if (added) {
+          rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
+                                       &old_value_buffer, NULL);
+          if (!rc) {
+            rc = grn_column_index_update(ctx, index_column, new_record_id, j + 1,
+                                         NULL, &new_value_buffer);
+          }
+        } else {
+          rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
+                                       &old_value_buffer, &new_value_buffer);
+        }
       } else {
         rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
                                      &old_value_buffer, NULL);

  Copied: test/sql/suite/groonga_wrapper/r/transaction_rollback_delete_delete.result (+0 -0) 100%
===================================================================

  Renamed: test/sql/suite/groonga_wrapper/r/transaction_rollback_delete_update.result (+6 -9) 78%
===================================================================
--- test/sql/suite/groonga_wrapper/r/transaction_rollback_delete.result    2011-12-26 14:00:02 +0900 (2d8c752)
+++ test/sql/suite/groonga_wrapper/r/transaction_rollback_delete_update.result    2011-12-26 14:53:36 +0900 (4c0fa7e)
@@ -20,8 +20,7 @@ INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
 INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
 INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
 SELECT * FROM diaries
-WHERE MATCH(title) AGAINST("survey") AND
-MATCH(body) AGAINST("groonga");
+WHERE MATCH(title) AGAINST("survey");
 id	title	body
 1	survey	will start groonga!
 START TRANSACTION;
@@ -33,18 +32,16 @@ id	title	body
 2	groonga (1)	starting groonga...
 3	groonga (2)	started groonga.
 SELECT * FROM diaries
-WHERE MATCH(title) AGAINST("survey") AND
-MATCH(body) AGAINST("groonga");
+WHERE MATCH(title) AGAINST("survey");
 id	title	body
-DELETE FROM diaries WHERE id = 1;
-Warnings:
-Warning	1026	failed to get record ID for deleting from groonga: key=<>
+UPDATE diaries SET title = "survey day!" WHERE id = 1;
 SELECT * FROM diaries;
 id	title	body
+1	survey day!	will start groonga!
 2	groonga (1)	starting groonga...
 3	groonga (2)	started groonga.
 SELECT * FROM diaries
-WHERE MATCH(title) AGAINST("survey") AND
-MATCH(body) AGAINST("groonga");
+WHERE MATCH(title) AGAINST("survey");
 id	title	body
+1	survey day!	will start groonga!
 DROP TABLE diaries;

  Copied: test/sql/suite/groonga_wrapper/t/transaction_rollback_delete_delete.test (+0 -0) 100%
===================================================================

  Renamed: test/sql/suite/groonga_wrapper/t/transaction_rollback_delete_update.test (+4 -7) 84%
===================================================================
--- test/sql/suite/groonga_wrapper/t/transaction_rollback_delete.test    2011-12-26 14:00:02 +0900 (f9ebac3)
+++ test/sql/suite/groonga_wrapper/t/transaction_rollback_delete_update.test    2011-12-26 14:53:36 +0900 (298bd6f)
@@ -34,8 +34,7 @@ INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
 INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
 
 SELECT * FROM diaries
-  WHERE MATCH(title) AGAINST("survey") AND
-        MATCH(body) AGAINST("groonga");
+  WHERE MATCH(title) AGAINST("survey");
 
 START TRANSACTION;
 DELETE FROM diaries WHERE id = 1;
@@ -43,15 +42,13 @@ ROLLBACK;
 
 SELECT * FROM diaries;
 SELECT * FROM diaries
-  WHERE MATCH(title) AGAINST("survey") AND
-        MATCH(body) AGAINST("groonga");
+  WHERE MATCH(title) AGAINST("survey");
 
-DELETE FROM diaries WHERE id = 1;
+UPDATE diaries SET title = "survey day!" WHERE id = 1;
 
 SELECT * FROM diaries;
 SELECT * FROM diaries
-  WHERE MATCH(title) AGAINST("survey") AND
-        MATCH(body) AGAINST("groonga");
+  WHERE MATCH(title) AGAINST("survey");
 
 DROP TABLE diaries;
 




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