union.test 39.1 KB
Newer Older
unknown's avatar
unknown committed
1 2 3 4
#
# Test of unions
#

5
--disable_warnings
6
drop table if exists t1,t2,t3,t4,t5,t6;
7 8
--enable_warnings

unknown's avatar
unknown committed
9 10 11 12 13
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');

14
select a,b from t1 union distinct select a,b from t2;
unknown's avatar
unknown committed
15 16 17 18 19 20 21
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;

unknown's avatar
unknown committed
22
# Test alternate syntax for unions 
23
(select a,b from t1 limit 2)  union all (select a,b from t2 order by a) limit 4;
unknown's avatar
unknown committed
24 25
(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;
unknown's avatar
unknown committed
26
--error 1250
27
(select a,b from t1 limit 2)  union all (select a,b from t2 order by a limit 1) order by t1.b;
unknown's avatar
unknown committed
28
explain extended (select a,b from t1 limit 2)  union all (select a,b from t2 order by a limit 1) order by b desc;
29 30
(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();
31 32
select sql_calc_found_rows  a,b from t1  union all select a,b from t2 limit 2;
select found_rows();
33 34

#
35
# Test some error conditions with UNION
36 37
#

unknown's avatar
unknown committed
38 39
explain select a,b from t1 union all select a,b from t2;

unknown's avatar
unknown committed
40 41
--error  1054
explain select xx from t1 union select 1;
42
--error 1222
unknown's avatar
unknown committed
43
explain select a,b from t1 union select 1;
44
--error 1222
unknown's avatar
unknown committed
45
explain select 1 union select a,b from t1 union select 1;
46
--error 1222
unknown's avatar
unknown committed
47 48
explain select a,b from t1 union select 1 limit 0;

unknown's avatar
unknown committed
49
--error 1221
unknown's avatar
unknown committed
50
select a,b from t1 into outfile 'skr' union select a,b from t2;
51

unknown's avatar
unknown committed
52
--error 1221
53 54
select a,b from t1 order by a union select a,b from t2;

unknown's avatar
unknown committed
55
--error 1221
56 57
insert into t3 select a from t1 order by a union select a from t2;

unknown's avatar
unknown committed
58
--error 1222
unknown's avatar
unknown committed
59 60
create table t3 select a,b from t1 union select a from t2;

unknown's avatar
unknown committed
61
--error 1222
unknown's avatar
unknown committed
62
select a,b from t1 union select a from t2;
63

unknown's avatar
unknown committed
64
--error 1222
unknown's avatar
unknown committed
65 66
select * from t1 union select a from t2;

unknown's avatar
unknown committed
67
--error 1222
unknown's avatar
unknown committed
68 69
select a from t1 union select * from t2;

70 71 72
--error 1234
select * from t1 union select SQL_BUFFER_RESULT * from t2;

73
# Test CREATE, INSERT and REPLACE
unknown's avatar
unknown committed
74 75
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;
76
# PS can't handle REPLACE ... SELECT
77 78
replace into t3 select a,b as c from t1 union all select a,b from t2;

unknown's avatar
unknown committed
79
drop table t1,t2,t3;
unknown's avatar
unknown committed
80

unknown's avatar
unknown committed
81 82 83 84 85 86 87 88 89 90 91 92 93
#
# Test some unions without tables
#
--error 1096
select * union select 1;
select 1 as a,(select a union select a);
--error 1054
(select 1) union (select 2) order by 0;
SELECT @a:=1 UNION SELECT @a:=@a+1;
--error 1054
(SELECT 1) UNION (SELECT 2) ORDER BY (SELECT a);
(SELECT 1,3) UNION (SELECT 2,1) ORDER BY (SELECT 2);

94 95 96 97 98 99 100 101 102 103 104 105 106 107

#
# Bug#32858: Erro: "Incorrect usage of UNION and INTO" does not take subselects 
# into account
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1);

SELECT a INTO @v FROM (
  SELECT a FROM t1
  UNION
  SELECT a FROM t1
) alias;

108 109 110 111 112 113
--let $outfile = $MYSQLTEST_VARDIR/tmp/union.out.file
--error 0,1
--remove_file $outfile

--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a INTO OUTFILE '$outfile' FROM (
114 115 116 117
  SELECT a FROM t1
  UNION
  SELECT a FROM t1 WHERE 0
) alias;
118
--remove_file $outfile
119

120 121
--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a INTO DUMPFILE '$outfile' FROM (
122 123 124 125
  SELECT a FROM t1
  UNION
  SELECT a FROM t1 WHERE 0
) alias;
126
--remove_file $outfile
127 128 129 130 131 132 133 134 135 136

#
# INTO will not be allowed in subqueries in version 5.1 and above.
#
SELECT a FROM (
  SELECT a FROM t1
  UNION
  SELECT a INTO @v FROM t1
) alias;

137 138
--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a FROM (
139 140
  SELECT a FROM t1
  UNION
141
  SELECT a INTO OUTFILE '$outfile' FROM t1
142
) alias;
143
--remove_file $outfile
144

145 146
--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a FROM (
147 148
  SELECT a FROM t1
  UNION
149
  SELECT a INTO DUMPFILE '$outfile' FROM t1
150
) alias;
151
--remove_file $outfile
152 153

SELECT a FROM t1 UNION SELECT a INTO @v FROM t1;
154 155 156 157 158 159 160 161 162

--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a FROM t1 UNION SELECT a INTO OUTFILE '$outfile' FROM t1;
--remove_file $outfile

--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
eval SELECT a FROM t1 UNION SELECT a INTO DUMPFILE '$outfile' FROM t1;
--remove_file $outfile

163 164
--error ER_WRONG_USAGE
SELECT a INTO @v FROM t1 UNION SELECT a FROM t1;
165 166

--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
167
--error ER_WRONG_USAGE
168 169 170
eval SELECT a INTO OUTFILE '$outfile' FROM t1 UNION SELECT a FROM t1;

--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
171
--error ER_WRONG_USAGE
172
eval SELECT a INTO DUMPFILE '$outfile' FROM t1 UNION SELECT a FROM t1;
173 174 175

DROP TABLE t1;

unknown's avatar
unknown committed
176 177 178 179 180 181 182 183 184 185
#
# 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`)
unknown's avatar
unknown committed
186
) ENGINE=MyISAM;
unknown's avatar
unknown committed
187 188
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';
189
SELECT pseudo1 FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo1 FROM t1 WHERE pseudo='joce';
190
SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce' order by pseudo desc,pseudo1 desc;
191 192 193
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;
unknown's avatar
unknown committed
194
drop table t1;
195

