Loading mysql-test/r/func_gconcat.result +31 −0 Original line number Diff line number Diff line Loading @@ -524,3 +524,34 @@ group_concat(a) ABW ABW drop table t1; CREATE TABLE t1 ( aID smallint(5) unsigned NOT NULL auto_increment, sometitle varchar(255) NOT NULL default '', bID smallint(5) unsigned NOT NULL, PRIMARY KEY (aID), UNIQUE KEY sometitle (sometitle) ); INSERT INTO t1 SET sometitle = 'title1', bID = 1; INSERT INTO t1 SET sometitle = 'title2', bID = 1; CREATE TABLE t2 ( bID smallint(5) unsigned NOT NULL auto_increment, somename varchar(255) NOT NULL default '', PRIMARY KEY (bID), UNIQUE KEY somename (somename) ); INSERT INTO t2 SET somename = 'test'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test INSERT INTO t2 SET somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test DELETE FROM t2 WHERE somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test DROP TABLE t1,t2; mysql-test/r/null_key.result +60 −0 Original line number Diff line number Diff line Loading @@ -369,3 +369,63 @@ select * from t1; id id2 1 1 drop table t1; CREATE TABLE t1 (a int); CREATE TABLE t2 (a int, b int, INDEX idx(a)); CREATE TABLE t3 (b int, INDEX idx(b)); CREATE TABLE t4 (b int, INDEX idx(b)); INSERT INTO t1 VALUES (1), (2), (3), (4); INSERT INTO t2 VALUES (1, 1), (3, 1); INSERT INTO t3 VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t3 VALUES (2), (3); ANALYZE table t1, t2, t3; Table Op Msg_type Msg_text test.t1 analyze status OK test.t2 analyze status OK test.t3 analyze status OK SELECT COUNT(*) FROM t3; COUNT(*) 15972 EXPLAIN SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 1 SIMPLE t2 ref idx idx 5 test.t1.a 1 1 SIMPLE t3 ref idx idx 5 test.t2.b 1 Using index FLUSH STATUS ; SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; a a b b 1 1 1 NULL 2 NULL NULL NULL 3 3 1 NULL 4 NULL NULL NULL SHOW STATUS LIKE "handler_read%"; Variable_name Value Handler_read_first 0 Handler_read_key 6 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 Handler_read_rnd_next 5 SELECT FOUND_ROWS(); FOUND_ROWS() 4 DROP TABLE t1,t2,t3,t4; mysql-test/t/func_gconcat.test +32 −7 Original line number Diff line number Diff line Loading @@ -310,12 +310,37 @@ select a, group_concat(b order by b) from t1 group by a with rollup; select a, group_concat(distinct b order by b) from t1 group by a with rollup; drop table t1; # End of 4.1 tests # # Bug #6475 # Bug #12095: GROUP_CONCAT for one row table # create table t1 (a char(3), b char(20), primary key (a, b)); insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English'); select group_concat(a) from t1 group by b; drop table t1; CREATE TABLE t1 ( aID smallint(5) unsigned NOT NULL auto_increment, sometitle varchar(255) NOT NULL default '', bID smallint(5) unsigned NOT NULL, PRIMARY KEY (aID), UNIQUE KEY sometitle (sometitle) ); INSERT INTO t1 SET sometitle = 'title1', bID = 1; INSERT INTO t1 SET sometitle = 'title2', bID = 1; CREATE TABLE t2 ( bID smallint(5) unsigned NOT NULL auto_increment, somename varchar(255) NOT NULL default '', PRIMARY KEY (bID), UNIQUE KEY somename (somename) ); INSERT INTO t2 SET somename = 'test'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; INSERT INTO t2 SET somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; DELETE FROM t2 WHERE somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; DROP TABLE t1,t2; # End of 4.1 tests mysql-test/t/null_key.test +45 −0 Original line number Diff line number Diff line Loading @@ -194,4 +194,49 @@ delete from t1 where id <=> NULL; select * from t1; drop table t1; # # Test for bug #12144: optimizations for key access with null keys # used for outer joins # CREATE TABLE t1 (a int); CREATE TABLE t2 (a int, b int, INDEX idx(a)); CREATE TABLE t3 (b int, INDEX idx(b)); CREATE TABLE t4 (b int, INDEX idx(b)); INSERT INTO t1 VALUES (1), (2), (3), (4); INSERT INTO t2 VALUES (1, 1), (3, 1); INSERT INTO t3 VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t3 VALUES (2), (3); ANALYZE table t1, t2, t3; SELECT COUNT(*) FROM t3; EXPLAIN SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; FLUSH STATUS ; SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; SHOW STATUS LIKE "handler_read%"; SELECT FOUND_ROWS(); DROP TABLE t1,t2,t3,t4; # End of 4.1 tests sql/sql_class.h +2 −1 Original line number Diff line number Diff line Loading @@ -1705,13 +1705,14 @@ class TMP_TABLE_PARAM :public Sql_alloc bool using_indirect_summary_function; /* If >0 convert all blob fields to varchar(convert_blob_length) */ uint convert_blob_length; bool need_const; /* <=> const items are saved in tmp table */ CHARSET_INFO *table_charset; bool schema_table; TMP_TABLE_PARAM() :copy_field(0), group_parts(0), group_length(0), group_null_parts(0), convert_blob_length(0), schema_table(0) need_const(0), schema_table(0) {} ~TMP_TABLE_PARAM() { Loading Loading
mysql-test/r/func_gconcat.result +31 −0 Original line number Diff line number Diff line Loading @@ -524,3 +524,34 @@ group_concat(a) ABW ABW drop table t1; CREATE TABLE t1 ( aID smallint(5) unsigned NOT NULL auto_increment, sometitle varchar(255) NOT NULL default '', bID smallint(5) unsigned NOT NULL, PRIMARY KEY (aID), UNIQUE KEY sometitle (sometitle) ); INSERT INTO t1 SET sometitle = 'title1', bID = 1; INSERT INTO t1 SET sometitle = 'title2', bID = 1; CREATE TABLE t2 ( bID smallint(5) unsigned NOT NULL auto_increment, somename varchar(255) NOT NULL default '', PRIMARY KEY (bID), UNIQUE KEY somename (somename) ); INSERT INTO t2 SET somename = 'test'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test INSERT INTO t2 SET somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test DELETE FROM t2 WHERE somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; COUNT(*) GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') 2 test DROP TABLE t1,t2;
mysql-test/r/null_key.result +60 −0 Original line number Diff line number Diff line Loading @@ -369,3 +369,63 @@ select * from t1; id id2 1 1 drop table t1; CREATE TABLE t1 (a int); CREATE TABLE t2 (a int, b int, INDEX idx(a)); CREATE TABLE t3 (b int, INDEX idx(b)); CREATE TABLE t4 (b int, INDEX idx(b)); INSERT INTO t1 VALUES (1), (2), (3), (4); INSERT INTO t2 VALUES (1, 1), (3, 1); INSERT INTO t3 VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t3 VALUES (2), (3); ANALYZE table t1, t2, t3; Table Op Msg_type Msg_text test.t1 analyze status OK test.t2 analyze status OK test.t3 analyze status OK SELECT COUNT(*) FROM t3; COUNT(*) 15972 EXPLAIN SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 1 SIMPLE t2 ref idx idx 5 test.t1.a 1 1 SIMPLE t3 ref idx idx 5 test.t2.b 1 Using index FLUSH STATUS ; SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; a a b b 1 1 1 NULL 2 NULL NULL NULL 3 3 1 NULL 4 NULL NULL NULL SHOW STATUS LIKE "handler_read%"; Variable_name Value Handler_read_first 0 Handler_read_key 6 Handler_read_next 2 Handler_read_prev 0 Handler_read_rnd 0 Handler_read_rnd_next 5 SELECT FOUND_ROWS(); FOUND_ROWS() 4 DROP TABLE t1,t2,t3,t4;
mysql-test/t/func_gconcat.test +32 −7 Original line number Diff line number Diff line Loading @@ -310,12 +310,37 @@ select a, group_concat(b order by b) from t1 group by a with rollup; select a, group_concat(distinct b order by b) from t1 group by a with rollup; drop table t1; # End of 4.1 tests # # Bug #6475 # Bug #12095: GROUP_CONCAT for one row table # create table t1 (a char(3), b char(20), primary key (a, b)); insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English'); select group_concat(a) from t1 group by b; drop table t1; CREATE TABLE t1 ( aID smallint(5) unsigned NOT NULL auto_increment, sometitle varchar(255) NOT NULL default '', bID smallint(5) unsigned NOT NULL, PRIMARY KEY (aID), UNIQUE KEY sometitle (sometitle) ); INSERT INTO t1 SET sometitle = 'title1', bID = 1; INSERT INTO t1 SET sometitle = 'title2', bID = 1; CREATE TABLE t2 ( bID smallint(5) unsigned NOT NULL auto_increment, somename varchar(255) NOT NULL default '', PRIMARY KEY (bID), UNIQUE KEY somename (somename) ); INSERT INTO t2 SET somename = 'test'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; INSERT INTO t2 SET somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; DELETE FROM t2 WHERE somename = 'test2'; SELECT COUNT(*), GROUP_CONCAT(DISTINCT t2.somename SEPARATOR ' |') FROM t1 JOIN t2 ON t1.bID = t2.bID; DROP TABLE t1,t2; # End of 4.1 tests
mysql-test/t/null_key.test +45 −0 Original line number Diff line number Diff line Loading @@ -194,4 +194,49 @@ delete from t1 where id <=> NULL; select * from t1; drop table t1; # # Test for bug #12144: optimizations for key access with null keys # used for outer joins # CREATE TABLE t1 (a int); CREATE TABLE t2 (a int, b int, INDEX idx(a)); CREATE TABLE t3 (b int, INDEX idx(b)); CREATE TABLE t4 (b int, INDEX idx(b)); INSERT INTO t1 VALUES (1), (2), (3), (4); INSERT INTO t2 VALUES (1, 1), (3, 1); INSERT INTO t3 VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t4 SELECT * FROM t3; INSERT INTO t3 SELECT * FROM t4; INSERT INTO t3 VALUES (2), (3); ANALYZE table t1, t2, t3; SELECT COUNT(*) FROM t3; EXPLAIN SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; FLUSH STATUS ; SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b; SHOW STATUS LIKE "handler_read%"; SELECT FOUND_ROWS(); DROP TABLE t1,t2,t3,t4; # End of 4.1 tests
sql/sql_class.h +2 −1 Original line number Diff line number Diff line Loading @@ -1705,13 +1705,14 @@ class TMP_TABLE_PARAM :public Sql_alloc bool using_indirect_summary_function; /* If >0 convert all blob fields to varchar(convert_blob_length) */ uint convert_blob_length; bool need_const; /* <=> const items are saved in tmp table */ CHARSET_INFO *table_charset; bool schema_table; TMP_TABLE_PARAM() :copy_field(0), group_parts(0), group_length(0), group_null_parts(0), convert_blob_length(0), schema_table(0) need_const(0), schema_table(0) {} ~TMP_TABLE_PARAM() { Loading