diff options
author | unknown <venu@myvenu.com> | 2003-01-20 14:00:50 -0800 |
---|---|---|
committer | unknown <venu@myvenu.com> | 2003-01-20 14:00:50 -0800 |
commit | f8c2477a3dc0ab1f3283feef50d54a0e197574c4 (patch) | |
tree | bf550dd2c8e7a156b4e8757bcf9c618cfbd00256 /sql | |
parent | e2c7d5d7ec77d056cc2ad7c9d9ef7cb132cc78de (diff) | |
download | mariadb-git-f8c2477a3dc0ab1f3283feef50d54a0e197574c4.tar.gz |
Multi query fix the recursion (SCRUM - For Monty)
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_parse.cc | 33 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 6 |
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: |