196 197 198 199 200 201
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);
202 203
(select * from t1 limit 2) union (select * from t2 limit 20,3);
set SQL_SELECT_LIMIT=2;
unknown's avatar
unknown committed
204
(select * from t1 limit 1) union (select * from t2 limit 3);
205
set SQL_SELECT_LIMIT=DEFAULT;
206
drop table t1,t2;
unknown's avatar
unknown committed
207

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
#
# 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;
unknown's avatar
unknown committed
265

unknown's avatar
unknown committed
266 267 268 269
#
# Test insert ... SELECT with UNION
#

270 271 272 273 274
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;
unknown's avatar
unknown committed
275
create table t4 (select a,b from t1) union (select a,b from t2) limit 2;
276
insert into  t4 select a,b from t1 union select a,b from t2;
unknown's avatar
unknown committed
277
insert into  t3 (select a,b from t1) union (select a,b from t2) limit 2;
278 279 280
select * from t3;
select * from t4;
drop table t1,t2,t3,t4;
unknown's avatar
unknown committed
281

unknown's avatar
unknown committed
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
#
# Test of SQL_CALC_FOUND_ROW handling
#
create table t1 (a int);
insert into t1 values (1),(2),(3);
create table t2 (a int);
insert into t2 values (3),(4),(5);

# Test global limits
(SELECT SQL_CALC_FOUND_ROWS * FROM t1) UNION all (SELECT * FROM t2) LIMIT 1;
select found_rows();
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION all (SELECT * FROM t2) LIMIT 2;
select found_rows();

# Test cases where found_rows() should return number of returned rows
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION all (SELECT * FROM t2);
select found_rows();
(SELECT SQL_CALC_FOUND_ROWS * FROM t1) UNION all (SELECT * FROM t2 LIMIT 1);
select found_rows();
unknown's avatar
unknown committed
301
# This used to work in 4.0 but not anymore in 4.1
unknown's avatar
unknown committed
302
--error 1064
unknown's avatar
unknown committed
303
(SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1) UNION SELECT * FROM t2 LIMIT 1;
unknown's avatar
unknown committed
304
#select found_rows();
unknown's avatar
unknown committed
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

# In these case found_rows() should work
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION all SELECT * FROM t2 LIMIT 2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 UNION all SELECT * FROM t2 LIMIT 2;
select found_rows();

# The following examples will not be exact
SELECT SQL_CALC_FOUND_ROWS * FROM t1 UNION SELECT * FROM t2 LIMIT 2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 UNION SELECT * FROM t2 LIMIT 100;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 100 UNION SELECT * FROM t2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION SELECT * FROM t2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 1 UNION SELECT * FROM t2 LIMIT 2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 UNION SELECT * FROM t2 LIMIT 2,2;
select found_rows();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 limit 2,2 UNION SELECT * FROM t2;
select found_rows();

# Test some limits with ORDER BY
SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY a desc LIMIT 1;
(SELECT * FROM t1 ORDER by a) UNION ALL (SELECT * FROM t2 ORDER BY a) ORDER BY A desc LIMIT 4;

# Wrong usage
--error 1234
(SELECT * FROM t1) UNION all (SELECT SQL_CALC_FOUND_ROWS * FROM t2) LIMIT 1;

