summaryrefslogtreecommitdiff
path: root/sql-common
diff options
context:
space:
mode:
authorJim Winstead <jimw@mysql.com>2010-05-09 20:02:05 -0700
committerJim Winstead <jimw@mysql.com>2010-05-09 20:02:05 -0700
commit6170e64f674e84a074020496c8bb3ac6516e71ae (patch)
treefe9818848bdd873f7058a397ec24de85b5141cb3 /sql-common
parent209cccf55dd39d0be7eb4635b7c397b36941b825 (diff)
downloadmariadb-git-6170e64f674e84a074020496c8bb3ac6516e71ae.tar.gz
Using an initial command with mysql_options(..., MYSQL_INIT_COMMAND, ...)
that generated multiple result sets (such as a stored procedure or a multi-statement command) would leave the connection unusable. (Bug #42373) A side-effect of this bug fix is to make MYSQL_INIT_COMMAND settings ignored when connecting from within the server, but none of the existing mechanisms for connecting from within the server use or need to set the initial command.
Diffstat (limited to 'sql-common')
-rw-r--r--sql-common/client.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/sql-common/client.c b/sql-common/client.c
index 51bbda3bade..1b7723ce0a5 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -2455,6 +2455,11 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
goto error;
}
+ /*
+ Using init_commands is not supported when connecting from within the
+ server.
+ */
+#ifndef MYSQL_SERVER
if (mysql->options.init_commands)
{
DYNAMIC_ARRAY *init_commands= mysql->options.init_commands;
@@ -2466,18 +2471,26 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
for (; ptr < end_command; ptr++)
{
- MYSQL_RES *res;
+ int status;
+
if (mysql_real_query(mysql,*ptr, (ulong) strlen(*ptr)))
goto error;
- if (mysql->fields)
- {
- if (!(res= cli_use_result(mysql)))
- goto error;
- mysql_free_result(res);
- }
+
+ do {
+ if (mysql->fields)
+ {
+ MYSQL_RES *res;
+ if (!(res= cli_use_result(mysql)))
+ goto error;
+ mysql_free_result(res);
+ }
+ if ((status= mysql_next_result(mysql)) > 0)
+ goto error;
+ } while (status == 0);
}
mysql->reconnect=reconnect;
}
+#endif
#ifndef TO_BE_DELETED
if (mysql->options.rpl_probe && mysql_rpl_probe(mysql))