mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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: Vladislav Vaintroub <vvaintroub@gmail.com>
This commit is contained in:
@ -1227,7 +1227,9 @@ void THD::init()
|
|||||||
|
|
||||||
user_time.val= start_time= start_time_sec_part= 0;
|
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)
|
if (variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)
|
||||||
server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;
|
server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;
|
||||||
if (variables.sql_mode & MODE_ANSI_QUOTES)
|
if (variables.sql_mode & MODE_ANSI_QUOTES)
|
||||||
|
@ -21770,6 +21770,44 @@ static void test_mdev_30159()
|
|||||||
myquery(rc);
|
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[]= {
|
static struct my_tests_st my_tests[]= {
|
||||||
{ "test_mdev_20516", test_mdev_20516 },
|
{ "test_mdev_20516", test_mdev_20516 },
|
||||||
{ "test_mdev24827", test_mdev24827 },
|
{ "test_mdev24827", test_mdev24827 },
|
||||||
@ -22074,6 +22112,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_mdev18408", test_mdev18408 },
|
{ "test_mdev18408", test_mdev18408 },
|
||||||
{ "test_mdev20261", test_mdev20261 },
|
{ "test_mdev20261", test_mdev20261 },
|
||||||
{ "test_mdev_30159", test_mdev_30159 },
|
{ "test_mdev_30159", test_mdev_30159 },
|
||||||
|
{ "test_connect_autocommit", test_connect_autocommit},
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user