336
create temporary table t1 select a from t1 union select a from t2;
unknown's avatar
unknown committed
337
drop temporary table t1;
338 339
--error 1093
create table t1 select a from t1 union select a from t2;
unknown's avatar
unknown committed
340
--error 1054
unknown's avatar
unknown committed
341
select a from t1 union select a from t2 order by t2.a;
unknown's avatar
unknown committed
342
drop table t1,t2;
unknown's avatar
unknown committed
343

344 345 346 347 348 349
#
# Problem with alias '*' (BUG #1249)
#

select length(version()) > 1 as `*` UNION select 2;

350 351 352 353 354 355 356 357
#
# Bug #4980: problem with explain
#

create table t1 (a int);
insert into t1 values (0), (3), (1), (2);
explain (select * from t1) union (select * from t1) order by a;
drop table t1;
unknown's avatar
unknown committed
358 359 360
#
# Test for another bug with UNION and LEFT JOIN
#
unknown's avatar
unknown committed
361
CREATE TABLE t1 (  id int(3) unsigned default '0') ENGINE=MyISAM;
362
INSERT INTO t1 (id) VALUES("1");
unknown's avatar
unknown committed
363
CREATE TABLE t2 ( id int(3) unsigned default '0',  id_master int(5) default '0',  text1 varchar(5) default NULL,  text2 varchar(5) default NULL) ENGINE=MyISAM;
364 365 366 367 368 369 370 371 372 373 374
INSERT INTO t2 (id, id_master, text1, text2) VALUES("1", "1",
"foo1", "bar1");
INSERT INTO t2 (id, id_master, text1, text2) VALUES("2", "1",
"foo2", "bar2");
INSERT INTO t2 (id, id_master, text1, text2) VALUES("3", "1", NULL,
"bar3");
INSERT INTO t2 (id, id_master, text1, text2) VALUES("4", "1",
"foo4", "bar4");
SELECT 1 AS id_master, 1 AS id, NULL AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
SELECT 1 AS id_master, 1 AS id, 'ABCDE' AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
drop table if exists t1,t2;
unknown's avatar
unknown committed
375 376 377 378 379 380 381 382 383

#
# Test of bug when using the same table multiple times
#
create table t1 (a int not null primary key auto_increment, b int, key(b));
create table t2 (a int not null primary key auto_increment, b int);
insert into t1 (b) values (1),(2),(2),(3);
insert into t2 (b) values (10),(11),(12),(13);

unknown's avatar
unknown committed
384
explain extended (select * from t1 where a=1) union (select * from t2 where a=1);
unknown's avatar
unknown committed
385 386 387 388
(select * from t1 where a=5) union (select * from t2 where a=1);
(select * from t1 where a=5 and a=6) union (select * from t2 where a=1);
(select t1.a,t1.b from t1,t2 where t1.a=5) union (select * from t2 where a=1);
(select * from t1 where a=1) union (select t1.a,t2.a from t1,t2 where t1.a=t2.a);
389
explain (select * from t1 where a=1 and b=10) union (select straight_join t1.a,t2.a from t1,t2 where t1.a=t2.a);
unknown's avatar
unknown committed
390 391
explain (select * from t1 where a=1) union (select * from t1 where b=1);
drop table t1,t2;
unknown's avatar
unknown committed
392 393 394 395 396 397 398 399 400
create table t1 (   id int not null auto_increment, primary key (id)   ,user_name text );
create table t2 (    id int not null auto_increment, primary key (id)   ,group_name text );
create table t3 (    id int not null auto_increment, primary key (id)   ,user_id int   ,index user_idx (user_id)   ,foreign key (user_id) references users(id)   ,group_id int   ,index group_idx (group_id)   ,foreign key (group_id) references groups(id) );
insert into t1 (user_name) values ('Tester');
insert into t2 (group_name) values ('Group A');
insert into t2 (group_name) values ('Group B');
insert into t3 (user_id, group_id) values (1,1);
select 1 'is_in_group', a.user_name, c.group_name, b.id from t1 a, t3 b, t2 c where a.id = b.user_id and b.group_id = c.id UNION  select 0 'is_in_group', a.user_name, c.group_name, null from t1 a, t2 c;
drop table t1, t2, t3;
401 402 403 404 405 406 407 408 409 410

#
# fix_fields problem
#
create table t1 (mat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, matintnum CHAR(6) NOT NULL, test MEDIUMINT UNSIGNED NULL);
create table t2 (mat_id MEDIUMINT UNSIGNED NOT NULL, pla_id MEDIUMINT UNSIGNED NOT NULL);
insert into t1 values (NULL, 'a', 1), (NULL, 'b', 2), (NULL, 'c', 3), (NULL, 'd', 4), (NULL, 'e', 5), (NULL, 'f', 6), (NULL, 'g', 7), (NULL, 'h', 8), (NULL, 'i', 9);
insert into t2 values (1, 100), (1, 101), (1, 102), (2, 100), (2, 103), (2, 104), (3, 101), (3, 102), (3, 105);
SELECT mp.pla_id, MIN(m1.matintnum) AS matintnum FROM t2 mp INNER JOIN t1 m1 ON mp.mat_id=m1.mat_id GROUP BY mp.pla_id union SELECT 0, 0;
drop table t1, t2;
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427

