Skip to content

Commit

Permalink
MDEV-8453 Alter table not returning engine errors
Browse files Browse the repository at this point in the history
remove ~15 years old print_lock_error() function, use
handler::print_error() instead

Backport from 10.1
  • Loading branch information
vuvova committed Aug 1, 2017
1 parent 3d20674 commit 6034387
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 34 deletions.
6 changes: 6 additions & 0 deletions mysql-test/r/engine_error_in_alter-8453.result
@@ -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 changes: 11 additions & 0 deletions mysql-test/t/engine_error_in_alter-8453.test
@@ -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;
4 changes: 4 additions & 0 deletions sql/handler.cc
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down
37 changes: 3 additions & 34 deletions sql/lock.cc
Expand Up @@ -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[]=
Expand Down Expand Up @@ -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--;
Expand Down Expand Up @@ -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++;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 6034387

Please sign in to comment.