Commit c8967495 authored by Georgi Kodinov's avatar Georgi Kodinov

merge

parents a79187b8 d765e30a
...@@ -1811,6 +1811,41 @@ MAX(t2.a) ...@@ -1811,6 +1811,41 @@ MAX(t2.a)
2 2
DROP TABLE t1, t2; DROP TABLE t1, t2;
# #
# Bug#55188: GROUP BY, GROUP_CONCAT and TEXT - inconsistent results
#
CREATE TABLE t1 (a text, b varchar(10));
INSERT INTO t1 VALUES (repeat('1', 1300),'one'), (repeat('1', 1300),'two');
EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
id 1
select_type SIMPLE
table t1
type ALL
possible_keys NULL
key NULL
key_len NULL
ref NULL
rows 2
Extra Using filesort
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
SUBSTRING(a,1,10) LENGTH(a) GROUP_CONCAT(b)
1111111111 1300 one,two
EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
id 1
select_type SIMPLE
table t1
type ALL
possible_keys NULL
key NULL
key_len NULL
ref NULL
rows 2
Extra Using temporary; Using filesort
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
SUBSTRING(a,1,10) LENGTH(a)
1111111111 1300
DROP TABLE t1;
# End of 5.1 tests # End of 5.1 tests
# #
# Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00 # Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00
......
...@@ -1222,6 +1222,20 @@ DROP TABLE t1, t2; ...@@ -1222,6 +1222,20 @@ DROP TABLE t1, t2;
--echo # --echo #
--echo # Bug#55188: GROUP BY, GROUP_CONCAT and TEXT - inconsistent results
--echo #
CREATE TABLE t1 (a text, b varchar(10));
INSERT INTO t1 VALUES (repeat('1', 1300),'one'), (repeat('1', 1300),'two');
query_vertical EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
query_vertical EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
DROP TABLE t1;
--echo # End of 5.1 tests --echo # End of 5.1 tests
......
...@@ -2982,6 +2982,7 @@ public: ...@@ -2982,6 +2982,7 @@ public:
class Cached_item_str :public Cached_item class Cached_item_str :public Cached_item
{ {
Item *item; Item *item;
uint32 value_max_length;
String value,tmp_value; String value,tmp_value;
public: public:
Cached_item_str(THD *thd, Item *arg); Cached_item_str(THD *thd, Item *arg);
......
...@@ -65,7 +65,9 @@ Cached_item::~Cached_item() {} ...@@ -65,7 +65,9 @@ Cached_item::~Cached_item() {}
*/ */
Cached_item_str::Cached_item_str(THD *thd, Item *arg) Cached_item_str::Cached_item_str(THD *thd, Item *arg)
:item(arg), value(min(arg->max_length, thd->variables.max_sort_length)) :item(arg),
value_max_length(min(arg->max_length, thd->variables.max_sort_length)),
value(value_max_length)
{} {}
bool Cached_item_str::cmp(void) bool Cached_item_str::cmp(void)
...@@ -74,7 +76,7 @@ bool Cached_item_str::cmp(void) ...@@ -74,7 +76,7 @@ bool Cached_item_str::cmp(void)
bool tmp; bool tmp;
if ((res=item->val_str(&tmp_value))) if ((res=item->val_str(&tmp_value)))
res->length(min(res->length(), value.alloced_length())); res->length(min(res->length(), value_max_length));
if (null_value != item->null_value) if (null_value != item->null_value)
{ {
if ((null_value= item->null_value)) if ((null_value= item->null_value))
......
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