Commit 934db2ef authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

MDEV-32875 SERVER_STATUS_AUTOCOMMIT set after connecting, if autocommit=0

After successful connection, server always sets SERVER_STATUS_AUTOCOMMIT
in server_status in the OK packet. This is wrong, if global variable
autocommit=0.

Fixed THD::init(), added mysql_client_test test.

Thanks to Diego Dupin for the providing the patch.
Signed-off-by: default avatarVladislav Vaintroub <vvaintroub@gmail.com>
parent 85c15780
......@@ -1227,7 +1227,9 @@ void THD::init()
user_time.val= start_time= start_time_sec_part= 0;
server_status= SERVER_STATUS_AUTOCOMMIT;
server_status= 0;
if (variables.option_bits & OPTION_AUTOCOMMIT)
server_status|= SERVER_STATUS_AUTOCOMMIT;
if (variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)
server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;
if (variables.sql_mode & MODE_ANSI_QUOTES)
......
......@@ -21770,6 +21770,44 @@ static void test_mdev_30159()
myquery(rc);
}
/*
Check that server_status returned after connecting to server
is consistent with the value of autocommit variable.
*/
static void test_connect_autocommit()
{
int rc;
my_bool autocommit[]= {0, 1};
int i;
rc= mysql_query(mysql, "SET @save_autocommit=@@global.autocommit");
myquery(rc);
for (i= 0; i < 2; i++)
{
MYSQL *con;
char query[100];
int autocommit_val;
con= mysql_client_init(NULL);
DIE_UNLESS(con);
autocommit_val = autocommit[i];
snprintf(query, sizeof(query), "SET global autocommit=%d", autocommit_val);
rc= mysql_query(mysql, query);
myquery(rc);
if (!(mysql_real_connect(con, opt_host, opt_user, opt_password, current_db,
opt_port, opt_unix_socket, 0)))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(con));
exit(1);
}
DIE_UNLESS(!!(con->server_status & SERVER_STATUS_AUTOCOMMIT) == autocommit_val);
mysql_close(con);
}
rc= mysql_query(mysql, "SET global autocommit=@save_autocommit");
myquery(rc);
}
static struct my_tests_st my_tests[]= {
{ "test_mdev_20516", test_mdev_20516 },
{ "test_mdev24827", test_mdev24827 },
......@@ -22074,6 +22112,7 @@ static struct my_tests_st my_tests[]= {
{ "test_mdev18408", test_mdev18408 },
{ "test_mdev20261", test_mdev20261 },
{ "test_mdev_30159", test_mdev_30159 },
{ "test_connect_autocommit", test_connect_autocommit},
{ 0, 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