mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Fix for SQL_CALC_FOUND_ROWS in UNION's sql/sql_union.cc: Fix for SQL_CALC_FOUND_ROWS in UNION's
189 lines
10 KiB
Plaintext
189 lines
10 KiB
Plaintext
#
|
|
# Test of unions
|
|
#
|
|
|
|
drop table if exists t1,t2,t3,t4,t5,t6;
|
|
CREATE TABLE t1 (a int not null, b char (10) not null);
|
|
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c');
|
|
CREATE TABLE t2 (a int not null, b char (10) not null);
|
|
insert into t2 values (3,'c'),(4,'d'),(5,'f'),(6,'e');
|
|
|
|
select a,b from t1 union select a,b from t2;
|
|
select a,b from t1 union all select a,b from t2;
|
|
select a,b from t1 union all select a,b from t2 order by b;
|
|
select a,b from t1 union all select a,b from t2 union select 7,'g';
|
|
select 0,'#' union select a,b from t1 union all select a,b from t2 union select 7,'gg';
|
|
select a,b from t1 union select a,b from t1;
|
|
select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 group by b;
|
|
|
|
#test alternate syntax for unions
|
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 4;
|
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1);
|
|
(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
|
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
|
|
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
|
select found_rows();
|
|
select sql_calc_found_rows a,b from t1 union all select a,b from t2 limit 2;
|
|
select found_rows();
|
|
|
|
#
|
|
# Test some error conditions with UNION
|
|
#
|
|
|
|
explain select a,b from t1 union all select a,b from t2;
|
|
|
|
--error 1054
|
|
explain select xx from t1 union select 1;
|
|
explain select a,b from t1 union select 1;
|
|
explain select 1 union select a,b from t1 union select 1;
|
|
explain select a,b from t1 union select 1 limit 0;
|
|
|
|
--error 1221
|
|
select a,b from t1 into outfile 'skr' union select a,b from t2;
|
|
|
|
--error 1221
|
|
select a,b from t1 order by a union select a,b from t2;
|
|
|
|
--error 1221
|
|
insert into t3 select a from t1 order by a union select a from t2;
|
|
|
|
--error 1222
|
|
create table t3 select a,b from t1 union select a from t2;
|
|
|
|
--error 1222
|
|
select a,b from t1 union select a from t2;
|
|
|
|
--error 1222
|
|
select * from t1 union select a from t2;
|
|
|
|
--error 1222
|
|
select a from t1 union select * from t2;
|
|
|
|
--error 1234
|
|
select * from t1 union select SQL_BUFFER_RESULT * from t2;
|
|
|
|
# Test CREATE, INSERT and REPLACE
|
|
create table t3 select a,b from t1 union all select a,b from t2;
|
|
insert into t3 select a,b from t1 union all select a,b from t2;
|
|
replace into t3 select a,b as c from t1 union all select a,b from t2;
|
|
|
|
drop table t1,t2,t3;
|
|
|
|
#
|
|
# Test bug reported by joc@presence-pc.com
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
`pseudo` char(35) NOT NULL default '',
|
|
`pseudo1` char(35) NOT NULL default '',
|
|
`same` tinyint(1) unsigned NOT NULL default '1',
|
|
PRIMARY KEY (`pseudo1`),
|
|
KEY `pseudo` (`pseudo`)
|
|
) TYPE=MyISAM;
|
|
INSERT INTO t1 (pseudo,pseudo1,same) VALUES ('joce', 'testtt', 1),('joce', 'tsestset', 1),('dekad', 'joce', 1);
|
|
SELECT pseudo FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo FROM t1 WHERE pseudo='joce';
|
|
SELECT pseudo1 FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo1 FROM t1 WHERE pseudo='joce';
|
|
SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce' order by pseudo desc,pseudo1 desc;
|
|
SELECT pseudo1 FROM t1 WHERE pseudo='joce' UNION SELECT pseudo FROM t1 WHERE pseudo1='joce';
|
|
SELECT pseudo1 FROM t1 WHERE pseudo='joce' UNION ALL SELECT pseudo FROM t1 WHERE pseudo1='joce';
|
|
SELECT pseudo1 FROM t1 WHERE pseudo='joce' UNION SELECT 1;
|
|
drop table t1;
|
|
drop table if exists t1,t2;
|
|
create table t1 (a int);
|
|
create table t2 (a int);
|
|
insert into t1 values (1),(2),(3),(4),(5);
|
|
insert into t2 values (11),(12),(13),(14),(15);
|
|
(select * from t1 limit 2) union (select * from t2 limit 3) limit 4;
|
|
(select * from t1 limit 2) union (select * from t2 limit 3);
|
|
(select * from t1 limit 2) union (select * from t2 limit 20,3);
|
|
set SQL_SELECT_LIMIT=2;
|
|
(select * from t1 limit 1) union (select * from t2 limit 3);
|
|
set SQL_SELECT_LIMIT=DEFAULT;
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# Test error with left join
|
|
#
|
|
|
|
CREATE TABLE t1 (
|
|
cid smallint(5) unsigned NOT NULL default '0',
|
|
cv varchar(250) NOT NULL default '',
|
|
PRIMARY KEY (cid),
|
|
UNIQUE KEY cv (cv)
|
|
) ;
|
|
INSERT INTO t1 VALUES (8,'dummy');
|
|
CREATE TABLE t2 (
|
|
cid bigint(20) unsigned NOT NULL auto_increment,
|
|
cap varchar(255) NOT NULL default '',
|
|
PRIMARY KEY (cid),
|
|
KEY cap (cap)
|
|
) ;
|
|
CREATE TABLE t3 (
|
|
gid bigint(20) unsigned NOT NULL auto_increment,
|
|
gn varchar(255) NOT NULL default '',
|
|
must tinyint(4) default NULL,
|
|
PRIMARY KEY (gid),
|
|
KEY gn (gn)
|
|
) ;
|
|
INSERT INTO t3 VALUES (1,'V1',NULL);
|
|
CREATE TABLE t4 (
|
|
uid bigint(20) unsigned NOT NULL default '0',
|
|
gid bigint(20) unsigned default NULL,
|
|
rid bigint(20) unsigned default NULL,
|
|
cid bigint(20) unsigned default NULL,
|
|
UNIQUE KEY m (uid,gid,rid,cid),
|
|
KEY uid (uid),
|
|
KEY rid (rid),
|
|
KEY cid (cid),
|
|
KEY container (gid,rid,cid)
|
|
) ;
|
|
INSERT INTO t4 VALUES (1,1,NULL,NULL);
|
|
CREATE TABLE t5 (
|
|
rid bigint(20) unsigned NOT NULL auto_increment,
|
|
rl varchar(255) NOT NULL default '',
|
|
PRIMARY KEY (rid),
|
|
KEY rl (rl)
|
|
) ;
|
|
CREATE TABLE t6 (
|
|
uid bigint(20) unsigned NOT NULL auto_increment,
|
|
un varchar(250) NOT NULL default '',
|
|
uc smallint(5) unsigned NOT NULL default '0',
|
|
PRIMARY KEY (uid),
|
|
UNIQUE KEY nc (un,uc),
|
|
KEY un (un)
|
|
) ;
|
|
INSERT INTO t6 VALUES (1,'test',8);
|
|
|
|
SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test";
|
|
SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t3.must IS NOT NULL AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test";
|
|
(SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t3.must IS NOT NULL AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test") UNION (SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test");
|
|
|
|
drop table t1,t2,t3,t4,t5,t6;
|
|
CREATE TABLE t1 (a int not null, b char (10) not null);
|
|
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c');
|
|
CREATE TABLE t2 (a int not null, b char (10) not null);
|
|
insert into t2 values (3,'c'),(4,'d'),(5,'f'),(6,'e');
|
|
create table t3 select a,b from t1 union select a,b from t2;
|
|
create table t4 (select a,b from t1) union (select a,b from t2) limit 2;
|
|
insert into t4 select a,b from t1 union select a,b from t2;
|
|
insert into t3 (select a,b from t1) union (select a,b from t2) limit 2;
|
|
select * from t3;
|
|
select * from t4;
|
|
drop table t1,t2,t3,t4;
|
|
CREATE TABLE t1 ( `IdUser` int(11) NOT NULL default '0', `IdDirectMessage` int(11) NOT NULL default '0', `Readed` datetime default NULL, PRIMARY KEY (`IdUser`,`IdDirectMessage`), KEY `IdDirectMessage` (`IdDirectMessage`), );
|
|
CREATE TABLE t2 ( `IdDirectMessage` int(11) NOT NULL default '0', `MessageData` text NOT NULL, `DateOfMessage` datetime default NULL, PRIMARY KEY (`IdDirectMessage`) );
|
|
INSERT INTO t2 (`IdDirectMessage`, `MessageData`, `DateOfMessage`) VALUES (1,'Texto','2003-08-06 00:00:00'), (2,'Texto','2003-08-06 00:00:00'), (3,'Texto','2003-08-06 00:00:00'), (4,'Texto','2003-08-06 00:00:00'), (5,'Texto','2003-08-06 00:00:00'), (6,'Texto','2003-08-06 00:00:00'), (7,'Texto','2003-08-06 00:00:00'), (8,'Texto','2003-08-06 00:00:00'), (9,'Texto','2003-08-06 00:00:00'), (10,'Texto','2003-08-06 00:00:00'), (11,'Texto','2003-08-06 00:00:00'), (12,'Texto','2003-08-06 00:00:00'), (13,'Texto','2003-08-06 00:00:00'), (14,'Texto','2003-08-06 00:00:00'), (15,'Texto','2003-08-06 00:00:00'), (16,'Texto','2003-08-06 00:00:00'), (17,'Texto','2003-08-06 00:00:00'), (18,'Texto','2003-08-06 00:00:00'), (19,'Texto','2003-08-06 00:00:00'), (20,'Texto','2003-08-06 00:00:00'), (21,'Texto','2003-08-06 00:00:00'), (22,'Texto','2003-08-06 00:00:00');
|
|
INSERT INTO t1 (`IdUser`, `IdDirectMessage`, `Readed`) VALUES (4,1,'2003-08-07 10:10:13'), (4,2,'2003-08-07 10:10:13'), (4,3,'2003-08-07 10:10:13'), (4,4,'2003-08-07 10:10:13'), (4,5,'2003-08-07 10:10:13'), (4,6,'2003-08-07 10:10:13'), (4,7,'2003-08-07 10:10:13'), (4,8,'2003-08-07 10:10:13'), (4,9,'2003-08-07 10:10:13'), (4,10,'2003-08-07 10:10:13'), (4,11,'2003-08-07 10:10:13'), (4,12,'2003-08-07 10:10:13'), (4,13,'2003-08-07 10:10:13'), (4,14,'2003-08-07 10:10:13'), (4,15,'2003-08-07 10:10:13'), (4,16,'2003-08-07 10:10:13'), (4,17,'2003-08-07 10:10:13'), (4,18,'2003-08-07 10:10:13'), (4,19,'2003-08-07 10:10:13'), (4,20,'2003-08-07 10:10:13'), (4,21,'2003-08-06 16:51:04'), (4,22,'2003-08-06 16:51:19');
|
|
SELECT SQL_CALC_FOUND_ROWS t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND Readed Is NULL UNION SELECT t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND NOT (t1.Readed is NULL) ORDER BY DateOfMessage Limit 0,2;
|
|
SELECT FOUND_ROWS();
|
|
SELECT SQL_CALC_FOUND_ROWS t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND Readed Is NULL UNION ALL SELECT t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND NOT (t1.Readed is NULL) ORDER BY DateOfMessage Limit 0,2;
|
|
SELECT FOUND_ROWS();
|
|
SELECT SQL_CALC_FOUND_ROWS t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND Readed Is NULL limit 1 UNION SELECT t2.* FROM t2 INNER JOIN t1 ON t2.IdDirectMessage = t1.IdDirectMessage WHERE IdUser = 4 AND NOT (t1.Readed is NULL) ORDER BY DateOfMessage;
|
|
SELECT FOUND_ROWS();
|
|
drop table t2,t1;
|
|
CREATE TABLE t1 ( sid int(11) NOT NULL default '0', nazwa char(10) NOT NULL default '', PRIMARY KEY (sid) ) TYPE=MyISAM;
|
|
CREATE TABLE t2 ( id int(11) NOT NULL default '0', link int(11) default NULL, bubu char(10) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM;
|
|
INSERT INTO t2 VALUES (1,2,'keke');
|
|
SELECT bubu, nazwa, bubu FROM t2 LEFT JOIN t1 ON sid = link WHERE id=1 UNION SELECT 'bu', null, 'bu';
|
|
drop table t1,t2;
|