null+****@clear*****
null+****@clear*****
2011年 10月 3日 (月) 18:16:32 JST
Kouhei Sutou 2011-10-03 09:16:32 +0000 (Mon, 03 Oct 2011) New Revision: f19e8f4d5f86640da8459b7b2eedc2bb26960caf Log: [storage] remove duplicated code for checking geo index.. Modified files: ha_mroonga.cc ha_mroonga.h Modified: ha_mroonga.cc (+20 -18) =================================================================== --- ha_mroonga.cc 2011-10-03 08:58:26 +0000 (3e9a57a) +++ ha_mroonga.cc 2011-10-03 09:16:32 +0000 (e95d359) @@ -425,6 +425,13 @@ static bool mrn_flush_logs(handlerton *hton) return result; } +static bool mrn_is_geo_key(KEY *key_info) +{ + return key_info->algorithm == HA_KEY_ALG_UNDEF && + key_info->key_parts == 1 && + key_info->key_part[0].field->type() == MYSQL_TYPE_GEOMETRY; +} + static grn_builtin_type mrn_get_type(grn_ctx *ctx, int mysql_field_type) { switch (mysql_field_type) { @@ -3966,6 +3973,9 @@ ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min, &size_max); } } + } else if (mrn_is_geo_key(&key_info)) { + row_count = storage_records_in_range_geo(key_nr, range_min, range_max); + DBUG_RETURN(row_count); } else { KEY_PART_INFO key_part = key_info.key_part[0]; Field *field = key_part.field; @@ -3976,18 +3986,13 @@ ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min, DBUG_RETURN((ha_rows)1) ; } - if (field->type() == MYSQL_TYPE_GEOMETRY) { - row_count = storage_records_in_range_geo(key_nr, range_min, range_max); - DBUG_RETURN(row_count); - } else { - if (range_min) { - mrn_set_key_buf(ctx, field, range_min->key, key_min[key_nr], &size_min); - val_min = key_min[key_nr]; - } - if (range_max) { - mrn_set_key_buf(ctx, field, range_max->key, key_max[key_nr], &size_max); - val_max = key_max[key_nr]; - } + if (range_min) { + mrn_set_key_buf(ctx, field, range_min->key, key_min[key_nr], &size_min); + val_min = key_min[key_nr]; + } + if (range_max) { + mrn_set_key_buf(ctx, field, range_max->key, key_max[key_nr], &size_max); + val_max = key_max[key_nr]; } } @@ -4190,15 +4195,13 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, val_min = mrn_multiple_column_key_encode(&key_info, key, key_length, key_min[active_index], &size_min); + } else if (mrn_is_geo_key(&key_info)) { + error = storage_index_read_map_geo(buf, key, find_flag); + DBUG_RETURN(error); } else { KEY_PART_INFO key_part = key_info.key_part[0]; Field *field = key_part.field; - if (field->type() == MYSQL_TYPE_GEOMETRY) { - error = storage_index_read_map_geo(buf, key, field, find_flag); - DBUG_RETURN(error); - } - if (find_flag == HA_READ_KEY_EXACT) { const char *column_name = field->field_name; int column_name_size = strlen(column_name); @@ -4273,7 +4276,6 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, } int ha_mroonga::storage_index_read_map_geo(uchar *buf, const uchar *key, - Field *field, enum ha_rkey_function find_flag) { MRN_DBUG_ENTER_METHOD(); Modified: ha_mroonga.h (+0 -1) =================================================================== --- ha_mroonga.h 2011-10-03 08:58:26 +0000 (3e1858f) +++ ha_mroonga.h 2011-10-03 09:16:32 +0000 (3c4ab8f) @@ -444,7 +444,6 @@ private: key_part_map keypart_map, enum ha_rkey_function find_flag); int storage_index_read_map_geo(uchar *buf, const uchar *key, - Field *field, enum ha_rkey_function find_flag); int wrapper_index_read_last_map(uchar *buf, const uchar *key, key_part_map keypart_map);