#
# types conversions
#
create table t1 SELECT "a" as a UNION select "aa" as a;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT 12 as a UNION select "aa" as a;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT 12 as a UNION select 12.2 as a;
select * from t1;
show create table t1;
drop table t1;

428 429
create table t2 (it1 tinyint, it2 tinyint not null, i int not null, ib bigint, f float, d double, y year, da date, dt datetime, sc char(10), sv varchar(10), b blob, tx text);
insert into t2 values (NULL, 1, 3, 4, 1.5, 2.5, 1972, '1972-10-22', '1972-10-22 11:50', 'testc', 'testv', 'tetetetetest', 'teeeeeeeeeeeest');
430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446

create table t1 SELECT it2 from t2 UNION select it1 from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT it2 from t2 UNION select i from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT i from t2 UNION select f from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT f from t2 UNION select d from t2;
select * from t1;
show create table t1;
drop table t1;
unknown's avatar
unknown committed
447 448 449 450 451 452 453 454
create table t1 SELECT ib from t2 UNION select f from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT ib from t2 UNION select d from t2;
select * from t1;
show create table t1;
drop table t1;
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
create table t1 SELECT f from t2 UNION select y from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT f from t2 UNION select da from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT y from t2 UNION select da from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT y from t2 UNION select dt from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT da from t2 UNION select dt from t2;
select * from t1;
show create table t1;
drop table t1;
475 476
create table t1 SELECT dt from t2 UNION select trim(sc) from t2;
select trim(dt) from t1;
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497
show create table t1;
drop table t1;
create table t1 SELECT dt from t2 UNION select sv from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT sc from t2 UNION select sv from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT dt from t2 UNION select b from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT sv from t2 UNION select b from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT i from t2 UNION select d from t2 UNION select b from t2;
select * from t1;
show create table t1;
498 499 500 501 502 503 504 505
drop table t1;
create table t1 SELECT sv from t2 UNION select tx from t2;
select * from t1;
show create table t1;
drop table t1;
create table t1 SELECT b from t2 UNION select tx from t2;
select * from t1;
show create table t1;
506
drop table t1,t2;
507 508 509 510
create table t1 select 1 union select -1;
select * from t1;
show create table t1;
drop table t1;
unknown's avatar
unknown committed
511
-- error 1267
512 513 514
create table t1 select _latin1"test" union select _latin2"testt" ;
create table t1 select _latin2"test" union select _latin2"testt" ;
show create table t1;
unknown's avatar
unknown committed
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533
drop table t1;

#
# conversion memory->disk table
#
create table t1 (s char(200));
insert into t1 values (repeat("1",200));
create table t2 select * from t1;
insert into t2 select * from t1;
insert into t1 select * from t2;
insert into t2 select * from t1;
insert into t1 select * from t2;
insert into t2 select * from t1;
set local tmp_table_size=1024;
select count(*) from (select * from t1 union all select * from t2 order by 1) b;
select count(*) from t1;
select count(*) from t2;
drop table t1,t2;
set local tmp_table_size=default;
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554

#
# slow logging
#
create table t1 (a int, index (a), b int);
insert t1 values (1,1),(2,2),(3,3),(4,4),(5,5);
insert t1 select a+1, a+b from t1;
insert t1 select a+1, a+b from t1;
insert t1 select a+1, a+b from t1;
insert t1 select a+1, a+b from t1;
insert t1 select a+1, a+b from t1;
FLUSH STATUS;
show status like 'Slow_queries';
select count(*) from t1 where a=7;
show status like 'Slow_queries';
select count(*) from t1 where b=13;
show status like 'Slow_queries';
select count(*) from t1 where b=13 union select count(*) from t1 where a=7;
show status like 'Slow_queries';
select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
show status like 'Slow_queries';
555 556 557 558
# additional test for examined rows
flush status;
select a from t1 where b not in (1,2,3) union select a from t1 where b not in (4,5,6); 
show status like 'Slow_queries';
559
drop table t1;
unknown's avatar
unknown committed
560 561

