MDEV-8453 Alter table not returning engine errors
remove ~15 years old print_lock_error() function, use handler::print_error() instead Backport from 10.1
This commit is contained in:
parent
3d2067460e
commit
60343871a7
6
mysql-test/r/engine_error_in_alter-8453.result
Normal file
6
mysql-test/r/engine_error_in_alter-8453.result
Normal file
@ -0,0 +1,6 @@
|
||||
create table t1 (a int, b int);
|
||||
set debug_dbug='+d,external_lock_failure';
|
||||
alter table t1 add column c int;
|
||||
ERROR HY000: Got error 168 'KABOOM!' from MyISAM
|
||||
set debug_dbug='';
|
||||
drop table t1;
|
11
mysql-test/t/engine_error_in_alter-8453.test
Normal file
11
mysql-test/t/engine_error_in_alter-8453.test
Normal file
@ -0,0 +1,11 @@
|
||||
#
|
||||
# MDEV-8453 Alter table not returning engine errors
|
||||
#
|
||||
--source include/have_debug.inc
|
||||
|
||||
create table t1 (a int, b int);
|
||||
set debug_dbug='+d,external_lock_failure';
|
||||
--error ER_GET_ERRMSG
|
||||
alter table t1 add column c int;
|
||||
set debug_dbug='';
|
||||
drop table t1;
|
@ -3650,6 +3650,8 @@ void handler::print_error(int error, myf errflag)
|
||||
*/
|
||||
bool handler::get_error_message(int error, String* buf)
|
||||
{
|
||||
DBUG_EXECUTE_IF("external_lock_failure",
|
||||
buf->set_ascii(STRING_WITH_LEN("KABOOM!")););
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -5944,6 +5946,8 @@ int handler::ha_external_lock(THD *thd, int lock_type)
|
||||
MYSQL_TABLE_LOCK_WAIT(m_psi, PSI_TABLE_EXTERNAL_LOCK, lock_type,
|
||||
{ error= external_lock(thd, lock_type); })
|
||||
|
||||
DBUG_EXECUTE_IF("external_lock_failure", error= HA_ERR_GENERIC;);
|
||||
|
||||
if (error == 0 || lock_type == F_UNLCK)
|
||||
{
|
||||
m_lock_type= lock_type;
|
||||
|
37
sql/lock.cc
37
sql/lock.cc
@ -92,7 +92,6 @@ extern HASH open_cache;
|
||||
|
||||
static int lock_external(THD *thd, TABLE **table,uint count);
|
||||
static int unlock_external(THD *thd, TABLE **table,uint count);
|
||||
static void print_lock_error(int error, TABLE *);
|
||||
|
||||
/* Map the return value of thr_lock to an error from errmsg.txt */
|
||||
static int thr_lock_errno_to_mysql[]=
|
||||
@ -358,7 +357,7 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
|
||||
|
||||
if ((error=(*tables)->file->ha_external_lock(thd,lock_type)))
|
||||
{
|
||||
print_lock_error(error, *tables);
|
||||
(*tables)->file->print_error(error, MYF(0));
|
||||
while (--i)
|
||||
{
|
||||
tables--;
|
||||
@ -675,8 +674,8 @@ static int unlock_external(THD *thd, TABLE **table,uint count)
|
||||
(*table)->current_lock = F_UNLCK;
|
||||
if ((error=(*table)->file->ha_external_lock(thd, F_UNLCK)))
|
||||
{
|
||||
error_code=error;
|
||||
print_lock_error(error_code, *table);
|
||||
error_code= error;
|
||||
(*table)->file->print_error(error, MYF(0));
|
||||
}
|
||||
}
|
||||
table++;
|
||||
@ -898,36 +897,6 @@ bool lock_object_name(THD *thd, MDL_key::enum_mdl_namespace mdl_type,
|
||||
}
|
||||
|
||||
|
||||
static void print_lock_error(int error, TABLE *table)
|
||||
{
|
||||
int textno;
|
||||
DBUG_ENTER("print_lock_error");
|
||||
|
||||
switch (error) {
|
||||
case HA_ERR_LOCK_WAIT_TIMEOUT:
|
||||
textno=ER_LOCK_WAIT_TIMEOUT;
|
||||
break;
|
||||
case HA_ERR_READ_ONLY_TRANSACTION:
|
||||
textno=ER_READ_ONLY_TRANSACTION;
|
||||
break;
|
||||
case HA_ERR_LOCK_DEADLOCK:
|
||||
textno=ER_LOCK_DEADLOCK;
|
||||
break;
|
||||
case HA_ERR_WRONG_COMMAND:
|
||||
my_error(ER_ILLEGAL_HA, MYF(0), table->file->table_type(),
|
||||
table->s->db.str, table->s->table_name.str);
|
||||
DBUG_VOID_RETURN;
|
||||
default:
|
||||
textno=ER_CANT_LOCK;
|
||||
break;
|
||||
}
|
||||
|
||||
my_error(textno, MYF(0), error);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
Handling of global read locks
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user