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;