#
unknown's avatar
unknown committed
562
# Column 'name' cannot be null (error with union and left join) (bug #2508)
unknown's avatar
unknown committed
563
#
unknown's avatar
unknown committed
564 565 566 567
create table t1 (   RID int(11) not null default '0',   IID int(11) not null default '0',    nada varchar(50)  not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 A left join t1 B on A.NAME = B.NAME and B.IID = 2 where A.IID = 1 and (A.PHONE <> B.PHONE or B.NAME is null) union select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 B left join t1 A on B.NAME = A.NAME and A.IID = 1 where B.IID = 2 and (A.PHONE <> B.PHONE or A.NAME is null);
drop  table t1;
unknown's avatar
unknown committed
568

569 570 571 572 573 574 575 576 577 578
#
# Bug #2809 (UNION fails on MyIsam tables when index on second column from
# same table)
#
create table t1 (col1 tinyint unsigned, col2 tinyint unsigned);
insert into t1 values (1,2),(3,4),(5,6),(7,8),(9,10);
select col1 n from t1 union select col2 n from t1 order by n;
alter table t1 add index myindex (col2);
select col1 n from t1 union select col2 n from t1 order by n;
drop  table t1;
579 580

#
unknown's avatar
unknown committed
581
# Incorrect handling of UNION ALL (Bug #1428)
582 583 584 585 586 587 588
#
create table t1 (i int);
insert into t1 values (1);
select * from t1 UNION select * from t1;
select * from t1 UNION ALL select * from t1;
select * from t1 UNION select * from t1 UNION ALL select * from t1;
drop table t1;
589
select 1 as a union all select 1 union all select 2 union select 1 union all select 2;
590 591 592 593
set sql_select_limit=1;
select 1 union select 2;
(select 1) union (select 2);
(select 1) union (select 2) union (select 3) limit 2;
unknown's avatar
unknown committed
594
set sql_select_limit=default;
595

596 597 598 599 600 601 602 603 604 605 606 607
#
# ORDER with LIMIT
#
create table t1 (a int);
insert into t1 values (100), (1);
create table t2 (a int);
insert into t2 values (100);
select a from t1 union select a from t2 order by a;
SET SQL_SELECT_LIMIT=1;
select a from t1 union select a from t2 order by a;
drop table t1, t2;
set sql_select_limit=default;
608 609 610 611 612 613 614 615 616

#
# nonexisting column in global ORDER BY
#
CREATE TABLE t1 (i int(11) default NULL,c char(1) default NULL,KEY i (i));
CREATE TABLE t2 (i int(11) default NULL,c char(1) default NULL,KEY i (i));
--error 1054
explain (select * from t1) union (select * from t2) order by not_existing_column;
drop table t1, t2;
617 618 619 620 621 622 623 624

#
# length detecting
#
CREATE TABLE t1 (uid int(1));
INSERT INTO t1 SELECT 150;
SELECT 'a' UNION SELECT uid FROM t1;
drop table t1;
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656

#
# parser stack overflow
#
CREATE TABLE t1 ( ID1 int(10) unsigned NOT NULL DEFAULT '0' , ID2 datetime NOT NULL DEFAULT '0000-00-00 00:00:00' , DATA1 varchar(10) , DATA2 double(5,4) , DATA3 datetime , PRIMARY KEY (ID1,ID2));

CREATE TABLE t2 ( ID int(3) unsigned NOT NULL DEFAULT '0' , DATA1 timestamp DEFAULT '0000-00-00 00:00:00' , PRIMARY KEY (ID));
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
(SELECT * FROM t1 AS PARTITIONED, t2 AS
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1);
drop table t1,t2;
657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676

#
# merging ENUM and SET fields in one UNION
#
create table t1 (a ENUM('Yes', 'No') NOT NULL);
create table t2 (a ENUM('aaa', 'bbb') NOT NULL);
insert into t1 values ('No');
insert into t2 values ('bbb');
create table t3 (a SET('Yes', 'No') NOT NULL);
create table t4 (a SET('aaa', 'bbb') NOT NULL);
insert into t3 values (1);
insert into t4 values (3);
select "1" as a union select a from t1;
select a as a from t1 union select "1";
select a as a from t2 union select a from t1;
select "1" as a union select a from t3;
select a as a from t3 union select "1";
select a as a from t4 union select a from t3;
select a as a from t1 union select a from t4;
drop table t1,t2,t3,t4;
677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714

#
# Bug #6139 UNION doesn't understand collate in the column of second select
#
create table t1 as
(select _latin1'test') union
(select _latin1'TEST') union
(select _latin1'TeST');
show create table t1;
select count(*) from t1;
drop table t1;

create table t1 as
(select _latin1'test' collate latin1_bin) union
(select _latin1'TEST') union
(select _latin1'TeST');
show create table t1;
select count(*) from t1;
drop table t1;

create table t1 as
(select _latin1'test') union
(select _latin1'TEST' collate latin1_bin) union
(select _latin1'TeST');
show create table t1;
select count(*) from t1;
drop table t1;

create table t1 as
(select _latin1'test') union
(select _latin1'TEST') union
(select _latin1'TeST' collate latin1_bin);
show create table t1;
select count(*) from t1;
drop table t1;

create table t2 (
a char character set latin1 collate latin1_swedish_ci,
715
b char character set latin1 collate latin1_german1_ci);
716 717 718 719 720 721 722 723 724 725 726 727 728 729
--error 1271
create table t1 as
(select a from t2) union
(select b from t2);
create table t1 as
(select a collate latin1_german1_ci from t2) union
(select b from t2);
show create table t1;
drop table t1;
create table t1 as
(select a from t2) union
(select b collate latin1_german1_ci from t2);
show create table t1;
drop table t1;
730 731 732 733 734 735
create table t1 as
(select a from t2) union
(select b from t2) union
(select 'c' collate latin1_german1_ci from t2);
show create table t1;
drop table t1;
736 737
drop table t2;

738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772
#
# Bug 6931: Date Type column problem when using UNION-Table.
#
create table t1(a1 int, f1 char(10));
create table t2
select f2,a1 from (select a1, CAST('2004-12-31' AS DATE) f2 from t1) a
union
select f2,a1 from (select a1, CAST('2004-12-31' AS DATE) f2 from t1) a
order by f2, a1;
show columns from t2;
drop table t1, t2;

create table t1 (f1 int);
create table t2 (f1 int, f2 int ,f3 date);
create table t3 (f1 int, f2 char(10));
create table t4
(
  select t2.f3 as sdate
  from t1
  left outer join t2 on (t1.f1 = t2.f1)
  inner join t3 on (t2.f2 = t3.f1)
  order by t1.f1, t3.f1, t2.f3
)
union
(
  select cast('2004-12-31' as date) as sdate
  from t1
  left outer join t2 on (t1.f1 = t2.f1)
  inner join t3 on (t2.f2 = t3.f1)
  group by t1.f1
  order by t1.f1, t3.f1, t2.f3
)
order by sdate;
show columns from t4;
drop table t1, t2, t3, t4;
unknown's avatar
unknown committed
773 774 775 776 777 778 779 780 781 782 783 784

#
# Bug #2435 UNION with parentheses not supported
#
create table t1 (a int not null, b char (10) not null); 
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c'); 
select * from ((select * from t1 limit 1)) a;
select * from ((select * from t1 limit 1) union (select * from t1 limit 1)) a;
select * from ((select * from t1 limit 1) union (select * from t1 limit 1) union (select * from t1 limit 1)) a;
select * from ((((select * from t1))) union (select * from t1) union (select * from t1)) a;
select * from ((select * from t1) union (((select * from t1))) union (select * from t1)) a;
drop table t1;
unknown's avatar
unknown committed
785 786 787 788 789 790

#
# Bugs#6519 UNION with collation binary and latin1_swedish_ci fails
#
set @val:=6;
select concat('value is: ', @val) union select 'some text';
unknown's avatar
Merge  
unknown committed
791

792 793 794 795 796 797 798 799 800
#
# Bug#15949 union + illegal mix of collations (IMPLICIT + COERCIBLE)
#
select concat(_latin1'a', _ascii'b' collate ascii_bin);
create table t1 (foo varchar(100)) collate ascii_bin;
insert into t1 (foo) values ("foo");
select foo from t1 union select 'bar' as foo from dual;
drop table t1;

801 802 803 804
#
# Enum merging test
#
CREATE TABLE t1 (
unknown's avatar
unknown committed
805
  a ENUM('','','') character set utf8 not null default '',
806 807 808 809
  b ENUM("one", "two") character set utf8,
  c ENUM("one", "two")
);
show create table t1;
unknown's avatar
unknown committed
810
insert into t1 values ('', 'one', 'one'), ('', 'two', 'one'), ('', NULL, NULL);
811 812 813 814 815 816 817 818 819 820
create table t2 select NULL union select a from t1;
show columns from t2;
drop table t2;
create table t2 select a from t1 union select NULL;
show columns from t2;
drop table t2;
create table t2 select a from t1 union select a from t1;
show columns from t2;
drop table t2;
create table t2 select a from t1 union select c from t1;
821
drop table t2;
822 823 824
create table t2 select a from t1 union select b from t1;
show columns from t2;
drop table t2, t1;
825

826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843
# 
# Bug #14216: UNION + DECIMAL wrong values in result
#
create table t1 (f1 decimal(60,25), f2 decimal(60,25));
insert into t1 values (0.0,0.0);
select f1 from t1 union all select f2 from t1;
select 'XXXXXXXXXXXXXXXXXXXX' as description, f1 from t1
union all
select 'YYYYYYYYYYYYYYYYYYYY' as description, f2 from t1;
drop table t1;
create table t1 (f1 decimal(60,24), f2 decimal(60,24));
insert into t1 values (0.0,0.0);
select f1 from t1 union all select f2 from t1;
select 'XXXXXXXXXXXXXXXXXXXX' as description, f1 from t1
union all
select 'YYYYYYYYYYYYYYYYYYYY' as description, f2 from t1;
drop table t1;

844 845 846 847 848 849 850 851 852 853 854
#
# Test that union with VARCHAR produces dynamic row tables
#

create table t1 (a varchar(5));
create table t2 select * from t1 union select 'abcdefghijkl';
show create table t2;
select row_format from information_schema.TABLES where table_schema="test" and table_name="t2";
alter table t2 ROW_FORMAT=fixed;
show create table t2;
drop table t1,t2;
unknown's avatar
unknown committed
855

856 857 858
#
# correct conversion long string to TEXT (BUG#10025)
#
unknown's avatar
unknown committed
859

860 861 862 863 864 865 866
CREATE TABLE t1 (a mediumtext);
CREATE TABLE t2 (b varchar(20));
INSERT INTO t1 VALUES ('a'),('b');
SELECT left(a,100000000) FROM t1 UNION  SELECT b FROM t2;
create table t3 SELECT left(a,100000000) FROM t1 UNION  SELECT b FROM t2;
show create table t3;
drop tables t1,t2,t3;
unknown's avatar
unknown committed
867

unknown's avatar
unknown committed
868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886
#
# Extended fix to Bug#10025 - the test above should result to mediumtext
# and the one below to longtext. Earlier above test resulted to longtext
# type also.
#

CREATE TABLE t1 (a longtext);
CREATE TABLE t2 (b varchar(20));
INSERT INTO t1 VALUES ('a'),('b');
SELECT left(a,100000000) FROM t1 UNION  SELECT b FROM t2;
create table t3 SELECT left(a,100000000) FROM t1 UNION  SELECT b FROM t2;
show create table t3;
drop tables t1,t2,t3;

#
# Testing here that mediumtext converts into longtext if the result
# exceeds mediumtext maximum length
#

887 888 889 890
SELECT @tmp_max:= @@global.max_allowed_packet;
SET @@global.max_allowed_packet=25000000;
# switching connection to allow the new max_allowed_packet take effect
--connect (newconn, localhost, root,,)
unknown's avatar
unknown committed
891 892 893 894 895
CREATE TABLE t1 (a mediumtext);
CREATE TABLE t2 (b varchar(20));
INSERT INTO t1 VALUES ('a');
CREATE TABLE t3 SELECT REPEAT(a,20000000) AS a FROM t1 UNION SELECT b FROM t2;
SHOW CREATE TABLE t3;
896 897 898 899 900 901 902 903 904 905 906 907 908 909 910
DROP TABLES t1,t3;
CREATE TABLE t1 (a tinytext);
INSERT INTO t1 VALUES ('a');
CREATE TABLE t3 SELECT REPEAT(a,2) AS a FROM t1 UNION SELECT b FROM t2;
SHOW CREATE TABLE t3;
DROP TABLES t1,t3;
CREATE TABLE t1 (a mediumtext);
INSERT INTO t1 VALUES ('a');
CREATE TABLE t3 SELECT REPEAT(a,2) AS a FROM t1 UNION SELECT b FROM t2;
SHOW CREATE TABLE t3;
DROP TABLES t1,t3;
CREATE TABLE t1 (a tinyblob);
INSERT INTO t1 VALUES ('a');
CREATE TABLE t3 SELECT REPEAT(a,2) AS a FROM t1 UNION SELECT b FROM t2;
SHOW CREATE TABLE t3;
unknown's avatar
unknown committed
911
DROP TABLES t1,t2,t3;
912 913 914
--connection default
SET @@global.max_allowed_packet:= @tmp_max;
--disconnect newconn
unknown's avatar
unknown committed
915

unknown's avatar
unknown committed
916 917 918 919 920 921 922 923 924
#
# Bug #10032 Bug in parsing UNION with ORDER BY when one node does not use FROM
#

create table t1 ( id int not null auto_increment, primary key (id), col1 int);
insert into t1 (col1) values (2),(3),(4),(5),(6);
select 99 union all select id from t1 order by 1;
select id from t1 union all select 99 order by 1;
drop table t1;
925 926

# End of 4.1 tests
927

928 929 930 931 932 933 934
#
# Bug#12185: Data type aggregation may produce wrong result
#
create table t1(f1 char(1), f2 char(5), f3 binary(1), f4 binary(5), f5 timestamp, f6 varchar(1) character set utf8 collate utf8_general_ci, f7 text);
create table t2 as select *, f6 as f8 from t1 union select *, f7 from t1;
show create table t2;
drop table t1, t2;
935

936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982
#
# Bug#18175: Union select over 129 tables with a sum function fails.
#
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1)) union
(select avg(1)) union (select avg(1)) union (select avg(1));

