diff options
author | unknown <igor@rurik.mysql.com> | 2006-02-02 21:23:36 -0800 |
---|---|---|
committer | unknown <igor@rurik.mysql.com> | 2006-02-02 21:23:36 -0800 |
commit | 8300149963a83b86c6ae2b1adf1a6f44f374fc8c (patch) | |
tree | 30c426e55f2f4aa73ad712d97bb4db5876251b77 /sql/sql_prepare.cc | |
parent | 6a2a94b50be1c6da3b916702683b8b8162de6afa (diff) | |
parent | 6757503847039fa8758dffc7263a38a792848685 (diff) | |
download | mariadb-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.cc | 122 |
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) |