Merge jamppa@bk-internal.mysql.com:/home/bk/mysql-5.0

into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0
parents 9f573f0a 01ce8a8a
...@@ -2382,7 +2382,8 @@ int read_line(char *buf, int size) ...@@ -2382,7 +2382,8 @@ int read_line(char *buf, int size)
if (feof(cur_file->file)) if (feof(cur_file->file))
{ {
found_eof: found_eof:
if (cur_file->file != stdin){ if (cur_file->file != stdin)
{
my_fclose(cur_file->file, MYF(0)); my_fclose(cur_file->file, MYF(0));
cur_file->file= 0; cur_file->file= 0;
} }
......
...@@ -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 Column set to default value; NULL supplied to NOT NULL column 'b' at row 2 Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'b' at row 2
...@@ -244,9 +246,13 @@ create table t1 select x'4132'; ...@@ -244,9 +246,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
...@@ -255,9 +261,13 @@ select * from t1; ...@@ -255,9 +261,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
...@@ -269,6 +279,7 @@ insert into t1 values (1,1); ...@@ -269,6 +279,7 @@ insert into t1 values (1,1);
create table if not exists t1 select 2; create table if not exists t1 select 2;
Warnings: Warnings:
Warning 1364 Field 'a' doesn't have a default value Warning 1364 Field 'a' doesn't have a default value
Note 1050 Table 't1' already exists
select * from t1; select * from t1;
a b a b
1 1 1 1
...@@ -276,6 +287,7 @@ a b ...@@ -276,6 +287,7 @@ a b
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: Warnings:
Warning 1364 Field 'a' doesn't have a default value Warning 1364 Field 'a' doesn't have a default value
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;
...@@ -609,6 +621,19 @@ create table test.t1 like x; ...@@ -609,6 +621,19 @@ 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 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;
use mysqltest; use mysqltest;
create view v1 as select 'foo' from dual; create view v1 as select 'foo' from dual;
create table t1 like v1; create table t1 like v1;
......
...@@ -1719,6 +1719,17 @@ select * from t1; ...@@ -1719,6 +1719,17 @@ select * from t1;
a a
42 42
drop table t1; drop table t1;
create table t1 (a int not null, b int not null, c blob not null, d int not null, e int, primary key (a,b,c(255),d)) engine=innodb;
insert into t1 values (2,2,"b",2,2),(1,1,"a",1,1),(3,3,"ab",3,3);
select * from t1 order by a,b,c,d;
a b c d e
1 1 a 1 1
2 2 b 2 2
3 3 ab 3 3
explain select * from t1 order by a,b,c,d;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
drop table t1;
create table t1 (x bigint unsigned not null primary key) engine=innodb; create table t1 (x bigint unsigned not null primary key) engine=innodb;
insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1); insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1);
select * from t1; select * from 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 ',';
......
...@@ -533,4 +533,16 @@ create view v1 as select 'foo' from dual; ...@@ -533,4 +533,16 @@ create view v1 as select 'foo' from dual;
create table t1 like v1; create table t1 like v1;
drop view v1; drop view v1;
drop database mysqltest; drop database mysqltest;
# 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
...@@ -1249,6 +1249,16 @@ insert into t1 values (42); ...@@ -1249,6 +1249,16 @@ insert into t1 values (42);
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug #13025 Server crash during filesort
#
create table t1 (a int not null, b int not null, c blob not null, d int not null, e int, primary key (a,b,c(255),d)) engine=innodb;
insert into t1 values (2,2,"b",2,2),(1,1,"a",1,1),(3,3,"ab",3,3);
select * from t1 order by a,b,c,d;
explain select * from t1 order by a,b,c,d;
drop table t1;
# End of 4.1 tests # End of 4.1 tests
# #
......
...@@ -466,7 +466,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, ...@@ -466,7 +466,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
my_store_ptr(ref_pos,ref_length,record); // Position to row my_store_ptr(ref_pos,ref_length,record); // Position to row
record+= sort_form->s->db_record_offset; record+= sort_form->s->db_record_offset;
} }
else else if (!error)
file->position(sort_form->record[0]); file->position(sort_form->record[0]);
} }
if (error && error != HA_ERR_RECORD_DELETED) if (error && error != HA_ERR_RECORD_DELETED)
......
...@@ -1017,8 +1017,8 @@ longlong Item_func_interval::val_int() ...@@ -1017,8 +1017,8 @@ longlong Item_func_interval::val_int()
1 got error 1 got error
*/ */
bool bool Item_func_between::fix_fields(THD *thd, struct st_table_list *tables,
Item_func_between::fix_fields(THD *thd, Item **ref) Item **ref)
{ {
if (Item_func_opt_neg::fix_fields(thd, ref)) if (Item_func_opt_neg::fix_fields(thd, ref))
return 1; return 1;
...@@ -1028,8 +1028,9 @@ Item_func_between::fix_fields(THD *thd, Item **ref) ...@@ -1028,8 +1028,9 @@ Item_func_between::fix_fields(THD *thd, Item **ref)
return 0; return 0;
/* not_null_tables_cache == union(T1(e), intersection(T1(e1),T1(e2))) */ /* not_null_tables_cache == union(T1(e), intersection(T1(e1),T1(e2))) */
not_null_tables_cache= args[0]->not_null_tables() | not_null_tables_cache= (args[0]->not_null_tables() |
(args[1]->not_null_tables() & args[2]->not_null_tables()); (args[1]->not_null_tables() &
args[2]->not_null_tables()));
return 0; return 0;
} }
...@@ -1330,8 +1331,8 @@ Item_func_if::fix_fields(THD *thd, Item **ref) ...@@ -1330,8 +1331,8 @@ Item_func_if::fix_fields(THD *thd, Item **ref)
if (Item_func::fix_fields(thd, ref)) if (Item_func::fix_fields(thd, ref))
return 1; return 1;
not_null_tables_cache= (args[1]->not_null_tables() not_null_tables_cache= (args[1]->not_null_tables() &
& args[2]->not_null_tables()); args[2]->not_null_tables());
return 0; return 0;
} }
......
...@@ -437,7 +437,11 @@ bool mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, ...@@ -437,7 +437,11 @@ bool 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
{ {
......
...@@ -13073,12 +13073,12 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list, ...@@ -13073,12 +13073,12 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
{ {
Name_resolution_context *context= &thd->lex->current_select->context; Name_resolution_context *context= &thd->lex->current_select->context;
Item **arg,**arg_end; Item **arg,**arg_end;
bool arg_changed= FALSE;
for (arg= expr->arguments(), for (arg= expr->arguments(),
arg_end= expr->arguments()+expr->arg_count; arg_end= expr->arguments()+expr->arg_count;
arg != arg_end; arg++) arg != arg_end; arg++)
{ {
Item *item= *arg; Item *item= *arg;
bool arg_changed= FALSE;
if (item->type() == Item::FIELD_ITEM || item->type() == Item::REF_ITEM) if (item->type() == Item::FIELD_ITEM || item->type() == Item::REF_ITEM)
{ {
ORDER *group_tmp; ORDER *group_tmp;
...@@ -13100,11 +13100,11 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list, ...@@ -13100,11 +13100,11 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
if (change_group_ref(thd, (Item_func *) item, group_list, &arg_changed)) if (change_group_ref(thd, (Item_func *) item, group_list, &arg_changed))
return 1; return 1;
} }
if (arg_changed) }
{ if (arg_changed)
expr->maybe_null= 1; {
*changed= TRUE; expr->maybe_null= 1;
} *changed= TRUE;
} }
} }
return 0; return 0;
......
...@@ -1562,6 +1562,9 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1562,6 +1562,9 @@ bool 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(FALSE); DBUG_RETURN(FALSE);
} }
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias);
...@@ -1575,12 +1578,8 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1575,12 +1578,8 @@ bool 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 my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
error= FALSE;
}
else
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name);
goto end; goto end;
} }
} }
...@@ -1603,12 +1602,8 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1603,12 +1602,8 @@ bool 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 my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
error= FALSE;
}
else
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name);
goto end; goto end;
} }
} }
...@@ -1641,6 +1636,14 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1641,6 +1636,14 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
mysql_bin_log.write(&qinfo); mysql_bin_log.write(&qinfo);
} }
error= FALSE; error= FALSE;
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));
......
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