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.methods_to_use= MYSQL_OPT_GUESS_CONNECTION;
|
||||||
mysql->options.report_data_truncation= TRUE; /* default */
|
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;
|
return mysql;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1624,23 +1642,6 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
port=mysql->options.port;
|
port=mysql->options.port;
|
||||||
if (!unix_socket)
|
if (!unix_socket)
|
||||||
unix_socket=mysql->options.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;
|
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
|
||||||
|
|
||||||
|
@ -14598,7 +14598,6 @@ static void test_bug14845()
|
|||||||
static void test_bug15510()
|
static void test_bug15510()
|
||||||
{
|
{
|
||||||
MYSQL_STMT *stmt;
|
MYSQL_STMT *stmt;
|
||||||
MYSQL_RES *res;
|
|
||||||
int rc;
|
int rc;
|
||||||
const char *query= "select 1 from dual where 1/0";
|
const char *query= "select 1 from dual where 1/0";
|
||||||
|
|
||||||
@ -14624,6 +14623,81 @@ static void test_bug15510()
|
|||||||
myquery(rc);
|
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
|
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_bug13488", test_bug13488 },
|
||||||
{ "test_bug13524", test_bug13524 },
|
{ "test_bug13524", test_bug13524 },
|
||||||
{ "test_bug14845", test_bug14845 },
|
{ "test_bug14845", test_bug14845 },
|
||||||
{ "test_bug15510", test_bug15510},
|
{ "test_bug15510", test_bug15510 },
|
||||||
|
{ "test_opt_reconnect", test_opt_reconnect },
|
||||||
|
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user