From 13ce622b750c805de2276d57d74b7ca5faf1dd9d Mon Sep 17 00:00:00 2001 From: Martin Stjernholm <mast@lysator.liu.se> Date: Sat, 12 Aug 2006 16:07:48 +0200 Subject: [PATCH] Fixed bug in f_set_charset when mysql_set_character_set exists. Fixed some places where mysql_error is called outside MYSQL_ALLOW. Fixed the error message that talked about a "reconnect" problem even when it's the first connect. Rev: src/modules/Mysql/mysql.c:1.101 --- src/modules/Mysql/mysql.c | 64 ++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/modules/Mysql/mysql.c b/src/modules/Mysql/mysql.c index 5cb11210a8..12f482e32f 100644 --- a/src/modules/Mysql/mysql.c +++ b/src/modules/Mysql/mysql.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: mysql.c,v 1.100 2006/08/12 03:27:56 mast Exp $ +|| $Id: mysql.c,v 1.101 2006/08/12 14:07:48 mast Exp $ */ /* @@ -358,7 +358,7 @@ static void pike_mysql_set_options(struct mapping *options) #endif /* HAVE_MYSQL_OPTIONS */ } -static void pike_mysql_reconnect(void) +static void pike_mysql_reconnect (int reconnect) { MYSQL *mysql = PIKE_MYSQL->mysql; MYSQL *socket; @@ -466,9 +466,12 @@ static void pike_mysql_reconnect(void) } if (!(PIKE_MYSQL->socket = socket)) { - Pike_error("Mysql.mysql(): Couldn't reconnect to SQL-server\n" - "%s\n", - mysql_error(PIKE_MYSQL->mysql)); + const char *err; + MYSQL_ALLOW(); + err = mysql_error (mysql); + MYSQL_DISALLOW(); + Pike_error("Mysql.mysql(): Couldn't %s to SQL-server: %s\n", + reconnect ? "reconnect" : "connect", err); } if (socket->net.fd >= 0) { @@ -653,7 +656,7 @@ static void f_create(INT32 args) pike_mysql_set_ssl(PIKE_MYSQL->options); - pike_mysql_reconnect(); + pike_mysql_reconnect (0); #ifndef HAVE_MYSQL_SET_CHARACTER_SET { @@ -693,7 +696,7 @@ static void mysql__sprintf(INT32 args) const char *info; if(!PIKE_MYSQL->socket) - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; MYSQL_ALLOW(); @@ -704,7 +707,7 @@ static void mysql__sprintf(INT32 args) push_text(info); #ifdef HAVE_MYSQL_SSL if (PIKE_MYSQL->mysql->options.use_ssl) { - push_text("using SSL"); + push_text("using SSL "); } else push_empty_string(); @@ -741,7 +744,7 @@ static void f_affected_rows(INT32 args) INT64 count; if (!PIKE_MYSQL->socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); } pop_n_elems(args); socket = PIKE_MYSQL->socket; @@ -764,7 +767,7 @@ static void f_insert_id(INT32 args) INT64 id; if (!PIKE_MYSQL->socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); } pop_n_elems(args); @@ -789,7 +792,7 @@ static void f_error(INT32 args) const char *error_msg; if (!PIKE_MYSQL->socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); } socket = PIKE_MYSQL->socket; @@ -841,7 +844,7 @@ static void f_select_db(INT32 args) } if (!socket || tmp) { /* The connection might have been closed. */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -925,7 +928,7 @@ static void low_query(INT32 args, char *name, int flags) } if (!socket) { /* The connection might have been closed. */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -983,8 +986,12 @@ static void low_query(INT32 args, char *name, int flags) MYSQL_DISALLOW(); if (err) { + const char *msg; + MYSQL_ALLOW(); + msg = mysql_error (socket); + MYSQL_DISALLOW(); Pike_error("%s(): Couldn't create result for query (%s)\n", - name, mysql_error(socket)); + name, msg); } /* query was INSERT or similar - return 0 */ @@ -1059,7 +1066,7 @@ static void f_create_db(INT32 args) } if (!socket || tmp) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1117,7 +1124,7 @@ static void f_drop_db(INT32 args) } if (!socket || tmp) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1165,7 +1172,7 @@ static void f_shutdown(INT32 args) } if (!socket || tmp) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1211,7 +1218,7 @@ static void f_reload(INT32 args) } if (!socket || tmp) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1244,7 +1251,7 @@ static void f_statistics(INT32 args) const char *stats; if (!socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; } @@ -1272,7 +1279,7 @@ static void f_server_info(INT32 args) const char *info; if (!socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; } @@ -1303,7 +1310,7 @@ static void f_host_info(INT32 args) const char *info; if (!PIKE_MYSQL->socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); } socket = PIKE_MYSQL->socket; @@ -1335,7 +1342,7 @@ static void f_protocol_info(INT32 args) int prot; if (!PIKE_MYSQL->socket) { - pike_mysql_reconnect(); + pike_mysql_reconnect (1); } pop_n_elems(args); @@ -1391,7 +1398,7 @@ static void f_list_dbs(INT32 args) } if (!socket || !result) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1477,7 +1484,7 @@ static void f_list_tables(INT32 args) } if (!socket || !result) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1628,7 +1635,7 @@ static void f_list_fields(INT32 args) } if (!socket || !result) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1688,7 +1695,7 @@ static void f_list_processes(INT32 args) } if (!socket || !result) { /* The connection might have been closed */ - pike_mysql_reconnect(); + pike_mysql_reconnect (1); socket = PIKE_MYSQL->socket; @@ -1762,13 +1769,14 @@ static void f_set_charset (INT32 args) #ifdef HAVE_MYSQL_SET_CHARACTER_SET { int res; + MYSQL *socket = PIKE_MYSQL->socket; MYSQL_ALLOW(); - res = mysql_set_character_set (PIKE_MYSQL->socket, charset->str); + res = mysql_set_character_set (socket, charset->str); MYSQL_DISALLOW(); if (!res) { const char *err; MYSQL_ALLOW(); - err = mysql_error(PIKE_MYSQL->socket); + err = mysql_error(socket); MYSQL_DISALLOW(); Pike_error("Setting the charset failed: %s\n", err); } -- GitLab