1785
1790
# Test of bug with SUM(CASE...)
1788
CREATE TABLE t1 (gvid int(10) unsigned default NULL, hmid int(10) unsigned default NULL, volid int(10) unsigned default NULL, mmid int(10) unsigned default NULL, hdid int(10) unsigned default NULL, fsid int(10) unsigned default NULL, ctid int(10) unsigned default NULL, dtid int(10) unsigned default NULL, cost int(10) unsigned default NULL, performance int(10) unsigned default NULL, serialnumber bigint(20) unsigned default NULL, monitored tinyint(3) unsigned default '1', removed tinyint(3) unsigned default '0', target tinyint(3) unsigned default '0', dt_modified timestamp NOT NULL, name varchar(255) binary default NULL, description varchar(255) default NULL, UNIQUE KEY hmid (hmid,volid)) ENGINE=MyISAM;
1793
CREATE TEMPORARY TABLE t1 (gvid int default NULL, hmid int default NULL, volid int default NULL, mmid int default NULL, hdid int default NULL, fsid int default NULL, ctid int default NULL, dtid int default NULL, cost int default NULL, performance int default NULL, serialnumber bigint default NULL, monitored int default '1', removed int default '0', target int default '0', dt_modified timestamp NOT NULL, name varchar(255) default NULL, description varchar(255) default NULL, UNIQUE KEY hmid (hmid,volid)) ENGINE=MyISAM;
1789
1794
INSERT INTO t1 VALUES (200001,2,1,1,100,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\E$',''),(200002,2,2,1,101,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\C$',''),(200003,1,3,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,20020425060427,'c:',NULL);
1790
CREATE TABLE t2 ( hmid int(10) unsigned default NULL, volid int(10) unsigned default NULL, sampletid smallint(5) unsigned default NULL, sampletime datetime default NULL, samplevalue bigint(20) unsigned default NULL, KEY idx1 (hmid,volid,sampletid,sampletime)) ENGINE=MyISAM;
1795
CREATE TEMPORARY TABLE t2 ( hmid int default NULL, volid int default NULL, sampletid int default NULL, sampletime datetime default NULL, samplevalue bigint default NULL, KEY idx1 (hmid,volid,sampletid,sampletime)) ENGINE=MyISAM;
1791
1796
INSERT INTO t2 VALUES (1,3,10,'2002-06-01 08:00:00',35),(1,3,1010,'2002-06-01 12:00:01',35);
1792
# Disable PS becasue we get more warnings from PS than from normal execution
1793
--disable_ps_protocol
1797
--error 1686 # bad datetime
1794
1798
SELECT a.gvid, (SUM(CASE b.sampletid WHEN 140 THEN b.samplevalue ELSE 0 END)) as the_success,(SUM(CASE b.sampletid WHEN 141 THEN b.samplevalue ELSE 0 END)) as the_fail,(SUM(CASE b.sampletid WHEN 142 THEN b.samplevalue ELSE 0 END)) as the_size,(SUM(CASE b.sampletid WHEN 143 THEN b.samplevalue ELSE 0 END)) as the_time FROM t1 a, t2 b WHERE a.hmid = b.hmid AND a.volid = b.volid AND b.sampletime >= 'wrong-date-value' AND b.sampletime < 'wrong-date-value' AND b.sampletid IN (140, 141, 142, 143) GROUP BY a.gvid;
1795
--enable_ps_protocol
1796
1799
# Testing the same select with NULL's instead of invalid datetime values
1797
1800
SELECT a.gvid, (SUM(CASE b.sampletid WHEN 140 THEN b.samplevalue ELSE 0 END)) as the_success,(SUM(CASE b.sampletid WHEN 141 THEN b.samplevalue ELSE 0 END)) as the_fail,(SUM(CASE b.sampletid WHEN 142 THEN b.samplevalue ELSE 0 END)) as the_size,(SUM(CASE b.sampletid WHEN 143 THEN b.samplevalue ELSE 0 END)) as the_time FROM t1 a, t2 b WHERE a.hmid = b.hmid AND a.volid = b.volid AND b.sampletime >= NULL AND b.sampletime < NULL AND b.sampletid IN (140, 141, 142, 143) GROUP BY a.gvid;
1798
1801
DROP TABLE t1,t2;
1859
1863
select * from (t1 as t2 left join t1 as t3 using (a)) natural join t1;
1862
CREATE TABLE t1 ( aa char(2), id int(11) NOT NULL auto_increment, t2_id int(11) NOT NULL default '0', PRIMARY KEY (id), KEY replace_id (t2_id)) ENGINE=MyISAM;
1866
CREATE TEMPORARY TABLE t1 ( aa char(2), id int NOT NULL auto_increment, t2_id int NOT NULL default '0', PRIMARY KEY (id), KEY replace_id (t2_id)) ENGINE=MyISAM;
1863
1867
INSERT INTO t1 VALUES ("1",8264,2506),("2",8299,2517),("3",8301,2518),("4",8302,2519),("5",8303,2520),("6",8304,2521),("7",8305,2522);
1864
CREATE TABLE t2 ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) ENGINE=MyISAM;
1868
CREATE TEMPORARY TABLE t2 ( id int NOT NULL auto_increment, PRIMARY KEY (id)) ENGINE=MyISAM;
1865
1869
INSERT INTO t2 VALUES (2517), (2518), (2519), (2520), (2521), (2522);
1866
1870
select * from t1, t2 WHERE t1.t2_id = t2.id and t1.t2_id > 0 order by t1.id LIMIT 0, 5;
1867
1871
drop table t1,t2;
2056
# Test for Bug#8009, SELECT failed on bigint unsigned when using HEX
2060
# Test for Bug#8009, SELECT failed on bigint when using HEX
2059
CREATE TABLE t1 (b BIGINT(20) UNSIGNED NOT NULL, PRIMARY KEY (b));
2060
INSERT INTO t1 VALUES (0x8000000000000000);
2061
SELECT b FROM t1 WHERE b=0x8000000000000000;
2063
CREATE TABLE t1 (b BIGINT NOT NULL, PRIMARY KEY (b));
2064
INSERT INTO t1 VALUES (0x4000000000000000);
2065
SELECT b FROM t1 WHERE b=0x4000000000000000;
2065
2069
# IN with outer join condition (BUG#9393)
2067
CREATE TABLE `t1` ( `gid` int(11) default NULL, `uid` int(11) default NULL);
2071
CREATE TABLE `t1` ( `gid` int default NULL, `uid` int default NULL);
2069
CREATE TABLE `t2` ( `ident` int(11) default NULL, `level` char(16) default NULL);
2073
CREATE TABLE `t2` ( `ident` int default NULL, `level` char(16) default NULL);
2070
2074
INSERT INTO `t2` VALUES (0,'READ');
2072
CREATE TABLE `t3` ( `id` int(11) default NULL, `name` char(16) default NULL);
2076
CREATE TABLE `t3` ( `id` int default NULL, `name` char(16) default NULL);
2073
2077
INSERT INTO `t3` VALUES (1,'fs');
2075
2079
select * from t3 left join t1 on t3.id = t1.uid, t2 where t2.ident in (0, t1.gid, t3.id, 0);
2079
2083
# Test for BUG#11700
2080
2084
CREATE TABLE t1 (
2081
acct_id int(11) NOT NULL default '0',
2082
profile_id smallint(6) default NULL,
2085
acct_id int NOT NULL default '0',
2086
profile_id int default NULL,
2083
2087
UNIQUE KEY t1$acct_id (acct_id),
2084
2088
KEY t1$profile_id (profile_id)
2086
2090
INSERT INTO t1 VALUES (132,17),(133,18);
2088
2092
CREATE TABLE t2 (
2089
profile_id smallint(6) default NULL,
2090
queue_id int(11) default NULL,
2091
seq int(11) default NULL,
2093
profile_id int default NULL,
2094
queue_id int default NULL,
2095
seq int default NULL,
2092
2096
KEY t2$queue_id (queue_id)
2094
2098
INSERT INTO t2 VALUES (17,31,4),(17,30,3),(17,36,2),(17,37,1);
2096
2100
CREATE TABLE t3 (
2097
id int(11) NOT NULL default '0',
2098
qtype int(11) default NULL,
2099
seq int(11) default NULL,
2100
warn_lvl int(11) default NULL,
2101
crit_lvl int(11) default NULL,
2102
rr1 tinyint(4) NOT NULL default '0',
2103
rr2 int(11) default NULL,
2104
default_queue tinyint(4) NOT NULL default '0',
2101
id int NOT NULL default '0',
2102
qtype int default NULL,
2103
seq int default NULL,
2104
warn_lvl int default NULL,
2105
crit_lvl int default NULL,
2106
rr1 int NOT NULL default '0',
2107
rr2 int default NULL,
2108
default_queue int NOT NULL default '0',
2105
2109
KEY t3$qtype (qtype),
3303
3301
# Bug#31800: Date comparison fails with timezone and slashes for greater
3304
3302
# than comparison
3305
# @TODO Commenting all str_to_date out for now...should move to a plugin.
3307
3307
# On DATETIME-like literals with trailing garbage, BETWEEN fudged in a
3308
3308
# DATETIME comparator, while greater/less-than used bin-string comparisons.
3309
3309
# Should correctly be compared as DATE or DATETIME, but throw a warning:
3311
select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
3312
and '2007/10/20 00:00:00 GMT';
3313
select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
3314
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
3311
#select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
3312
# and '2007/10/20 00:00:00 GMT';
3313
#select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
3314
#select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
3316
3316
# We have all we need -- and trailing garbage:
3317
3317
# (leaving out a leading zero in first example to prove it's a
3318
3318
# value-comparison, not a string-comparison!)
3319
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
3320
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6';
3321
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6';
3322
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6';
3319
#select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
3320
#select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6';
3321
#select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6';
3322
#select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6';
3323
3323
# no time at all:
3324
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6';
3324
#select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6';
3325
3325
# partial time:
3326
select str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
3326
#select str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
3327
3327
# fail, different second part:
3328
select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
3328
#select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
3329
3329
# correct syntax, no trailing nonsense -- this one must throw no warning:
3330
select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56';
3330
#select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56';
3331
3331
# no warning, but failure (different hour parts):
3332
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00';
3332
#select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00';
3334
select str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00';
3334
#select str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00';
3335
3335
# succeed, but warn for "trailing garbage" (":34"):
3336
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00';
3336
#select str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00';
3337
3337
# invalid date (Feb 30) succeeds
3338
select str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34';
3338
#select str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34';
3339
3339
# 0-day for both, just works in default SQL mode.
3340
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
3340
#select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
3341
3341
# 0-day, succeed
3342
select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
3343
and '2007/10/20 00:00:00';
3344
select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
3345
select str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20';
3346
select str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
3347
select str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34';
3348
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '';
3342
#select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
3343
# and '2007/10/20 00:00:00';
3344
#select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
3345
#select str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20';
3346
#select str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
3347
#select str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34';
3348
#select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '';
3350
select str_to_date('1','%Y-%m-%d') = '1';
3351
select str_to_date('1','%Y-%m-%d') = '1';
3352
select str_to_date('','%Y-%m-%d') = '';
3350
#select str_to_date('1','%Y-%m-%d') = '1';
3351
#select str_to_date('1','%Y-%m-%d') = '1';
3352
#select str_to_date('','%Y-%m-%d') = '';
3354
3354
# these three should work!
3355
select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
3356
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
3357
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
3355
#select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
3356
#select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
3357
#select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
3358
3358
###########################################################################
3454
3454
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967296;
3455
3455
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967297;
3459
# MySQL Bug#33546: Slowdown on re-evaluation of constant expressions.
3461
CREATE TABLE t1 (a INT);
3462
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
3463
CREATE TABLE t2 (b INT);
3464
INSERT INTO t2 VALUES (2);
3465
SELECT * FROM t1 WHERE a = 1 + 1;
3466
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a = 1 + 1;
3467
SELECT * FROM t1 HAVING a = 1 + 1;
3468
EXPLAIN EXTENDED SELECT * FROM t1 HAVING a = 1 + 1;
3469
SELECT * FROM t1, t2 WHERE a = b + (1 + 1);
3470
EXPLAIN EXTENDED SELECT * FROM t1, t2 WHERE a = b + (1 + 1);
3471
SELECT * FROM t2 LEFT JOIN t1 ON a = b + 1;
3472
EXPLAIN EXTENDED SELECT * FROM t2 LEFT JOIN t1 ON a = b + 1;
3473
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a > UNIX_TIMESTAMP('2009-03-10 00:00:00');
b'\\ No newline at end of file'