|
mysql_change_user doesn't reset the value on server_status, therefore the value of server_status refers to the "old" connection.
Here an example:
#include "mysql.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
MYSQL *con = mysql_init(NULL);
if (mysql_real_connect(con, "127.0.0.1", "sbtest", "sbtest", NULL, 0, NULL, 0) == NULL)
Unknown macro: {
fprintf(stderr, "%sn", mysql_error(con));
exit(EXIT_FAILURE);
}
fprintf(stderr, "Current autocommit flag after connect : %u\n", ( con->server_status & SERVER_STATUS_AUTOCOMMIT ? 1 : 0 ) );
if (mysql_query(con, "SET autocommit=1"))
fprintf(stderr, "Current autocommit flag after SET autocommit=1 : %u\n", ( con->server_status & SERVER_STATUS_AUTOCOMMIT ? 1 : 0 ) );
if (mysql_query(con, "SET autocommit=0"))
Unknown macro: {
fprintf(stderr, "%sn", mysql_error(con));
exit(EXIT_FAILURE);
}
fprintf(stderr, "Current autocommit flag after SET autocommit=0 : %u\n", ( con->server_status & SERVER_STATUS_AUTOCOMMIT ? 1 : 0 ) );
if (mysql_change_user(con, "sbtest", "sbtest", NULL))
fprintf(stderr, "Current autocommit flag after change user : %u\n", ( con->server_status & SERVER_STATUS_AUTOCOMMIT ? 1 : 0 ) );
exit(EXIT_SUCCESS);
}
Output from the above:
Current autocommit flag after connect : 1
Current autocommit flag after SET autocommit=1 : 1
Current autocommit flag after SET autocommit=0 : 0
Current autocommit flag after change user : 0
Expected output:
Current autocommit flag after connect : 1
Current autocommit flag after SET autocommit=1 : 1
Current autocommit flag after SET autocommit=0 : 0
Current autocommit flag after change user : 1
Note 1: tcpdump confirms that the new autocommit should be 1, not 0.
Note 2: the example above focus on autocommit flag, yet the whole value of server_status is not reset.
Tested with 2.3.1 , 2.3.5 and 3.0.4
|