Loading mysql-test/r/group_by.result +17 −0 Original line number Diff line number Diff line Loading @@ -818,3 +818,20 @@ 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; mysql-test/r/insert_select.result +26 −0 Original line number Diff line number Diff line Loading @@ -690,3 +690,29 @@ CREATE TABLE t1 (a int PRIMARY KEY); INSERT INTO t1 values (1), (2); INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 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; mysql-test/t/group_by.test +23 −0 Original line number Diff line number Diff line Loading @@ -633,4 +633,27 @@ SELECT a FROM t1 ORDER BY 'a' DESC; 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 mysql-test/t/insert_select.test +28 −0 Original line number Diff line number Diff line Loading @@ -239,4 +239,32 @@ INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 1; 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 sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -777,6 +777,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 @@ -6896,7 +6897,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 @@ -818,3 +818,20 @@ 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;
mysql-test/r/insert_select.result +26 −0 Original line number Diff line number Diff line Loading @@ -690,3 +690,29 @@ CREATE TABLE t1 (a int PRIMARY KEY); INSERT INTO t1 values (1), (2); INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 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;
mysql-test/t/group_by.test +23 −0 Original line number Diff line number Diff line Loading @@ -633,4 +633,27 @@ SELECT a FROM t1 ORDER BY 'a' DESC; 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
mysql-test/t/insert_select.test +28 −0 Original line number Diff line number Diff line Loading @@ -239,4 +239,32 @@ INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 1; 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
sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -777,6 +777,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 @@ -6896,7 +6897,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