Commit 63080dc2 authored by unknown's avatar unknown

Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS

  produce warning for 'create database if not exists' if database exists
  do not update database options in this case  
  produce warning for 'create table if not exists' if table exists



mysql-test/r/create.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/r/temp_table.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/r/warnings.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/t/create.test:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    test case
sql/sql_db.cc:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    produce warning for 'create database if not exists' if database exists
    do not update database options in this case
sql/sql_table.cc:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    produce warning for 'create table if not exists' if table exists
parent e98e15db
...@@ -9,6 +9,8 @@ NULL ...@@ -9,6 +9,8 @@ NULL
drop table if exists t1; drop table if exists t1;
create table t1 (b char(0) not null); create table t1 (b char(0) not null);
create table if not exists t1 (b char(0) not null); create table if not exists t1 (b char(0) not null);
Warnings:
Note 1050 Table 't1' already exists
insert into t1 values (""),(null); insert into t1 values (""),(null);
Warnings: Warnings:
Warning 1263 Data truncated; NULL supplied to NOT NULL column 'b' at row 2 Warning 1263 Data truncated; NULL supplied to NOT NULL column 'b' at row 2
...@@ -232,9 +234,13 @@ create table t1 select x'4132'; ...@@ -232,9 +234,13 @@ create table t1 select x'4132';
drop table t1; drop table t1;
create table t1 select 1,2,3; create table t1 select 1,2,3;
create table if not exists t1 select 1,2; create table if not exists t1 select 1,2;
Warnings:
Note 1050 Table 't1' already exists
create table if not exists t1 select 1,2,3,4; create table if not exists t1 select 1,2,3,4;
ERROR 21S01: Column count doesn't match value count at row 1 ERROR 21S01: Column count doesn't match value count at row 1
create table if not exists t1 select 1; create table if not exists t1 select 1;
Warnings:
Note 1050 Table 't1' already exists
select * from t1; select * from t1;
1 2 3 1 2 3
1 2 3 1 2 3
...@@ -243,9 +249,13 @@ select * from t1; ...@@ -243,9 +249,13 @@ select * from t1;
drop table t1; drop table t1;
create table t1 select 1,2,3; create table t1 select 1,2,3;
create table if not exists t1 select 1,2; create table if not exists t1 select 1,2;
Warnings:
Note 1050 Table 't1' already exists
create table if not exists t1 select 1,2,3,4; create table if not exists t1 select 1,2,3,4;
ERROR 21S01: Column count doesn't match value count at row 1 ERROR 21S01: Column count doesn't match value count at row 1
create table if not exists t1 select 1; create table if not exists t1 select 1;
Warnings:
Note 1050 Table 't1' already exists
select * from t1; select * from t1;
1 2 3 1 2 3
1 2 3 1 2 3
...@@ -255,11 +265,15 @@ drop table t1; ...@@ -255,11 +265,15 @@ drop table t1;
create table t1 (a int not null, b int, primary key (a)); create table t1 (a int not null, b int, primary key (a));
insert into t1 values (1,1); insert into t1 values (1,1);
create table if not exists t1 select 2; create table if not exists t1 select 2;
Warnings:
Note 1050 Table 't1' already exists
select * from t1; select * from t1;
a b a b
1 1 1 1
0 2 0 2
create table if not exists t1 select 3 as 'a',4 as 'b'; create table if not exists t1 select 3 as 'a',4 as 'b';
Warnings:
Note 1050 Table 't1' already exists
create table if not exists t1 select 3 as 'a',3 as 'b'; create table if not exists t1 select 3 as 'a',3 as 'b';
ERROR 23000: Duplicate entry '3' for key 1 ERROR 23000: Duplicate entry '3' for key 1
select * from t1; select * from t1;
...@@ -593,3 +607,17 @@ drop database mysqltest; ...@@ -593,3 +607,17 @@ drop database mysqltest;
create table test.t1 like x; create table test.t1 like x;
ERROR 42000: Incorrect database name 'NULL' ERROR 42000: Incorrect database name 'NULL'
drop table if exists test.t1; drop table if exists test.t1;
create database mysqltest;
create database if not exists mysqltest character set latin2;
Warnings:
Note 1007 Can't create database 'mysqltest'; database exists
show create database mysqltest;
Database Create Database
mysqltest CREATE DATABASE `mysqltest` /*!40100 DEFAULT CHARACTER SET latin1 */
drop database mysqltest;
use test;
create table t1 (a int);
create table if not exists t1 (a int);
Warnings:
Note 1050 Table 't1' already exists
drop table t1;
...@@ -23,6 +23,8 @@ a b ...@@ -23,6 +23,8 @@ a b
6 g 6 g
create TEMPORARY TABLE t2 engine=heap select * from t1; create TEMPORARY TABLE t2 engine=heap select * from t1;
create TEMPORARY TABLE IF NOT EXISTS t2 (a int) engine=heap; create TEMPORARY TABLE IF NOT EXISTS t2 (a int) engine=heap;
Warnings:
Note 1050 Table 't2' already exists
CREATE TEMPORARY TABLE t1 (a int not null, b char (10) not null); CREATE TEMPORARY TABLE t1 (a int not null, b char (10) not null);
ERROR 42S01: Table 't1' already exists ERROR 42S01: Table 't1' already exists
ALTER TABLE t1 RENAME t2; ALTER TABLE t1 RENAME t2;
......
...@@ -63,9 +63,11 @@ show count(*) warnings; ...@@ -63,9 +63,11 @@ show count(*) warnings;
1 1
create table t1(id int); create table t1(id int);
create table if not exists t1(id int); create table if not exists t1(id int);
Warnings:
Note 1050 Table 't1' already exists
select @@warning_count; select @@warning_count;
@@warning_count @@warning_count
0 1
drop table t1; drop table t1;
create table t1(a tinyint, b int not null, c date, d char(5)); create table t1(a tinyint, b int not null, c date, d char(5));
load data infile '../../std_data/warnings_loaddata.dat' into table t1 fields terminated by ','; load data infile '../../std_data/warnings_loaddata.dat' into table t1 fields terminated by ',';
......
...@@ -513,4 +513,17 @@ create table test.t1 like x; ...@@ -513,4 +513,17 @@ create table test.t1 like x;
drop table if exists test.t1; drop table if exists test.t1;
--enable_warnings --enable_warnings
#
# Bug #6008 MySQL does not create warnings when
# creating database and using IF NOT EXISTS
#
create database mysqltest;
create database if not exists mysqltest character set latin2;
show create database mysqltest;
drop database mysqltest;
use test;
create table t1 (a int);
create table if not exists t1 (a int);
drop table t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -427,7 +427,11 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, ...@@ -427,7 +427,11 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info,
error= -1; error= -1;
goto exit; goto exit;
} }
result= 0; push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_DB_CREATE_EXISTS, ER(ER_DB_CREATE_EXISTS), db);
error= 0;
send_ok(thd);
goto exit;
} }
else else
{ {
......
...@@ -1360,6 +1360,9 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1360,6 +1360,9 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)
{ {
create_info->table_existed= 1; // Mark that table existed create_info->table_existed= 1; // Mark that table existed
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR),
alias);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias);
...@@ -1373,11 +1376,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1373,11 +1376,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
if (!access(path,F_OK)) if (!access(path,F_OK))
{ {
if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)
{ goto warn;
create_info->table_existed= 1; // Mark that table existed
error= 0;
}
else
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
goto end; goto end;
} }
...@@ -1401,11 +1400,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1401,11 +1400,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_PRINT("info", ("Table with same name already existed in handler")); DBUG_PRINT("info", ("Table with same name already existed in handler"));
if (create_if_not_exists) if (create_if_not_exists)
{ goto warn;
create_info->table_existed= 1; // Mark that table existed
error= 0;
}
else
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
goto end; goto end;
} }
...@@ -1447,6 +1442,15 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1447,6 +1442,15 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
} }
} }
error=0; error=0;
goto end;
warn:
error= 0;
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR),
alias);
create_info->table_existed= 1; // Mark that table existed
end: end:
VOID(pthread_mutex_unlock(&LOCK_open)); VOID(pthread_mutex_unlock(&LOCK_open));
start_waiting_global_read_lock(thd); start_waiting_global_read_lock(thd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment