null+****@clear*****
null+****@clear*****
2012年 5月 8日 (火) 04:38:20 JST
Kentoku 2012-05-08 04:38:20 +0900 (Tue, 08 May 2012)
New Revision: 6cbac6278758873fe6c55447f11e406b9e10c65b
Log:
fix for storage_mode alter_table_disable_enable_keys. refs #1310
Modified files:
ha_mroonga.cpp
mrn_table.cpp
Modified: ha_mroonga.cpp (+17 -15)
===================================================================
--- ha_mroonga.cpp 2012-05-07 19:17:40 +0900 (6ab7b7f)
+++ ha_mroonga.cpp 2012-05-08 04:38:20 +0900 (90c7261)
@@ -930,6 +930,7 @@ static int mrn_close_connection(handlerton *hton, THD *thd)
MRN_DBUG_ENTER_FUNCTION();
void *p = *thd_ha_data(thd, mrn_hton_ptr);
if (p) {
+ mrn_clear_alter_share(thd);
free(p);
*thd_ha_data(thd, mrn_hton_ptr) = (void *) NULL;
pthread_mutex_lock(&mrn_allocated_thds_mutex);
@@ -11186,8 +11187,8 @@ int ha_mroonga::storage_add_index(TABLE *table_arg, KEY *key_info,
if (!error && have_multiple_column_index)
{
error = storage_add_index_multiple_columns(key_info, num_of_keys,
- index_tables,
- index_columns, FALSE);
+ index_tables + n_keys,
+ index_columns + n_keys, FALSE);
}
bitmap_set_all(table->read_set);
if (error)
@@ -11219,7 +11220,6 @@ int ha_mroonga::storage_add_index_multiple_columns(KEY *key_info,
MRN_DBUG_ENTER_METHOD();
int error = 0;
- uint n_keys = table->s->keys;
if (!(error = storage_rnd_init(true)))
{
@@ -11236,7 +11236,7 @@ int ha_mroonga::storage_add_index_multiple_columns(KEY *key_info,
if (skip_unique_key && (key_info[i].flags & HA_NOSAME)) {
continue;
}
- if (!index_columns[i + n_keys]) {
+ if (!index_columns[i]) {
continue;
}
@@ -11251,23 +11251,25 @@ int ha_mroonga::storage_add_index_multiple_columns(KEY *key_info,
current_key_info->key_part[j].field->null_bit;
}
}
- grn_id key_id;
- if ((error = storage_write_row_unique_index(table->record[0],
- record_id,
- current_key_info,
- index_tables[i + n_keys],
- &key_id)))
- {
- if (error == HA_ERR_FOUND_DUPP_KEY)
+ if (key_info[i].flags & HA_NOSAME) {
+ grn_id key_id;
+ if ((error = storage_write_row_unique_index(table->record[0],
+ record_id,
+ current_key_info,
+ index_tables[i],
+ &key_id)))
{
- error = HA_ERR_FOUND_DUPP_UNIQUE;
+ if (error == HA_ERR_FOUND_DUPP_KEY)
+ {
+ error = HA_ERR_FOUND_DUPP_UNIQUE;
+ }
+ break;
}
- break;
}
if ((error = storage_write_row_multiple_column_index(table->record[0],
record_id,
current_key_info,
- index_columns[i + n_keys])))
+ index_columns[i])))
{
break;
}
Modified: mrn_table.cpp (+3 -0)
===================================================================
--- mrn_table.cpp 2012-05-07 19:17:40 +0900 (33302ac)
+++ mrn_table.cpp 2012-05-08 04:38:20 +0900 (0983363)
@@ -496,6 +496,9 @@ int mrn_add_index_param(MRN_SHARE *share, KEY *key_info, int i)
#if MYSQL_VERSION_ID >= 50500
if (key_info->comment.length == 0)
{
+ if (share->key_parser[i]) {
+ my_free(share->key_parser[i], MYF(0));
+ }
if (
!(share->key_parser[i] = mrn_create_string(
mrn_default_parser,