mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix error message generated when trying to create a table in a
non-existent database. (Bug #10407)
This commit is contained in:
@ -37,7 +37,7 @@ Note 1051 Unknown table 't1'
|
|||||||
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) engine=heap;
|
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) engine=heap;
|
||||||
ERROR 42000: Incorrect table definition; there can be only one auto column and it must be defined as a key
|
ERROR 42000: Incorrect table definition; there can be only one auto column and it must be defined as a key
|
||||||
create table not_existing_database.test (a int);
|
create table not_existing_database.test (a int);
|
||||||
Got one of the listed errors
|
ERROR 42000: Unknown database 'not_existing_database'
|
||||||
create table `a/a` (a int);
|
create table `a/a` (a int);
|
||||||
ERROR 42000: Incorrect table name 'a/a'
|
ERROR 42000: Incorrect table name 'a/a'
|
||||||
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa int);
|
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa int);
|
||||||
@ -342,7 +342,7 @@ create table t3 like t1;
|
|||||||
create table t3 like mysqltest.t3;
|
create table t3 like mysqltest.t3;
|
||||||
ERROR 42S01: Table 't3' already exists
|
ERROR 42S01: Table 't3' already exists
|
||||||
create table non_existing_database.t1 like t1;
|
create table non_existing_database.t1 like t1;
|
||||||
Got one of the listed errors
|
ERROR 42000: Unknown database 'non_existing_database'
|
||||||
create table t3 like non_existing_table;
|
create table t3 like non_existing_table;
|
||||||
ERROR 42S02: Unknown table 'non_existing_table'
|
ERROR 42S02: Unknown table 'non_existing_table'
|
||||||
create temporary table t3 like t1;
|
create temporary table t3 like t1;
|
||||||
|
@ -39,7 +39,7 @@ drop table if exists t1;
|
|||||||
--error 1075
|
--error 1075
|
||||||
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) engine=heap;
|
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) engine=heap;
|
||||||
|
|
||||||
-- error 1044,1
|
-- error 1049
|
||||||
create table not_existing_database.test (a int);
|
create table not_existing_database.test (a int);
|
||||||
--error 1103
|
--error 1103
|
||||||
create table `a/a` (a int);
|
create table `a/a` (a int);
|
||||||
@ -294,7 +294,7 @@ select * from t2;
|
|||||||
create table t3 like t1;
|
create table t3 like t1;
|
||||||
--error 1050
|
--error 1050
|
||||||
create table t3 like mysqltest.t3;
|
create table t3 like mysqltest.t3;
|
||||||
--error 1044,1
|
--error 1049
|
||||||
create table non_existing_database.t1 like t1;
|
create table non_existing_database.t1 like t1;
|
||||||
--error 1051
|
--error 1051
|
||||||
create table t3 like non_existing_table;
|
create table t3 like non_existing_table;
|
||||||
|
@ -1029,10 +1029,13 @@ void unlock_table_names(THD *thd, TABLE_LIST *table_list,
|
|||||||
void unireg_init(ulong options);
|
void unireg_init(ulong options);
|
||||||
void unireg_end(void);
|
void unireg_end(void);
|
||||||
bool mysql_create_frm(THD *thd, my_string file_name,
|
bool mysql_create_frm(THD *thd, my_string file_name,
|
||||||
|
const char *table, const char* db,
|
||||||
HA_CREATE_INFO *create_info,
|
HA_CREATE_INFO *create_info,
|
||||||
List<create_field> &create_field,
|
List<create_field> &create_field,
|
||||||
uint key_count,KEY *key_info,handler *db_type);
|
uint key_count,KEY *key_info,handler *db_type);
|
||||||
int rea_create_table(THD *thd, my_string file_name,HA_CREATE_INFO *create_info,
|
int rea_create_table(THD *thd, my_string file_name,
|
||||||
|
const char *table, const char* db,
|
||||||
|
HA_CREATE_INFO *create_info,
|
||||||
List<create_field> &create_field,
|
List<create_field> &create_field,
|
||||||
uint key_count,KEY *key_info);
|
uint key_count,KEY *key_info);
|
||||||
int format_number(uint inputflag,uint max_length,my_string pos,uint length,
|
int format_number(uint inputflag,uint max_length,my_string pos,uint length,
|
||||||
@ -1104,7 +1107,8 @@ ulong make_new_entry(File file,uchar *fileinfo,TYPELIB *formnames,
|
|||||||
const char *newname);
|
const char *newname);
|
||||||
ulong next_io_size(ulong pos);
|
ulong next_io_size(ulong pos);
|
||||||
void append_unescaped(String *res, const char *pos, uint length);
|
void append_unescaped(String *res, const char *pos, uint length);
|
||||||
int create_frm(char *name,uint reclength,uchar *fileinfo,
|
int create_frm(char *name, const char *table, const char *db,
|
||||||
|
uint reclength,uchar *fileinfo,
|
||||||
HA_CREATE_INFO *create_info, uint keys);
|
HA_CREATE_INFO *create_info, uint keys);
|
||||||
void update_create_info_from_table(HA_CREATE_INFO *info, TABLE *form);
|
void update_create_info_from_table(HA_CREATE_INFO *info, TABLE *form);
|
||||||
int rename_file_ext(const char * from,const char * to,const char * ext);
|
int rename_file_ext(const char * from,const char * to,const char * ext);
|
||||||
|
@ -1418,12 +1418,10 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
|
|||||||
create_info->data_file_name= create_info->index_file_name= 0;
|
create_info->data_file_name= create_info->index_file_name= 0;
|
||||||
create_info->table_options=db_options;
|
create_info->table_options=db_options;
|
||||||
|
|
||||||
if (rea_create_table(thd, path, create_info, fields, key_count,
|
if (rea_create_table(thd, path, table_name, db,
|
||||||
|
create_info, fields, key_count,
|
||||||
key_info_buffer))
|
key_info_buffer))
|
||||||
{
|
|
||||||
/* my_error(ER_CANT_CREATE_TABLE,MYF(0),table_name,my_errno); */
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
|
||||||
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
|
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
|
||||||
{
|
{
|
||||||
/* Open table and put in temporary table list */
|
/* Open table and put in temporary table list */
|
||||||
@ -2366,8 +2364,14 @@ int mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
|||||||
/*
|
/*
|
||||||
Create a new table by copying from source table
|
Create a new table by copying from source table
|
||||||
*/
|
*/
|
||||||
if (my_copy(src_path, dst_path, MYF(MY_WME|MY_DONT_OVERWRITE_FILE)))
|
if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
|
||||||
|
{
|
||||||
|
if (my_errno == ENOENT)
|
||||||
|
my_error(ER_BAD_DB_ERROR,MYF(0),db);
|
||||||
|
else
|
||||||
|
my_error(ER_CANT_CREATE_FILE,MYF(0),dst_path,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
As mysql_truncate don't work on a new table at this stage of
|
As mysql_truncate don't work on a new table at this stage of
|
||||||
|
12
sql/table.cc
12
sql/table.cc
@ -1238,7 +1238,8 @@ void append_unescaped(String *res, const char *pos, uint length)
|
|||||||
|
|
||||||
/* Create a .frm file */
|
/* Create a .frm file */
|
||||||
|
|
||||||
File create_frm(register my_string name, uint reclength, uchar *fileinfo,
|
File create_frm(register my_string name, const char *table, const char *db,
|
||||||
|
uint reclength, uchar *fileinfo,
|
||||||
HA_CREATE_INFO *create_info, uint keys)
|
HA_CREATE_INFO *create_info, uint keys)
|
||||||
{
|
{
|
||||||
register File file;
|
register File file;
|
||||||
@ -1263,7 +1264,7 @@ File create_frm(register my_string name, uint reclength, uchar *fileinfo,
|
|||||||
*/
|
*/
|
||||||
set_if_smaller(create_info->raid_chunks, 255);
|
set_if_smaller(create_info->raid_chunks, 255);
|
||||||
|
|
||||||
if ((file= my_create(name, CREATE_MODE, create_flags, MYF(MY_WME))) >= 0)
|
if ((file= my_create(name, CREATE_MODE, create_flags, MYF(0))) >= 0)
|
||||||
{
|
{
|
||||||
bzero((char*) fileinfo,64);
|
bzero((char*) fileinfo,64);
|
||||||
fileinfo[0]=(uchar) 254; fileinfo[1]= 1; fileinfo[2]= FRM_VER+3; // Header
|
fileinfo[0]=(uchar) 254; fileinfo[1]= 1; fileinfo[2]= FRM_VER+3; // Header
|
||||||
@ -1300,6 +1301,13 @@ File create_frm(register my_string name, uint reclength, uchar *fileinfo,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (my_errno == ENOENT)
|
||||||
|
my_error(ER_BAD_DB_ERROR,MYF(0),db);
|
||||||
|
else
|
||||||
|
my_error(ER_CANT_CREATE_TABLE,MYF(0),table,my_errno);
|
||||||
|
}
|
||||||
return (file);
|
return (file);
|
||||||
} /* create_frm */
|
} /* create_frm */
|
||||||
|
|
||||||
|
@ -56,6 +56,8 @@ static bool make_empty_rec(int file, enum db_type table_type,
|
|||||||
mysql_create_frm()
|
mysql_create_frm()
|
||||||
thd Thread handler
|
thd Thread handler
|
||||||
file_name Name of file (including database and .frm)
|
file_name Name of file (including database and .frm)
|
||||||
|
table Name of table
|
||||||
|
db Name of database
|
||||||
create_info create info parameters
|
create_info create info parameters
|
||||||
create_fields Fields to create
|
create_fields Fields to create
|
||||||
keys number of keys to create
|
keys number of keys to create
|
||||||
@ -68,6 +70,7 @@ static bool make_empty_rec(int file, enum db_type table_type,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
bool mysql_create_frm(THD *thd, my_string file_name,
|
bool mysql_create_frm(THD *thd, my_string file_name,
|
||||||
|
const char *table, const char *db,
|
||||||
HA_CREATE_INFO *create_info,
|
HA_CREATE_INFO *create_info,
|
||||||
List<create_field> &create_fields,
|
List<create_field> &create_fields,
|
||||||
uint keys, KEY *key_info,
|
uint keys, KEY *key_info,
|
||||||
@ -114,7 +117,7 @@ bool mysql_create_frm(THD *thd, my_string file_name,
|
|||||||
reclength=uint2korr(forminfo+266);
|
reclength=uint2korr(forminfo+266);
|
||||||
null_fields=uint2korr(forminfo+282);
|
null_fields=uint2korr(forminfo+282);
|
||||||
|
|
||||||
if ((file=create_frm(file_name, reclength, fileinfo,
|
if ((file=create_frm(file_name, table, db, reclength, fileinfo,
|
||||||
create_info, keys)) < 0)
|
create_info, keys)) < 0)
|
||||||
{
|
{
|
||||||
my_free((gptr) screen_buff,MYF(0));
|
my_free((gptr) screen_buff,MYF(0));
|
||||||
@ -213,9 +216,11 @@ err3:
|
|||||||
Create a frm (table definition) file and the tables
|
Create a frm (table definition) file and the tables
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
mysql_create_frm()
|
rea_create_table()
|
||||||
thd Thread handler
|
thd Thread handler
|
||||||
file_name Name of file (including database and .frm)
|
file_name Name of file (including database and .frm)
|
||||||
|
table Name of table
|
||||||
|
db Name of database
|
||||||
create_info create info parameters
|
create_info create info parameters
|
||||||
create_fields Fields to create
|
create_fields Fields to create
|
||||||
keys number of keys to create
|
keys number of keys to create
|
||||||
@ -228,13 +233,14 @@ err3:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int rea_create_table(THD *thd, my_string file_name,
|
int rea_create_table(THD *thd, my_string file_name,
|
||||||
|
const char *table, const char *db,
|
||||||
HA_CREATE_INFO *create_info,
|
HA_CREATE_INFO *create_info,
|
||||||
List<create_field> &create_fields,
|
List<create_field> &create_fields,
|
||||||
uint keys, KEY *key_info)
|
uint keys, KEY *key_info)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("rea_create_table");
|
DBUG_ENTER("rea_create_table");
|
||||||
|
|
||||||
if (mysql_create_frm(thd, file_name, create_info,
|
if (mysql_create_frm(thd, file_name, table, db, create_info,
|
||||||
create_fields, keys, key_info, NULL))
|
create_fields, keys, key_info, NULL))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
if (ha_create_table(file_name,create_info,0))
|
if (ha_create_table(file_name,create_info,0))
|
||||||
|
Reference in New Issue
Block a user