summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-08-20 12:09:17 +0300
committerGeorgi Kodinov <Georgi.Kodinov@Oracle.com>2010-08-20 12:09:17 +0300
commitf1517f4861ec0dc44a1c623154187fa051b2eb7c (patch)
treed7d20b0fb3455280191417a9653848ff8d25442e /sql/item_sum.cc
parent89d7ac6007fe79cdf99563c95a8528be74e25efc (diff)
parent05d0568bee2b8776bdb34850a1b6f7efc142db5b (diff)
downloadmariadb-git-f1517f4861ec0dc44a1c623154187fa051b2eb7c.tar.gz
merge
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index f92bde9ce87..25b3bd5d91d 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -3035,7 +3035,6 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
tree(item->tree),
unique_filter(item->unique_filter),
table(item->table),
- order(item->order),
context(item->context),
arg_count_order(item->arg_count_order),
arg_count_field(item->arg_count_field),
@@ -3048,6 +3047,24 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
{
quick_group= item->quick_group;
result.set_charset(collation.collation);
+
+ /*
+ Since the ORDER structures pointed to by the elements of the 'order' array
+ may be modified in find_order_in_list() called from
+ Item_func_group_concat::setup(), create a copy of those structures so that
+ such modifications done in this object would not have any effect on the
+ object being copied.
+ */
+ ORDER *tmp;
+ if (!(order= (ORDER **) thd->alloc(sizeof(ORDER *) * arg_count_order +
+ sizeof(ORDER) * arg_count_order)))
+ return;
+ tmp= (ORDER *)(order + arg_count_order);
+ for (uint i= 0; i < arg_count_order; i++, tmp++)
+ {
+ memcpy(tmp, item->order[i], sizeof(ORDER));
+ order[i]= tmp;
+ }
}