Loading mysql-test/r/olap.result +36 −0 Original line number Diff line number Diff line Loading @@ -271,3 +271,39 @@ i i COUNT(*) 100 NULL 2 NULL NULL 2 drop table t1,t2; CREATE TABLE user_day( user_id INT NOT NULL, date DATE NOT NULL, UNIQUE INDEX user_date (user_id, date) ); INSERT INTO user_day VALUES (1, '2004-06-06' ), (1, '2004-06-07' ), (2, '2004-06-06' ); SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day; day sample not_cancelled 2004-06-06 2 1 2004-06-07 1 0 SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day WITH ROLLUP; day sample not_cancelled 2004-06-06 2 1 2004-06-07 1 0 NULL 3 1 DROP TABLE user_day; mysql-test/t/olap.test +37 −0 Original line number Diff line number Diff line Loading @@ -88,3 +88,40 @@ INSERT INTO t2 VALUES (100),(200); SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP; SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP; drop table t1,t2; #bug #4767: ROLLUP with LEFT JOIN CREATE TABLE user_day( user_id INT NOT NULL, date DATE NOT NULL, UNIQUE INDEX user_date (user_id, date) ); INSERT INTO user_day VALUES (1, '2004-06-06' ), (1, '2004-06-07' ), (2, '2004-06-06' ); SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day; SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day WITH ROLLUP; DROP TABLE user_day; sql/item_sum.cc +3 −0 Original line number Diff line number Diff line Loading @@ -159,7 +159,10 @@ Item *Item_sum::get_tmp_table_item(THD *thd) if (!arg->const_item()) { if (arg->type() == Item::FIELD_ITEM) { arg->maybe_null= result_field_tmp->maybe_null(); ((Item_field*) arg)->field= result_field_tmp++; } else sum_item->args[i]= new Item_field(result_field_tmp++); } Loading sql/sql_select.cc +2 −0 Original line number Diff line number Diff line Loading @@ -4997,6 +4997,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, blob_count++; } ((Item_sum*) item)->args[i]= new Item_field(new_field); if (((Item_sum*) item)->arg_count == 1) ((Item_sum*) item)->result_field= new_field; } } } Loading Loading
mysql-test/r/olap.result +36 −0 Original line number Diff line number Diff line Loading @@ -271,3 +271,39 @@ i i COUNT(*) 100 NULL 2 NULL NULL 2 drop table t1,t2; CREATE TABLE user_day( user_id INT NOT NULL, date DATE NOT NULL, UNIQUE INDEX user_date (user_id, date) ); INSERT INTO user_day VALUES (1, '2004-06-06' ), (1, '2004-06-07' ), (2, '2004-06-06' ); SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day; day sample not_cancelled 2004-06-06 2 1 2004-06-07 1 0 SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day WITH ROLLUP; day sample not_cancelled 2004-06-06 2 1 2004-06-07 1 0 NULL 3 1 DROP TABLE user_day;
mysql-test/t/olap.test +37 −0 Original line number Diff line number Diff line Loading @@ -88,3 +88,40 @@ INSERT INTO t2 VALUES (100),(200); SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP; SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP; drop table t1,t2; #bug #4767: ROLLUP with LEFT JOIN CREATE TABLE user_day( user_id INT NOT NULL, date DATE NOT NULL, UNIQUE INDEX user_date (user_id, date) ); INSERT INTO user_day VALUES (1, '2004-06-06' ), (1, '2004-06-07' ), (2, '2004-06-06' ); SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day; SELECT d.date AS day, COUNT(d.user_id) as sample, COUNT(next_day.user_id) AS not_cancelled FROM user_day d LEFT JOIN user_day next_day ON next_day.user_id=d.user_id AND next_day.date= DATE_ADD( d.date, interval 1 day ) GROUP BY day WITH ROLLUP; DROP TABLE user_day;
sql/item_sum.cc +3 −0 Original line number Diff line number Diff line Loading @@ -159,7 +159,10 @@ Item *Item_sum::get_tmp_table_item(THD *thd) if (!arg->const_item()) { if (arg->type() == Item::FIELD_ITEM) { arg->maybe_null= result_field_tmp->maybe_null(); ((Item_field*) arg)->field= result_field_tmp++; } else sum_item->args[i]= new Item_field(result_field_tmp++); } Loading
sql/sql_select.cc +2 −0 Original line number Diff line number Diff line Loading @@ -4997,6 +4997,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, blob_count++; } ((Item_sum*) item)->args[i]= new Item_field(new_field); if (((Item_sum*) item)->arg_count == 1) ((Item_sum*) item)->result_field= new_field; } } } Loading