Commit 0a2b0725 authored by unknown's avatar unknown
Browse files

olap.result, olap.test:

  Added test cases for bug #7914.
sql_select.cc:
  Fixed bug #7914: rollup over expresssions such as sum(a)+1.


sql/sql_select.cc:
  Fixed bug #7914: rollup over expresssions such as sum(a)+1.
mysql-test/t/olap.test:
  Added test cases for bug #7914.
mysql-test/r/olap.result:
  Added test cases for bug #7914.
parent fce15210
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -405,3 +405,36 @@ a m
2	2
NULL	3
DROP TABLE t1;
CREATE TABLE t1 (a int(11));
INSERT INTO t1 VALUES (1),(2);
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
GROUP BY a;
a	SUM(a)	SUM(a)+1
1	1	2
2	2	3
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
GROUP BY a WITH ROLLUP;
a	SUM(a)	SUM(a)+1
1	1	2
2	2	3
NULL	3	4
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
GROUP BY a;
a	SUM(a)	SUM(a)+1
1	1	2
2	2	3
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
GROUP BY a WITH ROLLUP;
a	SUM(a)	SUM(a)+1
1	1	2
2	2	3
NULL	3	4
SELECT a, SUM(a), SUM(a)+1, CONCAT(SUM(a),'x'), SUM(a)+SUM(a), SUM(a)
FROM (SELECT 1 a, 2 b UNION SELECT 2,3 UNION SELECT 5,6 ) d
GROUP BY a WITH ROLLUP;
a	SUM(a)	SUM(a)+1	CONCAT(SUM(a),'x')	SUM(a)+SUM(a)	SUM(a)
1	1	2	1x	2	1
2	2	3	2x	4	2
5	5	6	5x	10	5
NULL	8	9	8x	16	8
DROP TABLE t1;
+24 −0
Original line number Diff line number Diff line
@@ -184,3 +184,27 @@ 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;

#
# Tests for bug #7914: ROLLUP over expressions on temporary table
#

CREATE TABLE t1 (a int(11));
INSERT INTO t1 VALUES (1),(2);

SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
  GROUP BY a;
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
  GROUP BY a WITH ROLLUP;

SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
  GROUP BY a;
SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
  GROUP BY a WITH ROLLUP;

SELECT a, SUM(a), SUM(a)+1, CONCAT(SUM(a),'x'), SUM(a)+SUM(a), SUM(a)
  FROM (SELECT 1 a, 2 b UNION SELECT 2,3 UNION SELECT 5,6 ) d
    GROUP BY a WITH ROLLUP;

DROP TABLE t1;
+3 −3
Original line number Diff line number Diff line
@@ -1181,7 +1181,7 @@ JOIN::exec()
    }
    curr_all_fields= &tmp_all_fields1;
    curr_fields_list= &tmp_fields_list1;
    set_items_ref_array(items1);
    curr_join->set_items_ref_array(items1);
    
    if (sort_and_group || curr_tmp_table->group)
    {
@@ -1314,7 +1314,7 @@ JOIN::exec()
      }
      curr_fields_list= &curr_join->tmp_fields_list2;
      curr_all_fields= &curr_join->tmp_all_fields2;
      set_items_ref_array(items2);
      curr_join->set_items_ref_array(items2);
      curr_join->tmp_table_param.field_count+= 
	curr_join->tmp_table_param.sum_func_count;
      curr_join->tmp_table_param.sum_func_count= 0;
@@ -1375,7 +1375,7 @@ JOIN::exec()
    }
    curr_fields_list= &tmp_fields_list3;
    curr_all_fields= &tmp_all_fields3;
    set_items_ref_array(items3);
    curr_join->set_items_ref_array(items3);

    if (curr_join->make_sum_func_list(*curr_all_fields, *curr_fields_list,
				      1) || thd->is_fatal_error)