Commit 431582af authored by sergefp@mysql.com's avatar sergefp@mysql.com

Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into  mysql.com:/home/psergey/mysql-5.1-merge6
parents 3def02ed e76acd80
...@@ -78,5 +78,6 @@ abcn1 ...@@ -78,5 +78,6 @@ abcn1
abcn1n2 abcn1n2
abc\def abc\def
This is a test This is a test
insert into t1 select * FROM (select @var1 union select @var2) AS t2;
drop table t1; drop table t1;
stop slave; stop slave;
...@@ -55,6 +55,7 @@ SELECT * FROM t1 ORDER BY n; ...@@ -55,6 +55,7 @@ SELECT * FROM t1 ORDER BY n;
sync_slave_with_master; sync_slave_with_master;
SELECT * FROM t1 ORDER BY n; SELECT * FROM t1 ORDER BY n;
connection master; connection master;
insert into t1 select * FROM (select @var1 union select @var2) AS t2;
drop table t1; drop table t1;
sync_slave_with_master; sync_slave_with_master;
stop slave; stop slave;
...@@ -3948,14 +3948,24 @@ int get_var_with_binlog(THD *thd, enum_sql_command sql_command, ...@@ -3948,14 +3948,24 @@ int get_var_with_binlog(THD *thd, enum_sql_command sql_command,
sql_set_variables(), we could instead manually call check() and update(); sql_set_variables(), we could instead manually call check() and update();
this would save memory and time; but calling sql_set_variables() makes this would save memory and time; but calling sql_set_variables() makes
one unique place to maintain (sql_set_variables()). one unique place to maintain (sql_set_variables()).
Manipulation with lex is necessary since free_underlaid_joins
is going to release memory belonging to the main query.
*/ */
List<set_var_base> tmp_var_list; List<set_var_base> tmp_var_list;
LEX *sav_lex= thd->lex, lex_tmp;
thd->lex= &lex_tmp;
lex_start(thd, NULL, 0);
tmp_var_list.push_back(new set_var_user(new Item_func_set_user_var(name, tmp_var_list.push_back(new set_var_user(new Item_func_set_user_var(name,
new Item_null()))); new Item_null())));
/* Create the variable */ /* Create the variable */
if (sql_set_variables(thd, &tmp_var_list)) if (sql_set_variables(thd, &tmp_var_list))
{
thd->lex= sav_lex;
goto err; goto err;
}
thd->lex= sav_lex;
if (!(var_entry= get_variable(&thd->user_vars, name, 0))) if (!(var_entry= get_variable(&thd->user_vars, name, 0)))
goto err; goto err;
} }
......
...@@ -2087,19 +2087,20 @@ void reinit_stmt_before_use(THD *thd, LEX *lex) ...@@ -2087,19 +2087,20 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
sl->exclude_from_table_unique_test= FALSE; sl->exclude_from_table_unique_test= FALSE;
/* /*
Copy WHERE, HAVING clause pointers to avoid damaging them by optimisation Copy WHERE, HAVING clause pointers to avoid damaging them
by optimisation
*/ */
if (sl->prep_where) if (sl->prep_where)
{ {
sl->where= sl->prep_where->copy_andor_structure(thd); sl->where= sl->prep_where->copy_andor_structure(thd);
sl->where->cleanup(); sl->where->cleanup();
} }
if (sl->prep_having) if (sl->prep_having)
{ {
sl->having= sl->prep_having->copy_andor_structure(thd); sl->having= sl->prep_having->copy_andor_structure(thd);
sl->having->cleanup(); sl->having->cleanup();
} }
DBUG_ASSERT(sl->join == 0); DBUG_ASSERT(sl->join == 0);
ORDER *order; ORDER *order;
/* Fix GROUP list */ /* Fix GROUP list */
for (order= (ORDER *)sl->group_list.first; order; order= order->next) for (order= (ORDER *)sl->group_list.first; order; order= order->next)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment