mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Merge 10.1 into 10.2
For running the Galera tests, the variable my_disable_leak_check
was set to true in order to avoid assertions due to memory leaks
at shutdown.
Some adjustments due to MDEV-13625 (merge InnoDB tests from MySQL 5.6)
were performed. The most notable behaviour changes from 10.0 and 10.1
are the following:
* innodb.innodb-table-online: adjustments for the DROP COLUMN
behaviour change (MDEV-11114, MDEV-13613)
* innodb.innodb-index-online-fk: the removal of a (1,NULL) record
from the result; originally removed in MySQL 5.7 in the
Oracle Bug #16244691 fix
377774689b
* innodb.create-index-debug: disabled due to MDEV-13680
(the MySQL Bug #77497 fix was not merged from 5.6 to 5.7.10)
* innodb.innodb-alter-autoinc: MariaDB 10.2 behaves like MySQL 5.6/5.7,
while MariaDB 10.0 and 10.1 assign different values when
auto_increment_increment or auto_increment_offset are used.
Also MySQL 5.6/5.7 exhibit different behaviour between
LGORITHM=INPLACE and ALGORITHM=COPY, so something needs to be tested
and fixed in both MariaDB 10.0 and 10.2.
* innodb.innodb-wl5980-alter: disabled because it would trigger an
InnoDB assertion failure (MDEV-13668 may need additional effort in 10.2)
This commit is contained in:
@ -3385,6 +3385,7 @@ mysql_execute_command(THD *thd)
|
||||
#endif
|
||||
case SQLCOM_SHOW_STATUS:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
execute_show_status(thd, all_tables);
|
||||
break;
|
||||
}
|
||||
@ -3423,21 +3424,21 @@ mysql_execute_command(THD *thd)
|
||||
case SQLCOM_SHOW_TABLE_STATUS:
|
||||
case SQLCOM_SHOW_OPEN_TABLES:
|
||||
case SQLCOM_SHOW_GENERIC:
|
||||
case SQLCOM_SHOW_PLUGINS:
|
||||
case SQLCOM_SHOW_FIELDS:
|
||||
case SQLCOM_SHOW_KEYS:
|
||||
case SQLCOM_SELECT:
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
/* fall through */
|
||||
case SQLCOM_SHOW_PLUGINS:
|
||||
case SQLCOM_SHOW_VARIABLES:
|
||||
case SQLCOM_SHOW_CHARSETS:
|
||||
case SQLCOM_SHOW_COLLATIONS:
|
||||
case SQLCOM_SHOW_STORAGE_ENGINES:
|
||||
case SQLCOM_SHOW_PROFILE:
|
||||
{
|
||||
case SQLCOM_SELECT:
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
DBUG_ASSERT(thd->wsrep_exec_mode != REPL_RECV);
|
||||
if (lex->sql_command == SQLCOM_SELECT)
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_READ)
|
||||
else
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW)
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
thd->status_var.last_query_cost= 0.0;
|
||||
@ -3566,6 +3567,7 @@ mysql_execute_command(THD *thd)
|
||||
case SQLCOM_SHOW_RELAYLOG_EVENTS: /* fall through */
|
||||
case SQLCOM_SHOW_BINLOG_EVENTS:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
if (check_global_access(thd, REPL_SLAVE_ACL))
|
||||
goto error;
|
||||
res = mysql_show_binlog_events(thd);
|
||||
@ -4144,6 +4146,7 @@ end_with_restore_list:
|
||||
{
|
||||
if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
|
||||
goto error;
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
res = show_binlogs(thd);
|
||||
break;
|
||||
}
|
||||
@ -4151,15 +4154,13 @@ end_with_restore_list:
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
case SQLCOM_SHOW_CREATE:
|
||||
{
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
#ifdef DONT_ALLOW_SHOW_COMMANDS
|
||||
my_message(ER_NOT_ALLOWED_COMMAND, ER_THD(thd, ER_NOT_ALLOWED_COMMAND),
|
||||
MYF(0)); /* purecov: inspected */
|
||||
goto error;
|
||||
#else
|
||||
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
|
||||
/*
|
||||
Access check:
|
||||
@ -4223,8 +4224,7 @@ end_with_restore_list:
|
||||
case SQLCOM_CHECKSUM:
|
||||
{
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd))
|
||||
goto error;
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_READ);
|
||||
|
||||
if (check_table_access(thd, SELECT_ACL, all_tables,
|
||||
FALSE, UINT_MAX, FALSE))
|
||||
@ -4235,6 +4235,7 @@ end_with_restore_list:
|
||||
}
|
||||
case SQLCOM_UPDATE:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE);
|
||||
ha_rows found= 0, updated= 0;
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
@ -4277,9 +4278,7 @@ end_with_restore_list:
|
||||
/* if we switched from normal update, rights are checked */
|
||||
if (up_result != 2)
|
||||
{
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE))
|
||||
goto error;
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE);
|
||||
if ((res= multi_update_precheck(thd, all_tables)))
|
||||
break;
|
||||
}
|
||||
@ -4349,10 +4348,6 @@ end_with_restore_list:
|
||||
break;
|
||||
}
|
||||
case SQLCOM_REPLACE:
|
||||
{
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE))
|
||||
goto error;
|
||||
#ifndef DBUG_OFF
|
||||
if (mysql_bin_log.is_open())
|
||||
{
|
||||
@ -4387,10 +4382,10 @@ end_with_restore_list:
|
||||
DBUG_PRINT("debug", ("Just after generate_incident()"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* fall through */
|
||||
case SQLCOM_INSERT:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE);
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
@ -4449,6 +4444,7 @@ end_with_restore_list:
|
||||
case SQLCOM_REPLACE_SELECT:
|
||||
case SQLCOM_INSERT_SELECT:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE);
|
||||
select_result *sel_result;
|
||||
bool explain= MY_TEST(lex->describe);
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
@ -4572,6 +4568,7 @@ end_with_restore_list:
|
||||
}
|
||||
case SQLCOM_DELETE:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE);
|
||||
select_result *sel_result=lex->result;
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
if (WSREP_CLIENT(thd) &&
|
||||
@ -4632,6 +4629,7 @@ end_with_restore_list:
|
||||
}
|
||||
case SQLCOM_DELETE_MULTI:
|
||||
{
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE);
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
TABLE_LIST *aux_tables= thd->lex->auxiliary_table_list.first;
|
||||
multi_delete *result;
|
||||
@ -4712,19 +4710,6 @@ end_with_restore_list:
|
||||
/* So that DROP TEMPORARY TABLE gets to binlog at commit/rollback */
|
||||
thd->variables.option_bits|= OPTION_KEEP_LOG;
|
||||
}
|
||||
if (WSREP(thd))
|
||||
{
|
||||
for (TABLE_LIST *table= all_tables; table; table= table->next_global)
|
||||
{
|
||||
if (!lex->tmp_table() &&
|
||||
(!thd->is_current_stmt_binlog_format_row() ||
|
||||
!thd->find_temporary_table(table)))
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN(NULL, NULL, all_tables);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
If we are a slave, we should add IF EXISTS if the query executed
|
||||
on the master without an error. This will help a slave to
|
||||
@ -4734,6 +4719,20 @@ end_with_restore_list:
|
||||
if (thd->slave_thread && !thd->slave_expected_error &&
|
||||
slave_ddl_exec_mode_options == SLAVE_EXEC_MODE_IDEMPOTENT)
|
||||
lex->create_info.set(DDL_options_st::OPT_IF_EXISTS);
|
||||
|
||||
if (WSREP(thd))
|
||||
{
|
||||
for (TABLE_LIST *table= all_tables; table; table= table->next_global)
|
||||
{
|
||||
if (!lex->tmp_table() &&
|
||||
(!thd->is_current_stmt_binlog_format_row() ||
|
||||
!thd->find_temporary_table(table)))
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN(NULL, NULL, all_tables);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* DDL and binlog write order are protected by metadata locks. */
|
||||
res= mysql_rm_table(thd, first_table, lex->if_exists(), lex->tmp_table());
|
||||
@ -5047,9 +5046,7 @@ end_with_restore_list:
|
||||
db_name.length= lex->name.length;
|
||||
strmov(db_name.str, lex->name.str);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
|
||||
if (check_db_name(&db_name))
|
||||
{
|
||||
@ -5104,9 +5101,7 @@ end_with_restore_list:
|
||||
/* lex->unit.cleanup() is called outside, no need to call it here */
|
||||
break;
|
||||
case SQLCOM_SHOW_CREATE_EVENT:
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
res= Events::show_create_event(thd, lex->spname->m_db,
|
||||
lex->spname->m_name);
|
||||
break;
|
||||
@ -5490,6 +5485,7 @@ end_with_restore_list:
|
||||
if (!grant_user)
|
||||
goto error;
|
||||
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
res = mysql_show_grants(thd, grant_user);
|
||||
break;
|
||||
}
|
||||
@ -5969,18 +5965,14 @@ end_with_restore_list:
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_PROC:
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
if (sp_show_create_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname))
|
||||
goto error;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_FUNC:
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
if (sp_show_create_routine(thd, TYPE_ENUM_FUNCTION, lex->spname))
|
||||
goto error;
|
||||
break;
|
||||
@ -5993,9 +5985,7 @@ end_with_restore_list:
|
||||
stored_procedure_type type= (lex->sql_command == SQLCOM_SHOW_PROC_CODE ?
|
||||
TYPE_ENUM_PROCEDURE : TYPE_ENUM_FUNCTION);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
if (sp_cache_routine(thd, type, lex->spname, FALSE, &sp))
|
||||
goto error;
|
||||
if (!sp || sp->show_routine_code(thd))
|
||||
@ -6017,9 +6007,7 @@ end_with_restore_list:
|
||||
if (check_ident_length(&lex->spname->m_name))
|
||||
goto error;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error;
|
||||
#endif /* WITH_WSREP */
|
||||
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
|
||||
if (show_create_trigger(thd, lex->spname))
|
||||
goto error; /* Error has been already logged. */
|
||||
|
||||
@ -6477,6 +6465,7 @@ static bool execute_show_status(THD *thd, TABLE_LIST *all_tables)
|
||||
if (!(res= check_table_access(thd, SELECT_ACL, all_tables, FALSE,
|
||||
UINT_MAX, FALSE)))
|
||||
res= execute_sqlcom_select(thd, all_tables);
|
||||
|
||||
/* Don't log SHOW STATUS commands to slow query log */
|
||||
thd->server_status&= ~(SERVER_QUERY_NO_INDEX_USED |
|
||||
SERVER_QUERY_NO_GOOD_INDEX_USED);
|
||||
|
Reference in New Issue
Block a user