Loading mysql-test/r/olap.result +13 −0 Original line number Diff line number Diff line Loading @@ -392,3 +392,16 @@ SELECT SQL_CALC_FOUND_ROWS a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; a SUM(b) 1 4 DROP TABLE t1; CREATE TABLE t1 (a int(11) NOT NULL); INSERT INTO t1 VALUES (1),(2); SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP; a m 1 1 2 2 NULL 3 SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2; a m 1 1 2 2 NULL 3 DROP TABLE t1; mysql-test/t/olap.test +13 −0 Original line number Diff line number Diff line Loading @@ -171,3 +171,16 @@ SELECT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; SELECT SQL_CALC_FOUND_ROWS a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; DROP TABLE t1; # # Tests for bug #9681: ROLLUP in subquery for derived table wiht # a group by field declared as NOT NULL # CREATE TABLE t1 (a int(11) NOT NULL); INSERT INTO t1 VALUES (1),(2); SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP; SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2; DROP TABLE t1; sql/sql_select.cc +13 −1 Original line number Diff line number Diff line Loading @@ -4779,7 +4779,7 @@ static Field* create_tmp_field_from_field(THD *thd, Field* org_field, item->result_field= new_field; else new_field->field_name= name; if (org_field->maybe_null()) if (org_field->maybe_null() || (item && item->maybe_null)) new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join if (org_field->type() == FIELD_TYPE_VAR_STRING) table->db_create_options|= HA_OPTION_PACK_RECORD; Loading Loading @@ -9199,7 +9199,19 @@ bool JOIN::rollup_init() for (j=0 ; j < fields_list.elements ; j++) rollup.fields[i].push_back(rollup.null_items[i]); } List_iterator_fast<Item> it(fields_list); Item *item; while ((item= it++)) { ORDER *group_tmp; for (group_tmp= group_list; group_tmp; group_tmp= group_tmp->next) { if (*group_tmp->item == item) item->maybe_null= 1; } } return 0; } Loading Loading
mysql-test/r/olap.result +13 −0 Original line number Diff line number Diff line Loading @@ -392,3 +392,16 @@ SELECT SQL_CALC_FOUND_ROWS a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; a SUM(b) 1 4 DROP TABLE t1; CREATE TABLE t1 (a int(11) NOT NULL); INSERT INTO t1 VALUES (1),(2); SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP; a m 1 1 2 2 NULL 3 SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2; a m 1 1 2 2 NULL 3 DROP TABLE t1;
mysql-test/t/olap.test +13 −0 Original line number Diff line number Diff line Loading @@ -171,3 +171,16 @@ SELECT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; SELECT SQL_CALC_FOUND_ROWS a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1; DROP TABLE t1; # # Tests for bug #9681: ROLLUP in subquery for derived table wiht # a group by field declared as NOT NULL # CREATE TABLE t1 (a int(11) NOT NULL); INSERT INTO t1 VALUES (1),(2); SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP; SELECT * FROM ( SELECT a, SUM(a) m FROM t1 GROUP BY a WITH ROLLUP ) t2; DROP TABLE t1;
sql/sql_select.cc +13 −1 Original line number Diff line number Diff line Loading @@ -4779,7 +4779,7 @@ static Field* create_tmp_field_from_field(THD *thd, Field* org_field, item->result_field= new_field; else new_field->field_name= name; if (org_field->maybe_null()) if (org_field->maybe_null() || (item && item->maybe_null)) new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join if (org_field->type() == FIELD_TYPE_VAR_STRING) table->db_create_options|= HA_OPTION_PACK_RECORD; Loading Loading @@ -9199,7 +9199,19 @@ bool JOIN::rollup_init() for (j=0 ; j < fields_list.elements ; j++) rollup.fields[i].push_back(rollup.null_items[i]); } List_iterator_fast<Item> it(fields_list); Item *item; while ((item= it++)) { ORDER *group_tmp; for (group_tmp= group_list; group_tmp; group_tmp= group_tmp->next) { if (*group_tmp->item == item) item->maybe_null= 1; } } return 0; } Loading