diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item_func.cc | 6 | ||||
-rw-r--r-- | sql/sql_select.cc | 8 | ||||
-rw-r--r-- | sql/sql_table.cc | 18 |
3 files changed, 23 insertions, 9 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 64b1c5d4d8a..656dff63609 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -551,7 +551,8 @@ double Item_func_pow::val() double Item_func_acos::val() { - double value=args[0]->val(); + // the volatile's for BUG #2338 to calm optimizer down (because of gcc's bug) + volatile double value=args[0]->val(); if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0)))) return 0.0; return fix_result(acos(value)); @@ -559,7 +560,8 @@ double Item_func_acos::val() double Item_func_asin::val() { - double value=args[0]->val(); + // the volatile's for BUG #2338 to calm optimizer down (because of gcc's bug) + volatile double value=args[0]->val(); if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0)))) return 0.0; return fix_result(asin(value)); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3e824ddc9f5..ae493c0cb16 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2596,9 +2596,15 @@ store_val_in_field(Field *field,Item *item) bool error; THD *thd=current_thd; ha_rows cuted_fields=thd->cuted_fields; + /* + we should restore old value of count_cuted_fields because + store_val_in_field can be called from mysql_insert + with select_insert, which make count_cuted_fields= 1 + */ + bool old_count_cuted_fields= thd->count_cuted_fields; thd->count_cuted_fields=1; error= item->save_in_field(field, 1); - thd->count_cuted_fields=0; + thd->count_cuted_fields= old_count_cuted_fields; return error || cuted_fields != thd->cuted_fields; } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 774801c094a..16263429e33 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1478,7 +1478,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, alias= (lower_case_table_names == 2) ? table_list->alias : table_name; db=table_list->db; - if (!new_db || !strcmp(new_db,db)) + if (!new_db || !strcmp(new_db, db)) new_db=db; used_fields=create_info->used_fields; @@ -1491,7 +1491,6 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, { strmov(new_name_buff,new_name); strmov(new_alias= new_alias_buff, new_name); - fn_same(new_name_buff,table_name,3); if (lower_case_table_names) { if (lower_case_table_names != 2) @@ -1501,11 +1500,18 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } casedn_str(new_name); } - if ((lower_case_table_names && - !my_strcasecmp(new_name_buff,table_name)) || - (!lower_case_table_names && + if (new_db == db && + (lower_case_table_names && + !my_strcasecmp(new_name_buff,table_name) || + !lower_case_table_names && !strcmp(new_name_buff,table_name))) - new_alias= new_name= table_name; // No change. Make later check easier + { + /* + Source and destination table names are equal: make later check + easier. + */ + new_alias= new_name= table_name; + } else { if (table->tmp_table) |