summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/item_func.cc6
-rw-r--r--sql/sql_select.cc8
-rw-r--r--sql/sql_table.cc18
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)