summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authormonty@mysql.com <>2004-11-08 01:13:54 +0200
committermonty@mysql.com <>2004-11-08 01:13:54 +0200
commitb903a129e26e217cf3c891a604ec1733df8fa9ff (patch)
tree7a3852793309c847d2ee83023b9429b28913b390 /sql/item_func.cc
parente93450d4421c3794d569f529b1f123cd3ca2eaf7 (diff)
downloadmariadb-git-b903a129e26e217cf3c891a604ec1733df8fa9ff.tar.gz
Simpler arena swapping code
Now thd->mem_root is a pointer to thd->main_mem_root and THR_MALLOC is a pointer to thd->mem_root. This gives us the following benefits: - Allow us to easily detect if arena has already been swapped before (this fixes a bug in setup_conds() where arena was swaped twice in some cases) - Faster swaps of arenas (as we don't have to copy the whole MEM_ROOT) - We don't anymore have to call my_pthread_setspecific_ptr(THR_MALLOC,...) to change where memory is alloced. Now it's enough to set thd->mem_root
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc7
1 files changed, 3 insertions, 4 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index b382dbf7bf9..bf85e5b378a 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -160,14 +160,13 @@ bool Item_func::agg_arg_charsets(DTCollation &coll,
}
THD *thd= current_thd;
- Item_arena *arena= thd->current_arena, backup;
+ Item_arena *arena, backup;
bool res= FALSE;
/*
In case we're in statement prepare, create conversion item
in its memory: it will be reused on each execute.
*/
- if (arena->is_stmt_prepare())
- thd->set_n_backup_item_arena(arena, &backup);
+ arena= thd->change_arena_if_needed(&backup);
for (arg= args, last= args + nargs; arg < last; arg++)
{
@@ -193,7 +192,7 @@ bool Item_func::agg_arg_charsets(DTCollation &coll,
conv->fix_fields(thd, 0, &conv);
*arg= conv;
}
- if (arena->is_stmt_prepare())
+ if (arena)
thd->restore_backup_item_arena(arena, &backup);
return res;
}