Commit 60343871 authored by Sergei Golubchik's avatar Sergei Golubchik

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
parent 3d206746
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;
#
# 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;
......
......@@ -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
......
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