summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorunknown <ram@gw.mysql.r18.ru>2004-06-08 18:01:15 +0500
committerunknown <ram@gw.mysql.r18.ru>2004-06-08 18:01:15 +0500
commit66c4087289dd05a39c6e4f5a95dad2df4ef1cfe0 (patch)
treea152aaf558cbcde196313f567fbe97ae284bdf0e /sql/item_sum.cc
parent5b4120288ebd7f81e198004490032be3e6ba9e79 (diff)
downloadmariadb-git-66c4087289dd05a39c6e4f5a95dad2df4ef1cfe0.tar.gz
a fix
(Bug #4035 GROUP_CONCAT with HAVING clause truncates field Bug #4057 LEFT() function in HAVING clause truncates query result). mysql-test/r/func_gconcat.result: a test case Bug #4035 GROUP_CONCAT with HAVING clause truncates field Bug #4057 LEFT() function in HAVING clause truncates query result mysql-test/t/func_gconcat.test: a test case Bug #4035 GROUP_CONCAT with HAVING clause truncates field Bug #4057 LEFT() function in HAVING clause truncates query result sql/item_strfunc.cc: a fix (Bug #4057 LEFT() function in HAVING clause truncates query result) sql/item_strfunc.h: a fix (Bug #4057 LEFT() function in HAVING clause truncates query result) sql/item_sum.cc: a fix (Bug #4035 GROUP_CONCAT with HAVING clause truncates field) sql/item_sum.h: a fix (Bug #4035 GROUP_CONCAT with HAVING clause truncates field)
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc20
1 files changed, 4 insertions, 16 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 0c5b29fc069..7c11a520d27 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1666,6 +1666,9 @@ int dump_leaf_key(byte* key, uint32 count __attribute__((unused)),
String tmp((char *)&buff,sizeof(buff),default_charset_info), tmp2;
char *record= (char*) item->table->record[0];
+ if (item->result.length())
+ item->result.append(*item->separator);
+
tmp.length(0);
for (uint i= 0; i < item->arg_count_field; i++)
@@ -1695,14 +1698,6 @@ int dump_leaf_key(byte* key, uint32 count __attribute__((unused)),
item->result.append(*res);
}
}
- if (item->tree_mode) // Last item of tree
- {
- item->show_elements++;
- if (item->show_elements < item->tree->elements_in_tree)
- item->result.append(*item->separator);
- }
- else
- item->result.append(*item->separator);
/* stop if length of result more than group_concat_max_len */
if (item->result.length() > item->group_concat_max_len)
@@ -1733,7 +1728,7 @@ Item_func_group_concat::Item_func_group_concat(bool is_distinct,
tree_mode(0), distinct(is_distinct), warning_for_row(0),
separator(is_separator), tree(&tree_base), table(0),
order(0), tables_list(0),
- show_elements(0), arg_count_order(0), arg_count_field(0),
+ arg_count_order(0), arg_count_field(0),
count_cut_values(0)
{
Item *item_select;
@@ -1799,7 +1794,6 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
order(item->order),
tables_list(item->tables_list),
group_concat_max_len(item->group_concat_max_len),
- show_elements(item->show_elements),
arg_count_order(item->arg_count_order),
arg_count_field(item->arg_count_field),
field_list_offset(item->field_list_offset),
@@ -2107,15 +2101,9 @@ String* Item_func_group_concat::val_str(String* str)
return 0;
if (tree_mode)
{
- show_elements= 0;
tree_walk(tree, (tree_walk_action)&dump_leaf_key, (void*)this,
left_root_right);
}
- else
- {
- if (!warning_for_row)
- result.length(result.length()-separator->length());
- }
if (count_cut_values && !warning_available)
{
warning_available= TRUE;