summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorunknown <mhansson/martin@linux-st28.site>2007-05-11 16:05:20 +0300
committerunknown <mhansson/martin@linux-st28.site>2007-05-11 16:05:20 +0300
commit10be360ece3e148164aa9c83d45a2526c34262e7 (patch)
treefb50fb4c32f6db304ca86359415c5e60a85b7544 /sql/item_sum.cc
parentbe5ff3e2ba4ddf32241348de6184be0172d34a37 (diff)
downloadmariadb-git-10be360ece3e148164aa9c83d45a2526c34262e7.tar.gz
bug#28273: GROUP_CONCAT and ORDER BY: No warning when result gets truncated.
When using GROUP_CONCAT with ORDER BY, a tree is used for the sorting, as opposed to normal nested loops join used when there is no ORDER BY. The tree traversal that generates the result counts the lines that have been cut down. (as they get cut down to the field's max_size) But the check of that count was before the tree traversal, so no warning was generated if the output is truncated. Fixed by moving the check to after the tree traversal. mysql-test/r/func_gconcat.result: bug#28273: correct result mysql-test/t/func_gconcat.test: bug#28273: test case sql/item_sum.cc: bug#28273: the fix Moved the code that outputs a warning to after temporary table (tree) is traversed.
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 4579ecd48ae..d6b31d43389 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -3339,6 +3339,10 @@ String* Item_func_group_concat::val_str(String* str)
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0;
+ if (!result.length() && tree)
+ /* Tree is used for sorting as in ORDER BY */
+ tree_walk(tree, (tree_walk_action)&dump_leaf_key, (void*)this,
+ left_root_right);
if (count_cut_values && !warning)
{
/*
@@ -3350,11 +3354,6 @@ String* Item_func_group_concat::val_str(String* str)
ER_CUT_VALUE_GROUP_CONCAT,
ER(ER_CUT_VALUE_GROUP_CONCAT));
}
- if (result.length())
- return &result;
- if (tree)
- tree_walk(tree, (tree_walk_action)&dump_leaf_key, (void*)this,
- left_root_right);
return &result;
}