summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BitKeeper/etc/logging_ok1
-rw-r--r--mysql-test/r/alter_table.result8
-rw-r--r--mysql-test/t/alter_table.test17
-rw-r--r--sql/sql_table.cc18
4 files changed, 38 insertions, 6 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index 777c590ce62..11a8f3b8fcd 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -12,6 +12,7 @@ heikki@donna.mysql.fi
heikki@hundin.mysql.fi
jani@hynda.mysql.fi
jorge@linux.jorge.mysql.com
+konstantin@mysql.com
lenz@mysql.com
miguel@hegel.(none)
miguel@hegel.br
diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result
index dbdbb7f57a9..8b104225b9c 100644
--- a/mysql-test/r/alter_table.result
+++ b/mysql-test/r/alter_table.result
@@ -32,3 +32,11 @@ i
2
3
4
+name
+current
+name
+mysqltest
+name
+current
+name
+mysqltest
diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test
index dbfbd4267d8..cfb4f958372 100644
--- a/mysql-test/t/alter_table.test
+++ b/mysql-test/t/alter_table.test
@@ -82,3 +82,20 @@ alter table t1 drop i,add i int unsigned not null auto_increment, drop primary k
select * from t1;
drop table t1;
+#
+# Bug #2628: 'alter table t1 rename mysqltest.t1' silently drops mysqltest.t1
+# if it exists
+#
+create table t1 (name char(15));
+insert into t1 (name) values ("current");
+create database mysqltest;
+create table mysqltest.t1 (name char(15));
+insert into mysqltest.t1 (name) values ("mysqltest");
+select * from t1;
+select * from mysqltest.t1;
+--error 1050
+alter table t1 rename mysqltest.t1;
+select * from t1;
+select * from mysqltest.t1;
+drop table t1;
+drop database mysqltest;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index f273821c5e0..04dfd8a1fbd 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1151,7 +1151,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
thd->proc_info="init";
table_name=table_list->real_name;
db=table_list->db;
- if (!new_db)
+ if (!new_db || !strcmp(new_db, db))
new_db=db;
if (!(table=open_ltable(thd,table_list,TL_WRITE_ALLOW_READ)))
@@ -1161,14 +1161,20 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
if (new_name)
{
strmov(new_name_buff,new_name);
- fn_same(new_name_buff,table_name,3);
if (lower_case_table_names)
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_name=table_name; // No. Make later check easier
+ {
+ /*
+ Source and destination table names are equal: make later check
+ easier.
+ */
+ new_name= table_name;
+ }
else
{
if (table->tmp_table)