983 984 985 986 987 988
#
# Bug #16881: password() and union select
# (The issue was poor handling of character set aggregation.)
#
select _utf8'12' union select _latin1'12345';

989 990 991 992 993 994 995 996 997 998 999 1000 1001
#
# Bug #26661: UNION with ORDER BY undefined column in FROM list
#

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (3),(1),(2),(4),(1);

SELECT a FROM (SELECT a FROM t1 UNION SELECT a FROM t1 ORDER BY a) AS test;
--error 1054 
SELECT a FROM (SELECT a FROM t1 UNION SELECT a FROM t1 ORDER BY c) AS test;

DROP TABLE t1;

1002 1003 1004 1005 1006 1007 1008 1009 1010
#
# Bug#23345: Wrongly allowed INTO in a non-last select of a UNION.
#
--error 1221
(select 1 into @var) union (select 1);
(select 1) union (select 1 into @var);
select @var;
--error 1172
(select 2) union (select 1 into @var);
unknown's avatar
unknown committed
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054

#
# Bug#27848: order-by of union clashes with rollup of select part
#

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (10), (20);
CREATE TABLE t2 (b int);
INSERT INTO t2 VALUES (10), (50), (50);

SELECT a,1 FROM t1 
UNION
SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
ORDER BY a;

SELECT a,1 FROM t1 
UNION
SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
ORDER BY a DESC;

