Bug #15719 MYSQL_OPT_RECONNECT option is modified by mysql_real_connect
- Move init of "reconnect" variable to mysql_init - Add test case to mysql_client_test.
This commit is contained in:
parent
5da306b57e
commit
41c6fee874
@ -1456,6 +1456,24 @@ mysql_init(MYSQL *mysql)
|
||||
|
||||
mysql->options.methods_to_use= MYSQL_OPT_GUESS_CONNECTION;
|
||||
mysql->options.report_data_truncation= TRUE; /* default */
|
||||
|
||||
/*
|
||||
By default we don't reconnect because it could silently corrupt data (after
|
||||
reconnection you potentially lose table locks, user variables, session
|
||||
variables (transactions but they are specifically dealt with in
|
||||
mysql_reconnect()).
|
||||
This is a change: < 5.0.3 mysql->reconnect was set to 1 by default.
|
||||
How this change impacts existing apps:
|
||||
- existing apps which relyed on the default will see a behaviour change;
|
||||
they will have to set reconnect=1 after mysql_real_connect().
|
||||
- existing apps which explicitely asked for reconnection (the only way they
|
||||
could do it was by setting mysql.reconnect to 1 after mysql_real_connect())
|
||||
will not see a behaviour change.
|
||||
- existing apps which explicitely asked for no reconnection
|
||||
(mysql.reconnect=0) will not see a behaviour change.
|
||||
*/
|
||||
mysql->reconnect= 0;
|
||||
|
||||
return mysql;
|
||||
}
|
||||
|
||||
@ -1624,23 +1642,6 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
||||
port=mysql->options.port;
|
||||
if (!unix_socket)
|
||||
unix_socket=mysql->options.unix_socket;
|
||||
|
||||
/*
|
||||
By default we don't reconnect because it could silently corrupt data (after
|
||||
reconnection you potentially lose table locks, user variables, session
|
||||
variables (transactions but they are specifically dealt with in
|
||||
mysql_reconnect()).
|
||||
This is a change: < 5.0.3 mysql->reconnect was set to 1 by default.
|
||||
How this change impacts existing apps:
|
||||
- existing apps which relyed on the default will see a behaviour change;
|
||||
they will have to set reconnect=1 after mysql_real_connect().
|
||||
- existing apps which explicitely asked for reconnection (the only way they
|
||||
could do it was by setting mysql.reconnect to 1 after mysql_real_connect())
|
||||
will not see a behaviour change.
|
||||
- existing apps which explicitely asked for no reconnection
|
||||
(mysql.reconnect=0) will not see a behaviour change.
|
||||
*/
|
||||
mysql->reconnect= 0;
|
||||
|
||||
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
|
||||
|
||||
|
@ -14598,7 +14598,6 @@ static void test_bug14845()
|
||||
static void test_bug15510()
|
||||
{
|
||||
MYSQL_STMT *stmt;
|
||||
MYSQL_RES *res;
|
||||
int rc;
|
||||
const char *query= "select 1 from dual where 1/0";
|
||||
|
||||
@ -14624,6 +14623,81 @@ static void test_bug15510()
|
||||
myquery(rc);
|
||||
}
|
||||
|
||||
|
||||
/* Test MYSQL_OPT_RECONNECT, Bug#15719 */
|
||||
|
||||
static void test_opt_reconnect()
|
||||
{
|
||||
MYSQL *lmysql;
|
||||
my_bool my_true= TRUE;
|
||||
|
||||
myheader("test_opt_reconnect");
|
||||
|
||||
if (!(lmysql= mysql_init(NULL)))
|
||||
{
|
||||
myerror("mysql_init() failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!opt_silent)
|
||||
fprintf(stdout, "reconnect before mysql_options: %d\n", lmysql->reconnect);
|
||||
DIE_UNLESS(lmysql->reconnect == 0);
|
||||
|
||||
if (mysql_options(lmysql, MYSQL_OPT_RECONNECT, &my_true))
|
||||
{
|
||||
myerror("mysql_options failed: unknown option MYSQL_OPT_RECONNECT\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* reconnect should be 1 */
|
||||
if (!opt_silent)
|
||||
fprintf(stdout, "reconnect after mysql_options: %d\n", lmysql->reconnect);
|
||||
DIE_UNLESS(lmysql->reconnect == 1);
|
||||
|
||||
if (!(mysql_real_connect(lmysql, opt_host, opt_user,
|
||||
opt_password, current_db, opt_port,
|
||||
opt_unix_socket, 0)))
|
||||
{
|
||||
myerror("connection failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* reconnect should still be 1 */
|
||||
if (!opt_silent)
|
||||
fprintf(stdout, "reconnect after mysql_real_connect: %d\n",
|
||||
lmysql->reconnect);
|
||||
DIE_UNLESS(lmysql->reconnect == 1);
|
||||
|
||||
mysql_close(lmysql);
|
||||
|
||||
if (!(lmysql= mysql_init(NULL)))
|
||||
{
|
||||
myerror("mysql_init() failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!opt_silent)
|
||||
fprintf(stdout, "reconnect before mysql_real_connect: %d\n", lmysql->reconnect);
|
||||
DIE_UNLESS(lmysql->reconnect == 0);
|
||||
|
||||
if (!(mysql_real_connect(lmysql, opt_host, opt_user,
|
||||
opt_password, current_db, opt_port,
|
||||
opt_unix_socket, 0)))
|
||||
{
|
||||
myerror("connection failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* reconnect should still be 0 */
|
||||
if (!opt_silent)
|
||||
fprintf(stdout, "reconnect after mysql_real_connect: %d\n",
|
||||
lmysql->reconnect);
|
||||
DIE_UNLESS(lmysql->reconnect == 0);
|
||||
|
||||
mysql_close(lmysql);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read and parse arguments and MySQL options from my.cnf
|
||||
*/
|
||||
@ -14883,7 +14957,9 @@ static struct my_tests_st my_tests[]= {
|
||||
{ "test_bug13488", test_bug13488 },
|
||||
{ "test_bug13524", test_bug13524 },
|
||||
{ "test_bug14845", test_bug14845 },
|
||||
{ "test_bug15510", test_bug15510},
|
||||
{ "test_bug15510", test_bug15510 },
|
||||
{ "test_opt_reconnect", test_opt_reconnect },
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user