summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Glukhov <sergey.glukhov@oracle.com>2012-08-09 15:50:29 +0400
committerSergey Glukhov <sergey.glukhov@oracle.com>2012-08-09 15:50:29 +0400
commit51672ec2d4d37e701b595ac74cde9abc37916a2d (patch)
tree0dc77d97fc835d2a6e62c405b6a4b0ad58a2a827
parent6e4b8b02528f0210703238452231f566d3e75111 (diff)
parent2f30b34095e286877cda7156ae9622a4154147bd (diff)
downloadmariadb-git-51672ec2d4d37e701b595ac74cde9abc37916a2d.tar.gz
5.1 -> 5.5 merge
-rw-r--r--sql/item.cc7
-rw-r--r--sql/item_subselect.cc2
-rw-r--r--sql/sql_select.cc4
3 files changed, 7 insertions, 6 deletions
diff --git a/sql/item.cc b/sql/item.cc
index 53776782205..95563e31887 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -6429,7 +6429,12 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
if (from_field != not_found_field)
{
Item_field* fld;
- if (!(fld= new Item_field(thd, last_checked_context, from_field)))
+ Query_arena backup, *arena;
+ arena= thd->activate_stmt_arena_if_needed(&backup);
+ fld= new Item_field(thd, last_checked_context, from_field);
+ if (arena)
+ thd->restore_active_arena(arena, &backup);
+ if (!fld)
goto error;
thd->change_item_tree(reference, fld);
mark_as_dependent(thd, last_checked_context->select_lex,
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 97b8dbbe113..bc81e5b01c1 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -1146,7 +1146,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
}
else
{
- Item *item= (Item*) select_lex->item_list.head();
+ Item *item= (Item*) select_lex->item_list.head()->real_item();
if (select_lex->table_list.elements)
{
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 8f4439c4dc1..7169a834ff7 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -557,8 +557,6 @@ JOIN::prepare(Item ***rref_pointer_array,
if (having)
{
- Query_arena backup, *arena;
- arena= thd->activate_stmt_arena_if_needed(&backup);
nesting_map save_allow_sum_func= thd->lex->allow_sum_func;
thd->where="having clause";
thd->lex->allow_sum_func|= 1 << select_lex_arg->nest_level;
@@ -568,8 +566,6 @@ JOIN::prepare(Item ***rref_pointer_array,
having->check_cols(1)));
select_lex->having_fix_field= 0;
select_lex->having= having;
- if (arena)
- thd->restore_active_arena(arena, &backup);
if (having_fix_rc || thd->is_error())
DBUG_RETURN(-1); /* purecov: inspected */