SELECT a,1 FROM t1 
UNION
SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
ORDER BY a ASC LIMIT 3;

SELECT a,1 FROM t1 
UNION ALL 
SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
ORDER BY a DESC;

--error ER_WRONG_USAGE
SELECT a,1 FROM t1
UNION 
(SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a);

--error ER_WRONG_USAGE
SELECT a,1 FROM t1
UNION ALL
SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a
UNION
SELECT 1,1;

DROP TABLE t1,t2;

1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076
# Bug#32848: Data type conversion bug in union subselects in MySQL 5.0.38
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1), (2), (3);

CREATE TABLE t2 SELECT * FROM (SELECT NULL) a UNION SELECT a FROM t1;
DESC t2;

CREATE TABLE t3 SELECT a FROM t1 UNION SELECT * FROM (SELECT NULL) a;
DESC t3;

CREATE TABLE t4 SELECT NULL;
DESC t4;

CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
DESC t5;

CREATE TABLE t6 
SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
DESC t6;

DROP TABLE t1, t2, t3, t4, t5, t6;
1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091

#
# Bug #43432: Union on floats does unnecessary rounding
#

CREATE TABLE t1 (f FLOAT(9,6));
CREATE TABLE t2 AS SELECT f FROM t1 UNION SELECT f FROM t1;
SHOW FIELDS FROM t2;
DROP TABLE t1, t2;

