diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 47adafa93ba..08d69e102b4 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -8127,3 +8127,20 @@ v_name v_total c 1 DROP PROCEDURE p1; DROP TABLE t1; +# +# MDEV-13346: CURSOR a query with GROUP BY using derived table +# +CREATE PROCEDURE p1() +BEGIN +DECLARE c CURSOR FOR +SELECT +IFNULL(NULL,1) AS col +FROM +( select 1 as id ) AS t +GROUP BY t.id +; +OPEN c; +END +| +CALL p1(); +DROP PROCEDURE p1; diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 3ca210d9904..eacc8cb6a1a 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -9588,3 +9588,25 @@ DELIMITER ;| CALL p1(); DROP PROCEDURE p1; DROP TABLE t1; + +--echo # +--echo # MDEV-13346: CURSOR a query with GROUP BY using derived table +--echo # + +DELIMITER |; +CREATE PROCEDURE p1() +BEGIN + DECLARE c CURSOR FOR + SELECT + IFNULL(NULL,1) AS col + FROM + ( select 1 as id ) AS t + GROUP BY t.id + ; + OPEN c; +END +| +DELIMITER ;| +CALL p1(); +DROP PROCEDURE p1; + diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ba3760dd948..ce487205218 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -16572,7 +16572,12 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List &fields, Field **tmp_from_field=from_field; while ((item=li++)) { - Item::Type type=item->type(); + Item::Type type= item->type(); + if (type == Item::COPY_STR_ITEM) + { + item= ((Item_copy *)item)->get_item(); + type= item->type(); + } if (not_all_columns) { if (item->with_sum_func && type != Item::SUM_FUNC_ITEM)