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;