Commit a728ad71 authored by unknown's avatar unknown

Make sure that warning message when GROUP_CONCAT() cuts values is also

updated with the correct number of lines. (Bug #8681)


mysql-test/t/join_outer.test:
  Add new regression test
mysql-test/r/join_outer.result:
  Add new results
sql/item_sum.cc:
  Move cleanup of warning message outside of "if (original)" test or it won't
  always get cleaned up.
parent 87762300
...@@ -816,3 +816,22 @@ id text_id text_data ...@@ -816,3 +816,22 @@ id text_id text_data
1 0 0-SV 1 0 0-SV
2 10 10-SV 2 10 10-SV
DROP TABLE invoice, text_table; DROP TABLE invoice, text_table;
set group_concat_max_len=5;
create table t1 (a int, b varchar(20));
create table t2 (a int, c varchar(20));
insert into t1 values (1,"aaaaaaaaaa"),(2,"bbbbbbbbbb");
insert into t2 values (1,"cccccccccc"),(2,"dddddddddd");
select group_concat(t1.b,t2.c) from t1 left join t2 using(a) group by t1.a;
group_concat(t1.b,t2.c)
aaaaa
bbbbb
Warnings:
Warning 1260 2 line(s) were cut by GROUP_CONCAT()
select group_concat(t1.b,t2.c) from t1 inner join t2 using(a) group by t1.a;
group_concat(t1.b,t2.c)
aaaaa
bbbbb
Warnings:
Warning 1260 2 line(s) were cut by GROUP_CONCAT()
drop table t1, t2;
set group_concat_max_len=default;
...@@ -582,3 +582,14 @@ SELECT invoice.id, invoice.text_id, text_table.text_data ...@@ -582,3 +582,14 @@ SELECT invoice.id, invoice.text_id, text_table.text_data
WHERE (invoice.id LIKE '%' OR text_table.text_data LIKE '%'); WHERE (invoice.id LIKE '%' OR text_table.text_data LIKE '%');
DROP TABLE invoice, text_table; DROP TABLE invoice, text_table;
# Bug #8681: Bad warning message when group_concat() exceeds max length
set group_concat_max_len=5;
create table t1 (a int, b varchar(20));
create table t2 (a int, c varchar(20));
insert into t1 values (1,"aaaaaaaaaa"),(2,"bbbbbbbbbb");
insert into t2 values (1,"cccccccccc"),(2,"dddddddddd");
select group_concat(t1.b,t2.c) from t1 left join t2 using(a) group by t1.a;
select group_concat(t1.b,t2.c) from t1 inner join t2 using(a) group by t1.a;
drop table t1, t2;
set group_concat_max_len=default;
...@@ -1787,16 +1787,26 @@ Item_func_group_concat::Item_func_group_concat(THD *thd, ...@@ -1787,16 +1787,26 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
void Item_func_group_concat::cleanup() void Item_func_group_concat::cleanup()
{ {
THD *thd= current_thd;
DBUG_ENTER("Item_func_group_concat::cleanup"); DBUG_ENTER("Item_func_group_concat::cleanup");
Item_sum::cleanup(); Item_sum::cleanup();
/* Adjust warning message to include total number of cut values */
if (warning)
{
char warn_buff[MYSQL_ERRMSG_SIZE];
sprintf(warn_buff, ER(ER_CUT_VALUE_GROUP_CONCAT), count_cut_values);
warning->set_msg(thd, warn_buff);
warning= 0;
}
/* /*
Free table and tree if they belong to this item (if item have not pointer Free table and tree if they belong to this item (if item have not pointer
to original item from which was made copy => it own its objects ) to original item from which was made copy => it own its objects )
*/ */
if (!original) if (!original)
{ {
THD *thd= current_thd;
if (table) if (table)
{ {
free_tmp_table(thd, table); free_tmp_table(thd, table);
...@@ -1809,13 +1819,6 @@ void Item_func_group_concat::cleanup() ...@@ -1809,13 +1819,6 @@ void Item_func_group_concat::cleanup()
tree_mode= 0; tree_mode= 0;
delete_tree(tree); delete_tree(tree);
} }
if (warning)
{
char warn_buff[MYSQL_ERRMSG_SIZE];
sprintf(warn_buff, ER(ER_CUT_VALUE_GROUP_CONCAT), count_cut_values);
warning->set_msg(thd, warn_buff);
warning= 0;
}
} }
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -2076,6 +2079,10 @@ String* Item_func_group_concat::val_str(String* str) ...@@ -2076,6 +2079,10 @@ String* Item_func_group_concat::val_str(String* str)
if (null_value) if (null_value)
return 0; return 0;
if (count_cut_values && !warning) if (count_cut_values && !warning)
/*
ER_CUT_VALUE_GROUP_CONCAT needs an argument, but this gets set in
Item_func_group_concat::cleanup().
*/
warning= push_warning(item_thd, MYSQL_ERROR::WARN_LEVEL_WARN, warning= push_warning(item_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_CUT_VALUE_GROUP_CONCAT, ER_CUT_VALUE_GROUP_CONCAT,
ER(ER_CUT_VALUE_GROUP_CONCAT)); ER(ER_CUT_VALUE_GROUP_CONCAT));
......
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