null+****@clear*****
null+****@clear*****
2011年 11月 6日 (日) 17:37:14 JST
Kentoku 2011-11-06 08:37:14 +0000 (Sun, 06 Nov 2011) New Revision: d6768325653c26691b82f0a2a4a091ca529287a4 Log: fix update/delete operation using spatial index for wrapper mode. refs #1156 Modified files: ha_mroonga.cc test/sql/groonga_wrapper/r/geometry_contains.result test/sql/groonga_wrapper/r/geometry_delete.result test/sql/groonga_wrapper/r/geometry_update.result test/sql/groonga_wrapper/t/geometry_contains.test test/sql/groonga_wrapper/t/geometry_delete.test test/sql/groonga_wrapper/t/geometry_update.test Modified: ha_mroonga.cc (+67 -6) =================================================================== --- ha_mroonga.cc 2011-11-03 15:39:33 +0000 (ac2221a) +++ ha_mroonga.cc 2011-11-06 08:37:14 +0000 (cfaeb35) @@ -4354,14 +4354,15 @@ ha_rows ha_mroonga::generic_records_in_range_geo(uint key_nr, ha_rows ha_mroonga::records_in_range(uint key_nr, key_range *range_min, key_range *range_max) { MRN_DBUG_ENTER_METHOD(); - int error = 0; + ha_rows row_count = 0; if (share->wrapper_mode) { - error = wrapper_records_in_range(key_nr, range_min, range_max); + row_count = wrapper_records_in_range(key_nr, range_min, range_max); } else { - error = storage_records_in_range(key_nr, range_min, range_max); + row_count = storage_records_in_range(key_nr, range_min, range_max); } - DBUG_RETURN(error); + DBUG_PRINT("info", ("mroonga row_count=%d", row_count)); + DBUG_RETURN(row_count); } int ha_mroonga::wrapper_index_init(uint idx, bool sorted) @@ -4371,7 +4372,8 @@ int ha_mroonga::wrapper_index_init(uint idx, bool sorted) MRN_DBUG_ENTER_METHOD(); MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); - if (key_info.algorithm != HA_KEY_ALG_FULLTEXT) { + if (!mrn_is_geo_key(&key_info) && key_info.algorithm != HA_KEY_ALG_FULLTEXT) + { error = wrap_handler->ha_index_init(share->wrap_key_nr[idx], sorted); } else { error = wrap_handler->ha_index_init(share->wrap_primary_key, sorted); @@ -4586,6 +4588,7 @@ int ha_mroonga::index_read_map(uchar *buf, const uchar *key, } else { error = storage_index_read_map(buf, key, keypart_map, find_flag); } + DBUG_PRINT("info", ("mroonga error=%d", error)); DBUG_RETURN(error); } @@ -4952,6 +4955,16 @@ int ha_mroonga::wrapper_read_range_first(const key_range *start_key, { int error = 0; MRN_DBUG_ENTER_METHOD(); + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + clear_cursor(); + clear_cursor_geo(); + error = generic_geo_open_cursor(start_key->key, start_key->flag); + if (!error) { + error = wrapper_get_next_record(table->record[0]); + } + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -5095,6 +5108,11 @@ int ha_mroonga::wrapper_read_range_next() { int error = 0; MRN_DBUG_ENTER_METHOD(); + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + error = wrapper_get_next_record(table->record[0]); + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6216,6 +6234,12 @@ ha_rows ha_mroonga::wrapper_multi_range_read_info_const(uint keyno, { MRN_DBUG_ENTER_METHOD(); ha_rows rows; + KEY key_info = table->key_info[keyno]; + if (mrn_is_geo_key(&key_info)) { + rows = handler::multi_range_read_info_const(keyno, seq, seq_init_param, + n_ranges, bufsz, flags, cost); + DBUG_RETURN(rows); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6237,7 +6261,8 @@ ha_rows ha_mroonga::storage_multi_range_read_info_const(uint keyno, COST_VECT *cost) { MRN_DBUG_ENTER_METHOD(); - ha_rows rows = handler::multi_range_read_info_const(keyno, seq, seq_init_param, + ha_rows rows = handler::multi_range_read_info_const(keyno, seq, + seq_init_param, n_ranges, bufsz, flags, cost); DBUG_RETURN(rows); @@ -6273,6 +6298,15 @@ ha_rows ha_mroonga::wrapper_multi_range_read_info(uint keyno, uint n_ranges, { MRN_DBUG_ENTER_METHOD(); ha_rows rows; + KEY key_info = table->key_info[keyno]; + if (mrn_is_geo_key(&key_info)) { + rows = handler::multi_range_read_info(keyno, n_ranges, keys, +#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS + key_parts, +#endif + bufsz, flags, cost); + DBUG_RETURN(rows); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6337,6 +6371,12 @@ int ha_mroonga::wrapper_multi_range_read_init(RANGE_SEQ_IF *seq, { MRN_DBUG_ENTER_METHOD(); int error = 0; + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + error = handler::multi_range_read_init(seq, seq_init_param, + n_ranges, mode, buf); + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6380,6 +6420,11 @@ int ha_mroonga::wrapper_multi_range_read_next(range_id_t *range_info) { MRN_DBUG_ENTER_METHOD(); int error = 0; + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + error = handler::multi_range_read_next(range_info); + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6418,6 +6463,12 @@ int ha_mroonga::wrapper_read_multi_range_first(KEY_MULTI_RANGE **found_range_p, { int error = 0; MRN_DBUG_ENTER_METHOD(); + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + error = handler::read_multi_range_first(found_range_p, ranges, + range_count, sorted, buffer); + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6464,6 +6515,11 @@ int ha_mroonga::wrapper_read_multi_range_next(KEY_MULTI_RANGE **found_range_p) { int error = 0; MRN_DBUG_ENTER_METHOD(); + KEY key_info = table->key_info[active_index]; + if (mrn_is_geo_key(&key_info)) { + error = handler::read_multi_range_next(found_range_p); + DBUG_RETURN(error); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); if (fulltext_searching) @@ -6653,6 +6709,11 @@ double ha_mroonga::wrapper_read_time(uint index, uint ranges, ha_rows rows) { double res; MRN_DBUG_ENTER_METHOD(); + KEY key_info = table->key_info[index]; + if (mrn_is_geo_key(&key_info)) { + res = handler::read_time(index, ranges, rows); + DBUG_RETURN(res); + } MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); res = wrap_handler->read_time(share->wrap_key_nr[index], ranges, rows); Modified: test/sql/groonga_wrapper/r/geometry_contains.result (+1 -1) =================================================================== --- test/sql/groonga_wrapper/r/geometry_contains.result 2011-11-03 15:39:33 +0000 (2ae5f67) +++ test/sql/groonga_wrapper/r/geometry_contains.result 2011-11-06 08:37:14 +0000 (088c59e) @@ -1,4 +1,4 @@ -drop table if exists diaries; +drop table if exists shops; create table shops ( id int primary key auto_increment, name text, Modified: test/sql/groonga_wrapper/r/geometry_delete.result (+1 -1) =================================================================== --- test/sql/groonga_wrapper/r/geometry_delete.result 2011-11-03 15:39:33 +0000 (5ef931f) +++ test/sql/groonga_wrapper/r/geometry_delete.result 2011-11-06 08:37:14 +0000 (9ab2162) @@ -1,4 +1,4 @@ -drop table if exists diaries; +drop table if exists shops; create table shops ( id int primary key auto_increment, name text, Modified: test/sql/groonga_wrapper/r/geometry_update.result (+1 -1) =================================================================== --- test/sql/groonga_wrapper/r/geometry_update.result 2011-11-03 15:39:33 +0000 (d985f4b) +++ test/sql/groonga_wrapper/r/geometry_update.result 2011-11-06 08:37:14 +0000 (9d43b7b) @@ -1,4 +1,4 @@ -drop table if exists diaries; +drop table if exists shops; create table shops ( id int primary key auto_increment, name text, Modified: test/sql/groonga_wrapper/t/geometry_contains.test (+1 -1) =================================================================== --- test/sql/groonga_wrapper/t/geometry_contains.test 2011-11-03 15:39:33 +0000 (75ea56f) +++ test/sql/groonga_wrapper/t/geometry_contains.test 2011-11-06 08:37:14 +0000 (6470265) @@ -17,7 +17,7 @@ --source suite/groonga_include/groonga_init.inc --disable_warnings -drop table if exists diaries; +drop table if exists shops; --enable_warnings create table shops ( Modified: test/sql/groonga_wrapper/t/geometry_delete.test (+1 -1) =================================================================== --- test/sql/groonga_wrapper/t/geometry_delete.test 2011-11-03 15:39:33 +0000 (1d120e2) +++ test/sql/groonga_wrapper/t/geometry_delete.test 2011-11-06 08:37:14 +0000 (4c96e7f) @@ -17,7 +17,7 @@ --source suite/groonga_include/groonga_init.inc --disable_warnings -drop table if exists diaries; +drop table if exists shops; --enable_warnings create table shops ( Modified: test/sql/groonga_wrapper/t/geometry_update.test (+1 -1) =================================================================== --- test/sql/groonga_wrapper/t/geometry_update.test 2011-11-03 15:39:33 +0000 (3e79891) +++ test/sql/groonga_wrapper/t/geometry_update.test 2011-11-06 08:37:14 +0000 (7b194bc) @@ -17,7 +17,7 @@ --source suite/groonga_include/groonga_init.inc --disable_warnings -drop table if exists diaries; +drop table if exists shops; --enable_warnings create table shops (