mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Implement a fix for Bug#57058 -- send SERVER_QUERY_WAS_SLOW over
network when a query was slow. When a query is slow, sent a special flag to the client indicating this fact. Add a test case. Implement review comments. include/mysql_com.h: Clear SERVER_QUERY_WAS_SLOW at end of each statement. Since this patch removes the technique when thd->server_status is modified briefly only to execute my_eof(), reset more server status bit that may remain in the status from execution of the previous statement. sql/protocol.cc: Always use thd->server_status to in net_* functions to send the latest status to the client. sql/sp_head.cc: Calculate if a query was slow before sending EOF packet. sql/sql_cursor.cc: Remove juggling with thd->server_status. The extra status bits are reset at start of the next statement. sql/sql_db.cc: Remove juggling with thd->server_status. The extra status bits are reset at start of the next statement. sql/sql_error.cc: Remove m_server_status member, it's not really part of the Diagnostics_area. sql/sql_error.h: Remove server_status member, it's not part of the Diagnostics_area. The associated hack is removed as well. sql/sql_parse.cc: Do not calculate if a query was slow twice. Use a status flag in thd->server_status. tests/mysql_client_test.c: Add a test case for Bug#57058. Check that the status is present at the client, when sent.
This commit is contained in:
@ -19061,7 +19061,7 @@ static void test_bug49972()
|
||||
my_bool is_null;
|
||||
|
||||
DBUG_ENTER("test_bug49972");
|
||||
myheader("test_49972");
|
||||
myheader("test_bug49972");
|
||||
|
||||
rc= mysql_query(mysql, "DROP FUNCTION IF EXISTS f1");
|
||||
myquery(rc);
|
||||
@ -19148,6 +19148,45 @@ static void test_bug49972()
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Bug#57058 SERVER_QUERY_WAS_SLOW not wired up.
|
||||
*/
|
||||
|
||||
static void test_bug57058()
|
||||
{
|
||||
MYSQL_RES *res;
|
||||
int rc;
|
||||
|
||||
DBUG_ENTER("test_bug57058");
|
||||
myheader("test_bug57058");
|
||||
|
||||
rc= mysql_query(mysql, "set @@session.long_query_time=0.1");
|
||||
myquery(rc);
|
||||
|
||||
DIE_UNLESS(!(mysql->server_status & SERVER_QUERY_WAS_SLOW));
|
||||
|
||||
rc= mysql_query(mysql, "select sleep(1)");
|
||||
myquery(rc);
|
||||
|
||||
/*
|
||||
Important: the flag is sent in the last EOF packet of
|
||||
the query, the one which ends the result. Read the
|
||||
result to see the "slow" status.
|
||||
*/
|
||||
res= mysql_store_result(mysql);
|
||||
|
||||
DIE_UNLESS(mysql->server_status & SERVER_QUERY_WAS_SLOW);
|
||||
|
||||
mysql_free_result(res);
|
||||
|
||||
rc= mysql_query(mysql, "set @@session.long_query_time=default");
|
||||
myquery(rc);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read and parse arguments and MySQL options from my.cnf
|
||||
*/
|
||||
@ -19481,6 +19520,7 @@ static struct my_tests_st my_tests[]= {
|
||||
{ "test_bug42373", test_bug42373 },
|
||||
{ "test_bug54041", test_bug54041 },
|
||||
{ "test_bug47485", test_bug47485 },
|
||||
{ "test_bug57058", test_bug57058 },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user