CREATE TABLE t1(d DOUBLE(9,6));
CREATE TABLE t2 AS SELECT d FROM t1 UNION SELECT d FROM t1;
SHOW FIELDS FROM t2;
DROP TABLE t1, t2;

1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
#
# Bug#43612 crash with explain extended, union, order by
#
CREATE TABLE t1(a INT);
EXPLAIN EXTENDED
SELECT a FROM t1
UNION
SELECT a FROM t1
ORDER BY a;
DROP TABLE t1;


1104
--echo End of 5.0 tests
1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146


--echo # 
--echo # Bug #49734: Crash on EXPLAIN EXTENDED UNION ... ORDER BY 
--echo #   <any non-const-function>
--echo # 

CREATE TABLE t1 (a VARCHAR(10), FULLTEXT KEY a (a));
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (b INT);
INSERT INTO t2 VALUES (1),(2);

--echo # Should not crash
EXPLAIN EXTENDED
SELECT * FROM t1 UNION SELECT * FROM t1 ORDER BY a + 12;

--echo # Should not crash
SELECT * FROM t1 UNION SELECT * FROM t1 ORDER BY a + 12;


--echo # Should not crash
--error ER_CANT_USE_OPTION_HERE
EXPLAIN EXTENDED
SELECT * FROM t1 UNION SELECT * FROM t1
  ORDER BY MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE);

--echo # Should not crash
--error ER_CANT_USE_OPTION_HERE
SELECT * FROM t1 UNION SELECT * FROM t1
  ORDER BY MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE);

--echo # Should not crash
(SELECT * FROM t1) UNION (SELECT * FROM t1)
  ORDER BY MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE);


--echo # Should not crash
EXPLAIN EXTENDED
SELECT * FROM t1 UNION SELECT * FROM t1
  ORDER BY (SELECT a FROM t2 WHERE b = 12);

--echo # Should not crash
1147
--disable_result_log
1148 1149
SELECT * FROM t1 UNION SELECT * FROM t1
  ORDER BY (SELECT a FROM t2 WHERE b = 12);
1150
--enable_result_log
1151 1152 1153 1154 1155 1156 1157

--echo # Should not crash
SELECT * FROM t2 UNION SELECT * FROM t2
  ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));

DROP TABLE t1,t2;

1158 1159 1160 1161 1162 1163 1164 1165
#
# lp:732124 union + limit returns wrong result
#
create table t1 (a int);
insert into t1 values (10),(10),(10),(2),(3),(4),(5),(6),(7),(8),(9),(1),(10);
--sorted_result
select a from t1 where false UNION select a from t1 limit 8;
drop table t1;
1166

1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207
--echo #
--echo # Bug#11765255 58201:
--echo # VALGRIND/CRASH WHEN ORDERING BY MULTIPLE AGGREGATE FUNCTIONS
--echo #

let $my_stmt=
select 1 as foo
union
select 2
union
select 3
union
select 4
order by max(42) + max(1) + max(1) + max(1) + max(1) + max(1)
;

eval $my_stmt;

eval prepare stmt1 from '$my_stmt';
execute stmt1;
execute stmt1;

let $my_stmt=
select 1 as foo
union
select 2
union
select 3
union
(select 4)
order by max(42) + max(1) + max(1) + max(1) + max(1) + max(1)
;

eval $my_stmt;

eval prepare stmt1 from '$my_stmt';
execute stmt1;
execute stmt1;

deallocate prepare stmt1;

1208
--echo End of 5.1 tests