Loading mysql-test/r/group_by.result +17 −0 Original line number Diff line number Diff line Loading @@ -824,6 +824,23 @@ a 2 1 DROP TABLE t1; CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment primary key, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`,`f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; avg(t2.f1) SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; avg(t2.f1) DROP TABLE t1, t2; create table t1 (c1 char(3), c2 char(3)); create table t2 (c3 char(3), c4 char(3)); insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2'); Loading mysql-test/r/insert_select.result +26 −0 Original line number Diff line number Diff line Loading @@ -699,6 +699,32 @@ Handler_read_prev 0 Handler_read_rnd 0 Handler_read_rnd_next 1 DROP TABLE t1; CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment PRIMARY KEY, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`, `f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT COUNT(*) FROM t1; COUNT(*) 1 SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; min(t2.f1) INSERT INTO t1 (f2) SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT COUNT(*) FROM t1; COUNT(*) 1 SELECT * FROM t1; f1 f2 1 DROP TABLE t1, t2; CREATE TABLE t1 (x int, y int); CREATE TABLE t2 (z int, y int); CREATE TABLE t3 (a int, b int); Loading mysql-test/t/group_by.test +22 −0 Original line number Diff line number Diff line Loading @@ -633,6 +633,28 @@ SELECT a FROM t1 ORDER BY "a" DESC; SELECT a FROM t1 ORDER BY `a` DESC; DROP TABLE t1; # # Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself # returns empty # CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment primary key, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`,`f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; DROP TABLE t1, t2; # End of 4.1 tests # Loading mysql-test/t/insert_select.test +28 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,34 @@ show status like 'Handler_read%'; DROP TABLE t1; # # Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself returns empty # CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment PRIMARY KEY, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`, `f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT COUNT(*) FROM t1; SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; INSERT INTO t1 (f2) SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT COUNT(*) FROM t1; SELECT * FROM t1; DROP TABLE t1, t2; # End of 4.1 tests # Loading sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1121,6 +1121,7 @@ JOIN::optimize() order=0; // The output has only one row simple_order=1; select_distinct= 0; // No need in distinct for 1 row group_optimized_away= 1; } calc_group_buffer(this, group_list); Loading Loading @@ -11461,7 +11462,8 @@ end_send_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), if (!join->first_record || end_of_records || (idx=test_if_group_changed(join->group_fields)) >= 0) { if (join->first_record || (end_of_records && !join->group)) if (join->first_record || (end_of_records && !join->group && !join->group_optimized_away)) { if (join->procedure) join->procedure->end_group(); Loading Loading
mysql-test/r/group_by.result +17 −0 Original line number Diff line number Diff line Loading @@ -824,6 +824,23 @@ a 2 1 DROP TABLE t1; CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment primary key, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`,`f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; avg(t2.f1) SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; avg(t2.f1) DROP TABLE t1, t2; create table t1 (c1 char(3), c2 char(3)); create table t2 (c3 char(3), c4 char(3)); insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2'); Loading
mysql-test/r/insert_select.result +26 −0 Original line number Diff line number Diff line Loading @@ -699,6 +699,32 @@ Handler_read_prev 0 Handler_read_rnd 0 Handler_read_rnd_next 1 DROP TABLE t1; CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment PRIMARY KEY, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`, `f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT COUNT(*) FROM t1; COUNT(*) 1 SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; min(t2.f1) INSERT INTO t1 (f2) SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT COUNT(*) FROM t1; COUNT(*) 1 SELECT * FROM t1; f1 f2 1 DROP TABLE t1, t2; CREATE TABLE t1 (x int, y int); CREATE TABLE t2 (z int, y int); CREATE TABLE t3 (a int, b int); Loading
mysql-test/t/group_by.test +22 −0 Original line number Diff line number Diff line Loading @@ -633,6 +633,28 @@ SELECT a FROM t1 ORDER BY "a" DESC; SELECT a FROM t1 ORDER BY `a` DESC; DROP TABLE t1; # # Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself # returns empty # CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment primary key, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`,`f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; DROP TABLE t1, t2; # End of 4.1 tests # Loading
mysql-test/t/insert_select.test +28 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,34 @@ show status like 'Handler_read%'; DROP TABLE t1; # # Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself returns empty # CREATE TABLE t1 ( f1 int(10) unsigned NOT NULL auto_increment PRIMARY KEY, f2 varchar(100) NOT NULL default '' ); CREATE TABLE t2 ( f1 varchar(10) NOT NULL default '', f2 char(3) NOT NULL default '', PRIMARY KEY (`f1`), KEY `k1` (`f2`, `f1`) ); INSERT INTO t1 values(NULL, ''); INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT'); SELECT COUNT(*) FROM t1; SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; INSERT INTO t1 (f2) SELECT min(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1; SELECT COUNT(*) FROM t1; SELECT * FROM t1; DROP TABLE t1, t2; # End of 4.1 tests # Loading
sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1121,6 +1121,7 @@ JOIN::optimize() order=0; // The output has only one row simple_order=1; select_distinct= 0; // No need in distinct for 1 row group_optimized_away= 1; } calc_group_buffer(this, group_list); Loading Loading @@ -11461,7 +11462,8 @@ end_send_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), if (!join->first_record || end_of_records || (idx=test_if_group_changed(join->group_fields)) >= 0) { if (join->first_record || (end_of_records && !join->group)) if (join->first_record || (end_of_records && !join->group && !join->group_optimized_away)) { if (join->procedure) join->procedure->end_group(); Loading