1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Merge branch '10.2' into 10.3

This commit is contained in:
Sergei Golubchik
2018-06-30 16:39:20 +02:00
273 changed files with 4467 additions and 1284 deletions

View File

@ -2707,6 +2707,9 @@ static const char *thread_state_info(THD *tmp)
return "";
return "Reading from net";
}
#else
if (tmp->get_command() == COM_SLEEP)
return "";
#endif
if (tmp->proc_info)
@ -10316,3 +10319,85 @@ static void get_cs_converted_string_value(THD *thd,
return;
}
#endif
/**
Dumps a text description of a thread, its security context
(user, host) and the current query.
@param thd thread context
@param buffer pointer to preferred result buffer
@param length length of buffer
@param max_query_len how many chars of query to copy (0 for all)
@return Pointer to string
*/
extern "C"
char *thd_get_error_context_description(THD *thd, char *buffer,
unsigned int length,
unsigned int max_query_len)
{
String str(buffer, length, &my_charset_latin1);
const Security_context *sctx= &thd->main_security_ctx;
char header[256];
size_t len;
len= my_snprintf(header, sizeof(header),
"MySQL thread id %u, OS thread handle %lu, query id %llu",
(uint)thd->thread_id, (ulong) thd->real_id, (ulonglong) thd->query_id);
str.length(0);
str.append(header, len);
if (sctx->host)
{
str.append(' ');
str.append(sctx->host);
}
if (sctx->ip)
{
str.append(' ');
str.append(sctx->ip);
}
if (sctx->user)
{
str.append(' ');
str.append(sctx->user);
}
/* Don't wait if LOCK_thd_data is used as this could cause a deadlock */
if (!mysql_mutex_trylock(&thd->LOCK_thd_data))
{
if (const char *info= thread_state_info(thd))
{
str.append(' ');
str.append(info);
}
if (thd->query())
{
if (max_query_len < 1)
len= thd->query_length();
else
len= MY_MIN(thd->query_length(), max_query_len);
str.append('\n');
str.append(thd->query(), len);
}
mysql_mutex_unlock(&thd->LOCK_thd_data);
}
if (str.c_ptr_safe() == buffer)
return buffer;
/*
We have to copy the new string to the destination buffer because the string
was reallocated to a larger buffer to be able to fit.
*/
DBUG_ASSERT(buffer != NULL);
length= MY_MIN(str.length(), length-1);
memcpy(buffer, str.c_ptr_quick(), length);
/* Make sure that the new string is null terminated */
buffer[length]= '\0';
return buffer;
}