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) ...@@ -3650,6 +3650,8 @@ void handler::print_error(int error, myf errflag)
*/ */
bool handler::get_error_message(int error, String* buf) bool handler::get_error_message(int error, String* buf)
{ {
DBUG_EXECUTE_IF("external_lock_failure",
buf->set_ascii(STRING_WITH_LEN("KABOOM!")););
return FALSE; return FALSE;
} }
...@@ -5944,6 +5946,8 @@ int handler::ha_external_lock(THD *thd, int lock_type) ...@@ -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, MYSQL_TABLE_LOCK_WAIT(m_psi, PSI_TABLE_EXTERNAL_LOCK, lock_type,
{ error= external_lock(thd, 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) if (error == 0 || lock_type == F_UNLCK)
{ {
m_lock_type= lock_type; m_lock_type= lock_type;
......
...@@ -92,7 +92,6 @@ extern HASH open_cache; ...@@ -92,7 +92,6 @@ extern HASH open_cache;
static int lock_external(THD *thd, TABLE **table,uint count); static int lock_external(THD *thd, TABLE **table,uint count);
static int unlock_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 */ /* Map the return value of thr_lock to an error from errmsg.txt */
static int thr_lock_errno_to_mysql[]= static int thr_lock_errno_to_mysql[]=
...@@ -358,7 +357,7 @@ static int lock_external(THD *thd, TABLE **tables, uint count) ...@@ -358,7 +357,7 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
if ((error=(*tables)->file->ha_external_lock(thd,lock_type))) if ((error=(*tables)->file->ha_external_lock(thd,lock_type)))
{ {
print_lock_error(error, *tables); (*tables)->file->print_error(error, MYF(0));
while (--i) while (--i)
{ {
tables--; tables--;
...@@ -675,8 +674,8 @@ static int unlock_external(THD *thd, TABLE **table,uint count) ...@@ -675,8 +674,8 @@ static int unlock_external(THD *thd, TABLE **table,uint count)
(*table)->current_lock = F_UNLCK; (*table)->current_lock = F_UNLCK;
if ((error=(*table)->file->ha_external_lock(thd, F_UNLCK))) if ((error=(*table)->file->ha_external_lock(thd, F_UNLCK)))
{ {
error_code=error; error_code= error;
print_lock_error(error_code, *table); (*table)->file->print_error(error, MYF(0));
} }
} }
table++; table++;
...@@ -898,36 +897,6 @@ bool lock_object_name(THD *thd, MDL_key::enum_mdl_namespace mdl_type, ...@@ -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 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