summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <venu@myvenu.com>2003-01-20 14:00:50 -0800
committerunknown <venu@myvenu.com>2003-01-20 14:00:50 -0800
commitf8c2477a3dc0ab1f3283feef50d54a0e197574c4 (patch)
treebf550dd2c8e7a156b4e8757bcf9c618cfbd00256 /sql
parente2c7d5d7ec77d056cc2ad7c9d9ef7cb132cc78de (diff)
downloadmariadb-git-f8c2477a3dc0ab1f3283feef50d54a0e197574c4.tar.gz
Multi query fix the recursion (SCRUM - For Monty)
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_parse.cc33
-rw-r--r--sql/sql_prepare.cc6
2 files changed, 29 insertions, 10 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index a44c95188fd..b5949b93297 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1200,6 +1200,29 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
mysql_log.write(thd,command,"%s",thd->query);
DBUG_PRINT("query",("%-.4096s",thd->query));
mysql_parse(thd,thd->query, thd->query_length);
+
+ while (!thd->fatal_error && thd->lex.found_colon)
+ {
+ /*
+ Multiple queries exits, execute them individually
+ */
+ if (thd->lock || thd->open_tables || thd->derived_tables)
+ close_thread_tables(thd);
+
+ uint length= thd->query_length-(uint)(thd->lex.found_colon-thd->query);
+
+ /* Remove garbage at start of query */
+ char *packet= thd->lex.found_colon;
+ while (my_isspace(system_charset_info,packet[0]) && length > 0)
+ {
+ packet++;
+ length--;
+ }
+ thd->query= packet;
+ thd->query_length= length;
+ mysql_parse(thd, packet, length);
+ }
+
if (!(specialflag & SPECIAL_NO_PRIOR))
my_pthread_setprio(pthread_self(),WAIT_PRIOR);
DBUG_PRINT("info",("query ready"));
@@ -1427,14 +1450,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
mysql_slow_log.write(thd, thd->query, thd->query_length, start_of_query);
}
}
- if (command == COM_QUERY && thd->lex.found_colon)
- {
- /*
- Multiple queries exits, execute them individually
- */
- uint length= thd->query_length-(uint)(thd->lex.found_colon-thd->query)+1;
- dispatch_command(command, thd, thd->lex.found_colon, length);
- }
thd->proc_info="cleaning up";
VOID(pthread_mutex_lock(&LOCK_thread_count)); // For process list
thd->proc_info=0;
@@ -1465,7 +1480,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
bool alloc_query(THD *thd, char *packet, ulong packet_length)
{
packet_length--; // Remove end null
- /* Remove garage at start and end of query */
+ /* Remove garbage at start and end of query */
while (my_isspace(system_charset_info,packet[0]) && packet_length > 0)
{
packet++;
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 8e0c031065e..1c6a618427e 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -30,7 +30,11 @@ Prepare:
- Without executing the query, return back to client the total
number of parameters along with result-set metadata information
(if any) in the following format:
- [STMT_ID:4][Columns:2][Param_count:2][Columns meta info][Params meta info]
+ [STMT_ID:4]
+ [Column_count:2]
+ [Param_count:2]
+ [Columns meta info] (if Column_count > 0)
+ [Params meta info] (if Param_count > 0 ) (TODO : 4.1.1)
Prepare-execute: