mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.5 into 10.6
This commit is contained in:
@ -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 @@ end:
|
||||
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 @@ end:
|
||||
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);
|
||||
|
Reference in New Issue
Block a user