Commit 370b310b authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.5 into 10.6

parents b6cfb296 4d53a758
......@@ -396,7 +396,9 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
bool result= TRUE;
String stmt_query;
bool lock_upgrade_done= FALSE;
bool backup_of_table_list_done= 0;;
MDL_ticket *mdl_ticket= NULL;
MDL_request mdl_request_for_trn;
Query_tables_list backup;
DBUG_ENTER("mysql_create_or_drop_trigger");
......@@ -446,6 +448,16 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
DBUG_RETURN(TRUE);
}
/* Protect against concurrent create/drop */
MDL_REQUEST_INIT(&mdl_request_for_trn, MDL_key::TABLE,
create ? tables->db.str : thd->lex->spname->m_db.str,
thd->lex->spname->m_name.str,
MDL_EXCLUSIVE, MDL_EXPLICIT);
if (thd->mdl_context.acquire_lock(&mdl_request_for_trn,
thd->variables.lock_wait_timeout))
goto end;
if (!create)
{
bool if_exists= thd->lex->if_exists();
......@@ -454,6 +466,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
Protect the query table list from the temporary and potentially
destructive changes necessary to open the trigger's table.
*/
backup_of_table_list_done= 1;
thd->lex->reset_n_backup_query_tables_list(&backup);
/*
Restore Query_tables_list::sql_command, which was
......@@ -623,7 +636,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
mdl_ticket->downgrade_lock(MDL_SHARED_NO_READ_WRITE);
/* Restore the query table list. Used only for drop trigger. */
if (!create)
if (backup_of_table_list_done)
thd->lex->restore_backup_query_tables_list(&backup);
if (!result)
......@@ -635,6 +648,9 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
thd->lex->spname->m_name.str, static_cast<uint>(thd->lex->spname->m_name.length));
}
if (mdl_request_for_trn.ticket)
thd->mdl_context.release_lock(mdl_request_for_trn.ticket);
DBUG_RETURN(result);
#ifdef WITH_WSREP
wsrep_error_label:
......
......@@ -2619,7 +2619,8 @@ void test_d2f(const char *s, int ex)
void test_d2b2d(const char *str, int p, int s, const char *orig, int ex)
{
char s1[100], buf[100], *end;
char s1[100], *end;
uchar buf[100];
int res, i, size=decimal_bin_size(p, s);
sprintf(s1, "'%s'", str);
......@@ -2937,27 +2938,27 @@ int main()
test_f2d(1234500009876.5, 0);
printf("==== ulonglong2decimal ====\n");
test_ull2d(ULL(12345), "12345", 0);
test_ull2d(ULL(0), "0", 0);
test_ull2d(ULL(18446744073709551615), "18446744073709551615", 0);
test_ull2d(12345ULL, "12345", 0);
test_ull2d(0ULL, "0", 0);
test_ull2d(18446744073709551615ULL, "18446744073709551615", 0);
printf("==== decimal2ulonglong ====\n");
test_d2ull("12345", "12345", 0);
test_d2ull("0", "0", 0);
test_d2ull("18446744073709551615", "18446744073709551615", 0);
test_d2ull("18446744073709551616", "18446744073", 2);
test_d2ull("18446744073709551616", "18446744073709551615", 2);
test_d2ull("-1", "0", 2);
test_d2ull("1.23", "1", 1);
test_d2ull("9999999999999999999999999.000", "9999999999999999", 2);
test_d2ull("9999999999999999999999999.000", "18446744073709551615", 2);
printf("==== longlong2decimal ====\n");
test_ll2d(LL(-12345), "-12345", 0);
test_ll2d(LL(-1), "-1", 0);
test_ll2d(LL(-9223372036854775807), "-9223372036854775807", 0);
test_ll2d(ULL(9223372036854775808), "-9223372036854775808", 0);
test_ll2d(-12345LL, "-12345", 0);
test_ll2d(-1LL, "-1", 0);
test_ll2d(-9223372036854775807LL, "-9223372036854775807", 0);
test_ll2d(9223372036854775808ULL, "-9223372036854775808", 0);
printf("==== decimal2longlong ====\n");
test_d2ll("18446744073709551615", "18446744073", 2);
test_d2ll("18446744073709551615", "9223372036854775807", 2);
test_d2ll("-1", "-1", 0);
test_d2ll("-1.23", "-1", 1);
test_d2ll("-9223372036854775807", "-9223372036854775807", 0);
......@@ -3131,12 +3132,12 @@ int main()
printf("==== decimal2string ====\n");
test_pr("123.123", 0, 0, 0, "123.123", 0);
test_pr("123.123", 7, 3, '0', "123.123", 0);
test_pr("123.123", 9, 3, '0', "00123.123", 0);
test_pr("123.123", 9, 4, '0', "0123.1230", 0);
test_pr("123.123", 9, 5, '0', "123.12300", 0);
test_pr("123.123", 9, 2, '0', "000123.12", 1);
test_pr("123.123", 9, 6, '0', "23.123000", 2);
test_pr("123.123", 7, 3, '0', "0123.123", 0);
test_pr("123.123", 9, 3, '0', "000123.123", 0);
test_pr("123.123", 9, 4, '0', "00123.1230", 0);
test_pr("123.123", 9, 5, '0', "0123.12300", 0);
test_pr("123.123", 9, 2, '0', "0000123.12", 1);
test_pr("123.123", 8, 6, '0', "23.123000", 2);
printf("==== decimal_shift ====\n");
test_sh("123.123", 1, "1231.23", 0);
......
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