null+****@clear*****
null+****@clear*****
2012年 4月 22日 (日) 13:04:20 JST
Kouhei Sutou 2012-04-22 13:04:20 +0900 (Sun, 22 Apr 2012) New Revision: 9c6b02690c69eeacedbf49d9384f2b67042befc9 Log: Use method local variables instead of members keys_min and keys_max are removed. Modified files: ha_mroonga.cpp ha_mroonga.hpp Modified: ha_mroonga.cpp (+35 -86) =================================================================== --- ha_mroonga.cpp 2012-04-22 12:54:40 +0900 (6b99542) +++ ha_mroonga.cpp 2012-04-22 13:04:20 +0900 (99f8894) @@ -1699,9 +1699,6 @@ ha_mroonga::ha_mroonga(handlerton *hton, TABLE_SHARE *share_arg) sorted_result(NULL), matched_record_keys(NULL), - keys_min(NULL), - keys_max(NULL), - dup_key(0), count_skip(false), @@ -3078,11 +3075,8 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) // for HA_KEY_ALG_FULLTEXT keys. grn_index_tables = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys); grn_index_columns = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys); - keys_min = (uchar **)malloc(sizeof(uchar *) * n_keys); - keys_max = (uchar **)malloc(sizeof(uchar *) * n_keys); } else { grn_index_tables = grn_index_columns = NULL; - keys_min = keys_max = NULL; } mrn::PathMapper mapper(name); @@ -3090,8 +3084,6 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) for (i = 0; i < n_keys; i++) { KEY key_info = table->s->key_info[i]; - keys_min[i] = NULL; - keys_max[i] = NULL; grn_index_tables[i] = NULL; grn_index_columns[i] = NULL; @@ -3099,9 +3091,6 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) continue; } - keys_min[i] = (uchar *)malloc(MRN_MAX_KEY_SIZE); - keys_max[i] = (uchar *)malloc(MRN_MAX_KEY_SIZE); - if (i == n_primary_keys) { continue; } @@ -3121,8 +3110,6 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) } error = ER_CANT_OPEN_FILE; my_message(error, ctx->errbuf, MYF(0)); - free(keys_min[i]); - free(keys_max[i]); goto error; } @@ -3148,8 +3135,6 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) } error = ER_CANT_OPEN_FILE; my_message(error, ctx->errbuf, MYF(0)); - free(keys_min[i]); - free(keys_max[i]); grn_obj_unlink(ctx, grn_index_tables[i]); goto error; } @@ -3160,12 +3145,6 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error) error: if (error) { while (i-- > 0) { - if (keys_min[i]) { - free(keys_min[i]); - } - if (keys_max[i]) { - free(keys_max[i]); - } grn_obj *index_column = grn_index_columns[i]; if (index_column) { grn_obj_unlink(ctx, index_column); @@ -3175,12 +3154,8 @@ error: grn_obj_unlink(ctx, index_table); } } - free(keys_min); - free(keys_max); free(grn_index_columns); free(grn_index_tables); - keys_min = NULL; - keys_max = NULL; grn_index_columns = NULL; grn_index_tables = NULL; } @@ -3342,21 +3317,15 @@ int ha_mroonga::storage_open_indexes(const char *name) grn_index_columns = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys); key_id = (grn_id *)malloc(sizeof(grn_id) * n_keys); del_key_id = (grn_id *)malloc(sizeof(grn_id) * n_keys); - keys_min = (uchar **)malloc(sizeof(uchar *) * n_keys); - keys_max = (uchar **)malloc(sizeof(uchar *) * n_keys); } else { grn_index_tables = grn_index_columns = NULL; key_id = NULL; del_key_id = NULL; - keys_min = keys_max = NULL; } mrn::PathMapper mapper(name); uint i, j; for (i = 0; i < n_keys; i++) { - keys_min[i] = (uchar *)malloc(MRN_MAX_KEY_SIZE); - keys_max[i] = (uchar *)malloc(MRN_MAX_KEY_SIZE); - if (i == pkey_nr) { grn_index_tables[i] = grn_index_columns[i] = NULL; continue; @@ -3404,12 +3373,6 @@ error: if (error) { if (i) { while (true) { - if (keys_min[i]) { - free(keys_min[i]); - } - if (keys_max[i]) { - free(keys_max[i]); - } grn_obj *index_column = grn_index_columns[i]; if (index_column) { grn_obj_unlink(ctx, index_column); @@ -3423,14 +3386,10 @@ error: i--; } } - free(keys_min); - free(keys_max); free(key_id); free(del_key_id); free(grn_index_columns); free(grn_index_tables); - keys_min = NULL; - keys_max = NULL; key_id = NULL; del_key_id = NULL; grn_index_columns = NULL; @@ -5494,6 +5453,8 @@ ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min, uint size_min = 0, size_max = 0; ha_rows row_count = 0; uchar *key_min = NULL, *key_max = NULL; + uchar key_min_entity[MRN_MAX_KEY_SIZE]; + uchar key_max_entity[MRN_MAX_KEY_SIZE]; KEY key_info = table->s->key_info[key_nr]; bool is_multiple_column_index = key_info.key_parts > 1; @@ -5503,21 +5464,21 @@ ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min, range_min->length == range_max->length && memcmp(range_min->key, range_max->key, range_min->length) == 0) { flags |= GRN_CURSOR_PREFIX; - key_min = keys_min[key_nr]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, range_min->key, range_min->length, key_min, &size_min, false); } else { if (range_min) { - key_min = keys_min[key_nr]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, range_min->key, range_min->length, key_min, &size_min, false); } if (range_max) { - key_max = keys_max[key_nr]; + key_max = key_max_entity; storage_encode_multiple_column_key(&key_info, range_max->key, range_max->length, key_max, &size_max, @@ -5540,12 +5501,12 @@ ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min, } if (range_min) { - storage_encode_key(field, range_min->key, keys_min[key_nr], &size_min); - key_min = keys_min[key_nr]; + key_min = key_min_entity; + storage_encode_key(field, range_min->key, key_min, &size_min); } if (range_max) { - storage_encode_key(field, range_max->key, keys_max[key_nr], &size_max); - key_max = keys_max[key_nr]; + key_max = key_max_entity; + storage_encode_key(field, range_max->key, key_max, &size_max); } } @@ -5763,6 +5724,8 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, int flags = 0; uint size_min = 0, size_max = 0; uchar *key_min = NULL, *key_max = NULL; + uchar key_min_entity[MRN_MAX_KEY_SIZE]; + uchar key_max_entity[MRN_MAX_KEY_SIZE]; clear_cursor(); clear_cursor_geo(); @@ -5772,7 +5735,7 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, mrn_change_encoding(ctx, NULL); flags |= GRN_CURSOR_PREFIX; uint key_length = calculate_key_len(table, active_index, key, keypart_map); - key_min = keys_min[active_index]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, key, key_length, key_min, &size_min, @@ -5797,13 +5760,13 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, const char *column_name = field->field_name; int column_name_size = strlen(column_name); - storage_encode_key(field, key, keys_min[key_nr], &size_min); - key_min = keys_min[key_nr]; - key_max = keys_min[key_nr]; + key_min = key_min_entity; + key_max = key_min_entity; + storage_encode_key(field, key, key_min, &size_min); size_max = size_min; // for _id if (strncmp(MRN_COLUMN_NAME_ID, column_name, column_name_size) == 0) { - grn_id found_record_id = *(grn_id *)keys_min[key_nr]; + grn_id found_record_id = *((grn_id *)key_min); if (grn_table_at(ctx, grn_table, found_record_id) != GRN_ID_NIL) { // found storage_store_fields(buf, found_record_id); table->status = 0; @@ -5818,11 +5781,11 @@ int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key, find_flag == HA_READ_BEFORE_KEY || find_flag == HA_READ_PREFIX_LAST_OR_PREV ) { - storage_encode_key(field, key, keys_max[key_nr], &size_max); - key_max = keys_max[key_nr]; + key_max = key_max_entity; + storage_encode_key(field, key, key_max_entity, &size_max); } else { - storage_encode_key(field, key, keys_min[key_nr], &size_min); - key_min = keys_min[key_nr]; + key_min = key_min_entity; + storage_encode_key(field, key, key_min_entity, &size_min); } } @@ -5908,6 +5871,7 @@ int ha_mroonga::storage_index_read_last_map(uchar *buf, const uchar *key, int flags = GRN_CURSOR_DESCENDING, error; uint size_min = 0, size_max = 0; uchar *key_min = NULL, *key_max = NULL; + uchar key_min_entity[MRN_MAX_KEY_SIZE]; clear_cursor(); @@ -5916,7 +5880,7 @@ int ha_mroonga::storage_index_read_last_map(uchar *buf, const uchar *key, mrn_change_encoding(ctx, NULL); flags |= GRN_CURSOR_PREFIX; uint key_length = calculate_key_len(table, active_index, key, keypart_map); - key_min = keys_min[key_nr]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, key, key_length, key_min, &size_min, @@ -5928,9 +5892,9 @@ int ha_mroonga::storage_index_read_last_map(uchar *buf, const uchar *key, if (error) DBUG_RETURN(error); - storage_encode_key(field, key, keys_min[key_nr], &size_min); - key_min = keys_min[key_nr]; - key_max = keys_min[key_nr]; + key_min = key_min_entity; + key_max = key_min_entity; + storage_encode_key(field, key, key_min, &size_min); size_max = size_min; } @@ -6275,6 +6239,8 @@ int ha_mroonga::storage_read_range_first(const key_range *start_key, int flags = 0, error; uint size_min = 0, size_max = 0; uchar *key_min = NULL, *key_max = NULL; + uchar key_min_entity[MRN_MAX_KEY_SIZE]; + uchar key_max_entity[MRN_MAX_KEY_SIZE]; KEY key_info = table->s->key_info[active_index]; clear_cursor(); @@ -6286,21 +6252,21 @@ int ha_mroonga::storage_read_range_first(const key_range *start_key, start_key->length == end_key->length && memcmp(start_key->key, end_key->key, start_key->length) == 0) { flags |= GRN_CURSOR_PREFIX; - key_min = keys_min[active_index]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, start_key->key, start_key->length, key_min, &size_min, false); } else { if (start_key) { - key_min = keys_min[active_index]; + key_min = key_min_entity; storage_encode_multiple_column_key(&key_info, start_key->key, start_key->length, key_min, &size_min, false); } if (end_key) { - key_max = keys_max[active_index]; + key_max = key_max_entity; storage_encode_multiple_column_key(&key_info, end_key->key, end_key->length, key_max, &size_max, @@ -6316,13 +6282,13 @@ int ha_mroonga::storage_read_range_first(const key_range *start_key, if (error) DBUG_RETURN(error); if (start_key) { - storage_encode_key(field, start_key->key, keys_min[active_index], + key_min = key_min_entity; + storage_encode_key(field, start_key->key, key_min_entity, &size_min); - key_min = keys_min[active_index]; if (start_key->flag == HA_READ_KEY_EXACT) { // for _id if (strncmp(MRN_COLUMN_NAME_ID, column_name, column_name_size) == 0) { - grn_id found_record_id = *(grn_id *)keys_min[active_index]; + grn_id found_record_id = *((grn_id *)key_min); if (grn_table_at(ctx, grn_table, found_record_id) != GRN_ID_NIL) { // found storage_store_fields(table->record[0], found_record_id); table->status = 0; @@ -6339,9 +6305,8 @@ int ha_mroonga::storage_read_range_first(const key_range *start_key, } } if (end_key) { - storage_encode_key(field, end_key->key, keys_max[active_index], - &size_max); - key_max = keys_max[active_index]; + key_max = key_max_entity; + storage_encode_key(field, end_key->key, key_max, &size_max); } } @@ -7052,12 +7017,6 @@ void ha_mroonga::clear_indexes() grn_obj_unlink(ctx, grn_index_columns[i]); } } - if (keys_min) { - free(keys_min[i]); - } - if (keys_max) { - free(keys_max[i]); - } } if (grn_index_tables) { @@ -7080,16 +7039,6 @@ void ha_mroonga::clear_indexes() del_key_id = NULL; } - if (keys_min) { - free(keys_min); - keys_min = NULL; - } - - if (keys_max) { - free(keys_max); - keys_max = NULL; - } - DBUG_VOID_RETURN; } Modified: ha_mroonga.hpp (+0 -3) =================================================================== --- ha_mroonga.hpp 2012-04-22 12:54:40 +0900 (8412a24) +++ ha_mroonga.hpp 2012-04-22 13:04:20 +0900 (da0edd1) @@ -217,9 +217,6 @@ private: grn_obj *key_accessor; grn_obj *sorted_result; grn_obj *matched_record_keys; - /// for range search - uchar **keys_min; - uchar **keys_max; // for error report uint dup_key;