Commit de8f84ad authored by holyfoot/hf@hfmain.(none)'s avatar holyfoot/hf@hfmain.(none)
Browse files

Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  mysql.com:/home/hf/work/29717/my50-29717
parents 120866c2 0c63efca
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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');
+26 −0
Original line number Diff line number Diff line
@@ -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);
+22 −0
Original line number Diff line number Diff line
@@ -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

#
+28 −0
Original line number Diff line number Diff line
@@ -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

#
+3 −1
Original line number Diff line number Diff line
@@ -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);
@@ -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