1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

BUG#18676 when cluster storage engine is down, misleading error message on create table with 4009.

mysql-test/r/ndb_autodiscover.result:
  changes ndbd error code to mysqld error code when no cluster connection
sql/ha_ndbcluster.cc:
  map 4009 error code to mysql not connected error
sql/handler.cc:
  define return codes to ha_table_exists_in_engine to something useful
    NOTE: in 5.1 this should call a handlerton method, not horrible ifdef ndb stuff
sql/sql_table.cc:
  clearly define what happens on create table if exits/not exists/not connected to engine
This commit is contained in:
unknown
2007-04-03 18:44:29 +08:00
parent 1f7b3e569d
commit 5203ea6ccb
4 changed files with 29 additions and 17 deletions

View File

@ -1696,6 +1696,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
alias);
DBUG_RETURN(FALSE);
}
DBUG_PRINT("info",("1"));
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias);
DBUG_RETURN(TRUE);
}
@ -1706,6 +1707,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
{
if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)
goto warn;
DBUG_PRINT("info",("2"));
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
goto end;
}
@ -1724,14 +1726,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
{
bool create_if_not_exists =
create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS;
if (ha_table_exists_in_engine(thd, db, table_name))
int retcode = ha_table_exists_in_engine(thd, db, table_name);
DBUG_PRINT("info", ("exists_in_engine: %u",retcode));
switch (retcode)
{
DBUG_PRINT("info", ("Table with same name already existed in handler"));
case HA_ERR_NO_SUCH_TABLE:
/* Normal case, no table exists. we can go and create it */
break;
case HA_ERR_TABLE_EXIST:
DBUG_PRINT("info", ("Table existed in handler"));
if (create_if_not_exists)
goto warn;
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
goto end;
if (create_if_not_exists)
goto warn;
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
goto end;
break;
default:
DBUG_PRINT("info", ("error: %u from storage engine", retcode));
my_error(retcode, MYF(0),table_name);
goto end;
}
}