diff --git a/sql/item_sum.h b/sql/item_sum.h index a8242d76287..a38530a502c 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -1116,6 +1116,13 @@ public: enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;} const char *func_name() const { return "group_concat"; } virtual Item_result result_type () const { return STRING_RESULT; } + enum_field_types field_type() const + { + if (max_length/collation.collation->mbmaxlen > CONVERT_IF_BIGGER_TO_BLOB) + return FIELD_TYPE_BLOB; + else + return MYSQL_TYPE_VARCHAR; + } void clear(); bool add(); void reset_field() { DBUG_ASSERT(0); } // not used diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index c265375a263..8ec5bcd6f0c 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -14841,6 +14841,40 @@ static void test_bug15613() } /* + Bug#14169: type of group_concat() result changed to blob if tmp_table was used +*/ +static void test_bug14169() +{ + MYSQL_STMT *stmt; + const char *stmt_text; + MYSQL_RES *res; + MYSQL_FIELD *field; + int rc; + + myheader("test_bug14169"); + + rc= mysql_query(mysql, "drop table if exists t1"); + myquery(rc); + rc= mysql_query(mysql, "set session group_concat_max_len=1024"); + myquery(rc); + rc= mysql_query(mysql, "create table t1 (f1 int unsigned, f2 varchar(255))"); + myquery(rc); + rc= mysql_query(mysql, "insert into t1 values (1,repeat('a',255))," + "(2,repeat('b',255))"); + myquery(rc); + stmt= mysql_stmt_init(mysql); + stmt_text= "select f2,group_concat(f1) from t1 group by f2"; + rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); + myquery(rc); + res= mysql_stmt_result_metadata(stmt); + field= mysql_fetch_fields(res); + if (!opt_silent) + printf("GROUP_CONCAT() result type %i", field[1].type); + DIE_UNLESS(field[1].type == MYSQL_TYPE_BLOB); + + rc= mysql_query(mysql, "drop table t1"); + myquery(rc); +}/* Read and parse arguments and MySQL options from my.cnf */ @@ -15105,6 +15139,7 @@ static struct my_tests_st my_tests[]= { { "test_bug16143", test_bug16143 }, { "test_bug16144", test_bug16144 }, { "test_bug15613", test_bug15613 }, + { "test_bug14169", test_bug14169 }, { 0, 0 } };