diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index 374520ff610..21bd3c62e1b 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -456,4 +456,6 @@ SELECT (@v:=a) <> (@v:=1) FROM t1; (@v:=a) <> (@v:=1) 1 DROP TABLE t1; +SET @bug12408412=1; +SELECT GROUP_CONCAT(@bug12408412 ORDER BY 1) INTO @bug12408412; End of 5.1 tests diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index efaf8afd91e..6865f3c7f25 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -365,4 +365,12 @@ SELECT (@v:=a) <> (@v:=1) FROM t1; DROP TABLE t1; +# +# Bug #12408412: GROUP_CONCAT + ORDER BY + INPUT/OUTPUT +# SAME USER VARIABLE = CRASH +# +SET @bug12408412=1; +SELECT GROUP_CONCAT(@bug12408412 ORDER BY 1) INTO @bug12408412; + --echo End of 5.1 tests + diff --git a/sql/item_func.cc b/sql/item_func.cc index 645c9909b93..a560abb6fc3 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4175,7 +4175,7 @@ void Item_func_set_user_var::save_item_result(Item *item) { DBUG_ENTER("Item_func_set_user_var::save_item_result"); - switch (cached_result_type) { + switch (args[0]->result_type()) { case REAL_RESULT: save_result.vreal= item->val_result(); break; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 318875c6318..f372cf97acb 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -2922,9 +2922,9 @@ int select_dumpvar::send_data(List &items) else { Item_func_set_user_var *suv= new Item_func_set_user_var(mv->s, item); + suv->save_item_result(item); if (suv->fix_fields(thd, 0)) DBUG_RETURN (1); - suv->save_item_result(item); if (suv->update()) DBUG_RETURN (1); }