mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
96f2e21e99
Fixed bug in SELECT DISTINCT ... ORDER BY not-used-column. Fixed bug in pthread_mutex_trylock with HPUX 11.0 Docs/manual.texi: Changelog include/my_pthread.h: Fix for pthread_mutex_trylock when used with SAFEMUTEX include/violite.h: Fixed bug in blocking handling when compiling with OPENSSL (caused hangup in client code) innobase/buf/buf0buf.c: Fixed wrong format string libmysqld/lib_sql.cc: Fixed hangup in embedded server. mysql-test/r/distinct.result: Fixed bug in SELECT DISTINCT ... ORDER BY not-used-column mysql-test/t/distinct.test: Fixed bug in SELECT DISTINCT ... ORDER BY not-used-column mysys/my_pthread.c: Cleanup of pthread_xxx rewrite code. Fixed bug in pthread_mutex_trylock with HPUX 11.0 sql/gen_lex_hash.cc: Smaller hash array sql/mysqld.cc: Fixed hangup in embedded server. sql/sql_select.cc: Fixed bug in SELECT DISTINCT ... ORDER BY not-used-column vio/vio.c: Added vio_ssl_blocking vio/viossl.c: Added vio_ssl_blocking
244 lines
7.1 KiB
Text
244 lines
7.1 KiB
Text
#
|
|
# Bug with distinct and INSERT INTO
|
|
# Bug with group by and not used fields
|
|
#
|
|
|
|
drop table if exists t1,t2,t3;
|
|
|
|
CREATE TABLE t1 (id int,facility char(20));
|
|
CREATE TABLE t2 (facility char(20));
|
|
INSERT INTO t1 VALUES (NULL,NULL);
|
|
INSERT INTO t1 VALUES (-1,'');
|
|
INSERT INTO t1 VALUES (0,'');
|
|
INSERT INTO t1 VALUES (1,'/L');
|
|
INSERT INTO t1 VALUES (2,'A01');
|
|
INSERT INTO t1 VALUES (3,'ANC');
|
|
INSERT INTO t1 VALUES (4,'F01');
|
|
INSERT INTO t1 VALUES (5,'FBX');
|
|
INSERT INTO t1 VALUES (6,'MT');
|
|
INSERT INTO t1 VALUES (7,'P');
|
|
INSERT INTO t1 VALUES (8,'RV');
|
|
INSERT INTO t1 VALUES (9,'SRV');
|
|
INSERT INTO t1 VALUES (10,'VMT');
|
|
INSERT INTO t2 SELECT DISTINCT FACILITY FROM t1;
|
|
|
|
select id from t1 group by id;
|
|
select * from t1 order by id;
|
|
select id-5,facility from t1 order by "id-5";
|
|
select id,concat(facility) from t1 group by id ;
|
|
select id+0 as a,max(id),concat(facility) as b from t1 group by a order by b desc,a;
|
|
select id >= 0 and id <= 5 as grp,count(*) from t1 group by grp;
|
|
|
|
SELECT DISTINCT FACILITY FROM t1;
|
|
SELECT FACILITY FROM t2;
|
|
SELECT count(*) from t1,t2 where t1.facility=t2.facility;
|
|
select count(facility) from t1;
|
|
select count(*) from t1;
|
|
select count(*) from t1 where facility IS NULL;
|
|
select count(*) from t1 where facility = NULL;
|
|
select count(*) from t1 where facility IS NOT NULL;
|
|
select count(*) from t1 where id IS NULL;
|
|
select count(*) from t1 where id IS NOT NULL;
|
|
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# Problem with distinct without results
|
|
#
|
|
CREATE TABLE t1 (UserId int(11) DEFAULT '0' NOT NULL);
|
|
INSERT INTO t1 VALUES (20);
|
|
INSERT INTO t1 VALUES (27);
|
|
|
|
SELECT UserId FROM t1 WHERE Userid=22;
|
|
SELECT UserId FROM t1 WHERE UserId=22 group by Userid;
|
|
SELECT DISTINCT UserId FROM t1 WHERE UserId=22 group by Userid;
|
|
SELECT DISTINCT UserId FROM t1 WHERE UserId=22;
|
|
drop table t1;
|
|
|
|
#
|
|
# Test of distinct
|
|
#
|
|
|
|
CREATE TABLE t1 (a int(10) unsigned not null primary key,b int(10) unsigned);
|
|
INSERT INTO t1 VALUES (1,1),(2,1);
|
|
CREATE TABLE t2 (a int(10) unsigned not null, key (A));
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
CREATE TABLE t3 (a int(10) unsigned, key(A), b text);
|
|
INSERT INTO t3 VALUES (1,'1'),(2,'2');
|
|
SELECT DISTINCT t3.b FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
|
|
INSERT INTO t2 values (1),(2),(3);
|
|
INSERT INTO t3 VALUES (1,'1'),(2,'2'),(1,'1'),(2,'2');
|
|
explain SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
|
|
SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
|
|
|
|
# Create a lot of data into t3;
|
|
create temporary table 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;
|
|
|
|
explain select distinct t1.a from t1,t3 where t1.a=t3.a;
|
|
#flush status;
|
|
select distinct t1.a from t1,t3 where t1.a=t3.a;
|
|
#show status like 'Handler%';
|
|
#flush status;
|
|
select distinct 1 from t1,t3 where t1.a=t3.a;
|
|
#show status like 'Handler%';
|
|
drop table t1,t2,t3,t4;
|
|
|
|
CREATE TABLE t1 (name varchar(255));
|
|
INSERT INTO t1 VALUES ('aa'),('ab'),('ac'),('ad'),('ae');
|
|
SELECT DISTINCT * FROM t1 LIMIT 2;
|
|
SELECT DISTINCT name FROM t1 LIMIT 2;
|
|
SELECT DISTINCT 1 FROM t1 LIMIT 2;
|
|
drop table t1;
|
|
|
|
CREATE TABLE t1 (
|
|
ID int(11) NOT NULL auto_increment,
|
|
NAME varchar(75) DEFAULT '' NOT NULL,
|
|
LINK_ID int(11) DEFAULT '0' NOT NULL,
|
|
PRIMARY KEY (ID),
|
|
KEY NAME (NAME),
|
|
KEY LINK_ID (LINK_ID)
|
|
);
|
|
|
|
INSERT INTO t1 (ID, NAME, LINK_ID) VALUES (1,'Mike',0),(2,'Jack',0),(3,'Bill',0);
|
|
|
|
CREATE TABLE t2 (
|
|
ID int(11) NOT NULL auto_increment,
|
|
NAME varchar(150) DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (ID),
|
|
KEY NAME (NAME)
|
|
);
|
|
|
|
SELECT DISTINCT
|
|
t2.id AS key_link_id,
|
|
t2.name AS link
|
|
FROM t1
|
|
LEFT JOIN t2 ON t1.link_id=t2.id
|
|
GROUP BY t1.id
|
|
ORDER BY link;
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# Problem with table dependencies
|
|
#
|
|
|
|
create table t1 (
|
|
id int not null,
|
|
name tinytext not null,
|
|
unique (id)
|
|
);
|
|
create table t2 (
|
|
id int not null,
|
|
idx int not null,
|
|
unique (id, idx)
|
|
);
|
|
create table t3 (
|
|
id int not null,
|
|
idx int not null,
|
|
unique (id, idx)
|
|
);
|
|
insert into t1 values (1,'yes'), (2,'no');
|
|
insert into t2 values (1,1);
|
|
insert into t3 values (1,1);
|
|
EXPLAIN
|
|
SELECT DISTINCT
|
|
t1.id
|
|
from
|
|
t1
|
|
straight_join
|
|
t2
|
|
straight_join
|
|
t3
|
|
straight_join
|
|
t1 as j_lj_t2 left join t2 as t2_lj
|
|
on j_lj_t2.id=t2_lj.id
|
|
straight_join
|
|
t1 as j_lj_t3 left join t3 as t3_lj
|
|
on j_lj_t3.id=t3_lj.id
|
|
WHERE
|
|
((t1.id=j_lj_t2.id AND t2_lj.id IS NULL) OR (t1.id=t2.id AND t2.idx=2))
|
|
AND ((t1.id=j_lj_t3.id AND t3_lj.id IS NULL) OR (t1.id=t3.id AND t3.idx=2));
|
|
SELECT DISTINCT
|
|
t1.id
|
|
from
|
|
t1
|
|
straight_join
|
|
t2
|
|
straight_join
|
|
t3
|
|
straight_join
|
|
t1 as j_lj_t2 left join t2 as t2_lj
|
|
on j_lj_t2.id=t2_lj.id
|
|
straight_join
|
|
t1 as j_lj_t3 left join t3 as t3_lj
|
|
on j_lj_t3.id=t3_lj.id
|
|
WHERE
|
|
((t1.id=j_lj_t2.id AND t2_lj.id IS NULL) OR (t1.id=t2.id AND t2.idx=2))
|
|
AND ((t1.id=j_lj_t3.id AND t3_lj.id IS NULL) OR (t1.id=t3.id AND t3.idx=2));
|
|
drop table t1,t2,t3;
|
|
|
|
#
|
|
# Test using DISTINCT on a function that contains a group function
|
|
# This also test the case when one doesn't use all fields in GROUP BY.
|
|
#
|
|
|
|
drop table if exists t1;
|
|
create table t1 (a int not null, b int not null, t time);
|
|
insert into t1 values (1,1,"00:06:15"),(1,2,"00:06:15"),(1,2,"00:30:15"),(1,3,"00:06:15"),(1,3,"00:30:15");
|
|
select a,sec_to_time(sum(time_to_sec(t))) from t1 group by a,b;
|
|
select distinct a,sec_to_time(sum(time_to_sec(t))) from t1 group by a,b;
|
|
create table t2 (a int not null primary key, b int);
|
|
insert into t2 values (1,1),(2,2),(3,3);
|
|
select t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
|
select distinct t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# Test problem with DISTINCT and HAVING
|
|
#
|
|
create table t1 (a int not null,b char(5), c text);
|
|
insert into t1 (a) values (1),(2),(3),(4),(1),(2),(3),(4);
|
|
select distinct a from t1 group by b,a having a > 2 order by a desc;
|
|
select distinct a,c from t1 group by b,c,a having a > 2 order by a desc;
|
|
drop table t1;
|
|
|
|
#
|
|
# Test problem with DISTINCT and ORDER BY DESC
|
|
#
|
|
|
|
create table t1 (a char(1), key(a)) type=myisam;
|
|
insert into t1 values('1'),('1');
|
|
select * from t1 where a >= '1';
|
|
select distinct a from t1 order by a desc;
|
|
select distinct a from t1 where a >= '1' order by a desc;
|
|
drop table t1;
|
|
|
|
#
|
|
# Test when using a not previously used column in ORDER BY
|
|
#
|
|
|
|
CREATE TABLE t1 (email varchar(50), infoID BIGINT, dateentered
|
|
DATETIME);
|
|
CREATE TABLE t2 (infoID BIGINT, shipcode varchar(10));
|
|
|
|
INSERT INTO t1 (email, infoID, dateentered) VALUES
|
|
('test1@testdomain.com', 1, '2002-07-30 22:56:38'),
|
|
('test1@testdomain.com', 1, '2002-07-27 22:58:16'),
|
|
('test2@testdomain.com', 1, '2002-06-19 15:22:19'),
|
|
('test2@testdomain.com', 2, '2002-06-18 14:23:47'),
|
|
('test3@testdomain.com', 1, '2002-05-19 22:17:32');
|
|
|
|
INSERT INTO t2(infoID, shipcode) VALUES
|
|
(1, 'Z001'),
|
|
(2, 'R002');
|
|
|
|
SELECT DISTINCTROW email, shipcode FROM t1, t2 WHERE t1.infoID=t2.infoID;
|
|
SELECT DISTINCTROW email FROM t1 ORDER BY dateentered DESC;
|
|
SELECT DISTINCTROW email, shipcode FROM t1, t2 WHERE t1.infoID=t2.infoID ORDER BY dateentered DESC;
|
|
drop table t1,t2;
|