summaryrefslogtreecommitdiff
path: root/sql/sql_prepare.cc
diff options
context:
space:
mode:
authorunknown <igor@rurik.mysql.com>2006-02-02 21:23:36 -0800
committerunknown <igor@rurik.mysql.com>2006-02-02 21:23:36 -0800
commit8300149963a83b86c6ae2b1adf1a6f44f374fc8c (patch)
tree30c426e55f2f4aa73ad712d97bb4db5876251b77 /sql/sql_prepare.cc
parent6a2a94b50be1c6da3b916702683b8b8162de6afa (diff)
parent6757503847039fa8758dffc7263a38a792848685 (diff)
downloadmariadb-git-8300149963a83b86c6ae2b1adf1a6f44f374fc8c.tar.gz
Merge rurik.mysql.com:/home/igor/dev/mysql-4.1-0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0 mysql-test/t/having.test: Auto merged mysql-test/r/having.result: Manual merge sql/sql_lex.cc: Manual merge sql/sql_lex.h: Manual merge sql/sql_prepare.cc: Manual merge sql/sql_select.cc: Manual merge
Diffstat (limited to 'sql/sql_prepare.cc')
-rw-r--r--sql/sql_prepare.cc122
1 files changed, 110 insertions, 12 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 68f033f78fe..bd5dd4234fe 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1862,6 +1862,96 @@ void mysql_stmt_prepare(THD *thd, const char *packet, uint packet_length)
{
/* Statement map deletes statement on erase */
thd->stmt_map.erase(stmt);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
}
else
mysql_log.write(thd, COM_STMT_PREPARE, "[%lu] %s", stmt->id, packet);
@@ -1955,11 +2045,14 @@ static const char *get_dynamic_sql_string(LEX *lex, uint *query_len)
}
else
{
- query_str= lex->prepared_stmt_code.str;
- *query_len= lex->prepared_stmt_code.length;
- }
-end:
- return query_str;
+ stmt->setup_set_params();
+ SELECT_LEX *sl= stmt->lex->all_selects_list;
+ for (; sl; sl= sl->next_select_in_list())
+ {
+ /*
+ during query optimisation.
+ */
+ sl->prep_where= sl->where;
}
@@ -2066,14 +2159,19 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
sl->exclude_from_table_unique_test= FALSE;
/*
- Copy WHERE clause pointers to avoid damaging they by optimisation
+ Copy WHERE, HAVING clause pointers to avoid damaging them by optimisation
*/
- if (sl->prep_where)
- {
- sl->where= sl->prep_where->copy_andor_structure(thd);
- sl->where->cleanup();
- }
- DBUG_ASSERT(sl->join == 0);
+ if (sl->prep_where)
+ {
+ sl->where= sl->prep_where->copy_andor_structure(thd);
+ sl->where->cleanup();
+ }
+ if (sl->prep_having)
+ {
+ sl->having= sl->prep_having->copy_andor_structure(thd);
+ sl->having->cleanup();
+ }
+ DBUG_ASSERT(sl->join == 0);
ORDER *order;
/* Fix GROUP list */
for (order= (ORDER *)sl->group_list.first; order; order= order->next)