summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.mysql.r18.ru>2003-01-21 09:46:07 +0400
committerunknown <hf@deer.mysql.r18.ru>2003-01-21 09:46:07 +0400
commita109d180c15d8e2b7908cf7833ee2ea245ae18f0 (patch)
tree8b24c166544177198dcdcd0ca14516e5e3cd544f
parent65aa88236cc1e310baa69cfed7281ce029859aed (diff)
parent3ffd7865b02a37569f955e40505f2f6b46cbe7a0 (diff)
downloadmariadb-git-a109d180c15d8e2b7908cf7833ee2ea245ae18f0.tar.gz
Merge abotchkov@work.mysql.com:/home/bk/mysql-4.1
into deer.mysql.r18.ru:/home/hf/work/mysql-4.1.w1 sql/ha_innodb.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_prepare.cc: Auto merged
-rw-r--r--sql/ha_innodb.cc5
-rw-r--r--sql/sql_parse.cc33
-rw-r--r--sql/sql_prepare.cc6
3 files changed, 29 insertions, 15 deletions
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index a6cf68b33b0..6e2b08005df 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -2513,11 +2513,6 @@ ha_innobase::change_active_index(
the flag ROW_MYSQL_WHOLE_ROW below, but that caused unnecessary
copying. Starting from MySQL-4.1 we use a more efficient flag here. */
- /*
- TODO: In 4.0 the below user_thd was changed to NULL.
- Heikki, please delete this comment after you have read this and may
- acted upon it.
- */
build_template(prebuilt, user_thd, table, ROW_MYSQL_REC_FIELDS);
DBUG_RETURN(0);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 509e1ac972c..0c9ad2d6935 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1206,6 +1206,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"));
@@ -1438,14 +1461,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;
@@ -1476,7 +1491,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 2c5b049e51b..0e1cdbe824f 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: