mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt
into mysql.com:/home/gluh/MySQL/Merge/5.0 sql/item.h: Auto merged sql/sql_table.cc: Auto merged sql/sql_update.cc: Auto merged
This commit is contained in:
@ -176,6 +176,14 @@ create table t1 (a int);
|
||||
delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
|
||||
delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
|
||||
drop table t1;
|
||||
create table t1(f1 int primary key);
|
||||
insert into t1 values (4),(3),(1),(2);
|
||||
delete from t1 where (@a:= f1) order by f1 limit 1;
|
||||
select @a;
|
||||
@a
|
||||
1
|
||||
drop table t1;
|
||||
End of 4.1 tests
|
||||
CREATE TABLE t1 (a int not null,b int not null);
|
||||
CREATE TABLE t2 (a int not null, b int not null, primary key (a,b));
|
||||
CREATE TABLE t3 (a int not null, b int not null, primary key (a,b));
|
||||
|
@ -67,3 +67,26 @@ id d e m_id f
|
||||
4 bword aword NULL NULL
|
||||
5 aword and bword NULL 5
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
id int(10) NOT NULL auto_increment,
|
||||
link int(10) default NULL,
|
||||
name mediumtext default NULL,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT (name)
|
||||
);
|
||||
INSERT INTO t1 VALUES (1, 1, 'string');
|
||||
INSERT INTO t1 VALUES (2, 0, 'string');
|
||||
CREATE TABLE t2 (
|
||||
id int(10) NOT NULL auto_increment,
|
||||
name mediumtext default NULL,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT (name)
|
||||
);
|
||||
INSERT INTO t2 VALUES (1, 'string');
|
||||
SELECT t1.*, MATCH(t1.name) AGAINST('string') AS relevance
|
||||
FROM t1 LEFT JOIN t2 ON t1.link = t2.id
|
||||
WHERE MATCH(t1.name, t2.name) AGAINST('string' IN BOOLEAN MODE);
|
||||
id link name relevance
|
||||
1 1 string 0
|
||||
2 0 string 0
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -355,4 +355,47 @@ some_id
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
|
||||
INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
|
||||
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
|
||||
INSERT INTO t2 VALUES (3,2),(4,2);
|
||||
CREATE TABLE t3 (a int PRIMARY KEY);
|
||||
INSERT INTO t3 VALUES (1),(2),(3),(4);
|
||||
CREATE TABLE t4 (a int PRIMARY KEY);
|
||||
INSERT INTO t4 VALUES (1),(2);
|
||||
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
|
||||
JOIN t1 ON t3.a=t1.a
|
||||
JOIN t2 ON t3.a=t2.a
|
||||
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 index PRIMARY PRIMARY 4 NULL 4 Using index
|
||||
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t3.a 1
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t3.a 1
|
||||
1 SIMPLE t4 ALL PRIMARY NULL NULL NULL 2 Range checked for each record (index map: 0x1)
|
||||
SELECT STRAIGHT_JOIN * FROM t3
|
||||
JOIN t1 ON t3.a=t1.a
|
||||
JOIN t2 ON t3.a=t2.a
|
||||
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
|
||||
a a b a b a
|
||||
3 3 1 3 2 1
|
||||
3 3 1 3 2 2
|
||||
4 4 1 4 2 1
|
||||
4 4 1 4 2 2
|
||||
EXPLAIN SELECT STRAIGHT_JOIN
|
||||
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
|
||||
FROM t3, t1, t2
|
||||
WHERE t3.a=t1.a AND t3.a=t2.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 index PRIMARY PRIMARY 4 NULL 4 Using index
|
||||
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t3.a 1
|
||||
1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t3.a 1
|
||||
2 DEPENDENT SUBQUERY t4 index NULL PRIMARY 4 NULL 2 Using where; Using index
|
||||
SELECT STRAIGHT_JOIN
|
||||
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
|
||||
FROM t3, t1, t2
|
||||
WHERE t3.a=t1.a AND t3.a=t2.a;
|
||||
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
|
||||
3
|
||||
3
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
End of 5.0 tests
|
||||
|
@ -817,7 +817,7 @@ explain extended select md5('hello'), sha('abc'), sha1('abc'), soundex(''), 'moo
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,cast(_latin1'HE' as char charset binary) AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate latin1_bin),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substring_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000))) AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
||||
Note 1003 select md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,cast(_latin1'HE' as char charset binary) AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate latin1_bin),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substring_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000),'monty'),'monty') AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
||||
SELECT lpad(12345, 5, "#");
|
||||
lpad(12345, 5, "#")
|
||||
12345
|
||||
@ -1084,6 +1084,18 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
DROP TABLE t1;
|
||||
create table t1(f1 varchar(4));
|
||||
explain extended select encode(f1,'zxcv') as 'enc' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select encode(`test`.`t1`.`f1`,'zxcv') AS `enc` from `test`.`t1`
|
||||
explain extended select decode(f1,'zxcv') as 'enc' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||
Warnings:
|
||||
Note 1003 select decode(`test`.`t1`.`f1`,'zxcv') AS `enc` from `test`.`t1`
|
||||
drop table t1;
|
||||
End of 4.1 tests
|
||||
create table t1 (d decimal default null);
|
||||
insert into t1 values (null);
|
||||
|
@ -933,3 +933,105 @@ b sum(1)
|
||||
18 6
|
||||
19 6
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1),(2,1),(3,2),(4,2),(5,3),(6,3);
|
||||
SET SQL_MODE = 'ONLY_FULL_GROUP_BY';
|
||||
SELECT MAX(a)-MIN(a) FROM t1 GROUP BY b;
|
||||
MAX(a)-MIN(a)
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT CEILING(MIN(a)) FROM t1 GROUP BY b;
|
||||
CEILING(MIN(a))
|
||||
1
|
||||
3
|
||||
5
|
||||
SELECT CASE WHEN AVG(a)>=0 THEN 'Positive' ELSE 'Negative' END FROM t1
|
||||
GROUP BY b;
|
||||
CASE WHEN AVG(a)>=0 THEN 'Positive' ELSE 'Negative' END
|
||||
Positive
|
||||
Positive
|
||||
Positive
|
||||
SELECT a + 1 FROM t1 GROUP BY a;
|
||||
a + 1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
SELECT a + b FROM t1 GROUP BY b;
|
||||
ERROR 42000: 'test.t1.a' isn't in GROUP BY
|
||||
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1)
|
||||
FROM t1 AS t1_outer;
|
||||
(SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1)
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT 1 FROM t1 as t1_outer GROUP BY a
|
||||
HAVING (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
ERROR 42000: 'test.t1_outer.a' isn't in GROUP BY
|
||||
SELECT 1 FROM t1 as t1_outer GROUP BY a
|
||||
HAVING (SELECT t1_outer.b FROM t1 AS t1_inner LIMIT 1);
|
||||
ERROR 42S22: Unknown column 'test.t1_outer.b' in 'field list'
|
||||
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
(SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1)
|
||||
21
|
||||
21
|
||||
21
|
||||
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1)
|
||||
FROM t1 AS t1_outer;
|
||||
(SELECT SUM(t1_inner.a) FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1)
|
||||
3
|
||||
3
|
||||
3
|
||||
3
|
||||
3
|
||||
3
|
||||
SELECT (SELECT SUM(t1_outer.a) FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
ERROR 42000: 'test.t1_outer.a' isn't in GROUP BY
|
||||
SELECT 1 FROM t1 as t1_outer
|
||||
WHERE (SELECT t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT b FROM t1 GROUP BY b HAVING CEILING(b) > 0;
|
||||
b
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING b = 2 OR b = 3 OR SUM(a) > 12;
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING ROW (b,b) = ROW (1,1);
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING a = 2;
|
||||
ERROR 42S22: Unknown column 'a' in 'having clause'
|
||||
SELECT 1 FROM t1 GROUP BY SUM(b);
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT b FROM t1 AS t1_outer GROUP BY a HAVING t1_outer.a IN
|
||||
(SELECT SUM(t1_inner.b)+t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.a
|
||||
HAVING SUM(t1_inner.b)+t1_outer.b > 5);
|
||||
ERROR 42000: 'test.t1_outer.b' isn't in GROUP BY
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE = '';
|
||||
|
@ -325,3 +325,24 @@ select row_count();
|
||||
row_count()
|
||||
1
|
||||
drop table t1;
|
||||
create table t1 (f1 int unique, f2 int);
|
||||
create table t2 (f3 int, f4 int);
|
||||
create view v1 as select * from t1, t2 where f1= f3;
|
||||
insert into t1 values (1,11), (2,22);
|
||||
insert into t2 values (1,12), (2,24);
|
||||
insert into v1 (f1) values (3) on duplicate key update f3= f3 + 10;
|
||||
ERROR HY000: Can not modify more than one base table through a join view 'test.v1'
|
||||
insert into v1 (f1) values (3) on duplicate key update f1= f3 + 10;
|
||||
select * from t1;
|
||||
f1 f2
|
||||
1 11
|
||||
2 22
|
||||
3 NULL
|
||||
insert into v1 (f1) values (3) on duplicate key update f1= f3 + 10;
|
||||
select * from t1;
|
||||
f1 f2
|
||||
1 11
|
||||
2 22
|
||||
12 NULL
|
||||
drop view v1;
|
||||
drop table t1,t2;
|
||||
|
@ -9,7 +9,7 @@ insert into t2 values (1,1,1),(2,2,2),(3,3,3), (4,4,4), (5,5,5);
|
||||
explain select * from t2 where p NOT IN (select p from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1
|
||||
select * from t2 where p NOT IN (select p from t1) order by p;
|
||||
p u o
|
||||
4 4 4
|
||||
@ -17,7 +17,7 @@ p u o
|
||||
explain select * from t2 where p NOT IN (select u from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery u u 4 func 1 Using index
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery u u 4 func 1
|
||||
select * from t2 where p NOT IN (select u from t1) order by p;
|
||||
p u o
|
||||
4 4 4
|
||||
@ -25,7 +25,7 @@ p u o
|
||||
explain select * from t2 where p NOT IN (select o from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery o o 4 func 1 Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery o o 4 func 1
|
||||
select * from t2 where p NOT IN (select o from t1) order by p;
|
||||
p u o
|
||||
4 4 4
|
||||
|
@ -674,6 +674,49 @@ select a from t1 where a > 'x';
|
||||
a
|
||||
xx
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
|
||||
OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid',
|
||||
OXLEFT int NOT NULL DEFAULT '0',
|
||||
OXRIGHT int NOT NULL DEFAULT '0',
|
||||
OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (OXID),
|
||||
KEY OXNID (OXID),
|
||||
KEY OXLEFT (OXLEFT),
|
||||
KEY OXRIGHT (OXRIGHT),
|
||||
KEY OXROOTID (OXROOTID)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
|
||||
INSERT INTO t1 VALUES
|
||||
('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11,
|
||||
'd8c4177d09f8b11f5.52725521');
|
||||
EXPLAIN
|
||||
SELECT s.oxid FROM t1 v, t1 s
|
||||
WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
|
||||
v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
|
||||
s.oxleft > v.oxleft AND s.oxleft < v.oxright;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE v ref OXLEFT,OXRIGHT,OXROOTID OXROOTID 34 const 5 Using where
|
||||
1 SIMPLE s ALL OXLEFT NULL NULL NULL 5 Range checked for each record (index map: 0x4)
|
||||
SELECT s.oxid FROM t1 v, t1 s
|
||||
WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
|
||||
v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
|
||||
s.oxleft > v.oxleft AND s.oxleft < v.oxright;
|
||||
oxid
|
||||
d8c4177d151affab2.81582770
|
||||
d8c4177d206a333d2.74422679
|
||||
d8c4177d225791924.30714720
|
||||
d8c4177d2380fc201.39666693
|
||||
d8c4177d24ccef970.14957924
|
||||
DROP TABLE t1;
|
||||
End of 4.1 tests
|
||||
CREATE TABLE t1 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
|
@ -3628,6 +3628,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range si,ai si 5 NULL 2 Using where
|
||||
1 SIMPLE t3 eq_ref PRIMARY,ci PRIMARY 4 test.t2.a 1 Using where
|
||||
DROP TABLE t1,t2,t3;
|
||||
CREATE TABLE t1 ( f1 int primary key, f2 int, f3 int, f4 int, f5 int, f6 int, checked_out int);
|
||||
CREATE TABLE t2 ( f11 int PRIMARY KEY );
|
||||
INSERT INTO t1 VALUES (1,1,1,0,0,0,0),(2,1,1,3,8,1,0),(3,1,1,4,12,1,0);
|
||||
INSERT INTO t2 VALUES (62);
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON f11 = t1.checked_out GROUP BY f1 ORDER BY f2, f3, f4, f5 LIMIT 0, 1;
|
||||
f1 f2 f3 f4 f5 f6 checked_out f11
|
||||
1 1 1 0 0 0 0 NULL
|
||||
DROP TABLE t1, t2;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT into t1 values (1), (2), (3);
|
||||
|
@ -187,7 +187,7 @@ Pos Instruction
|
||||
32 set v_dig@4 (v_dig@4 + 1)
|
||||
33 stmt 4 "update sudoku_work set dig = v_dig wh..."
|
||||
34 set v_tcounter@6 (v_tcounter@6 + 1)
|
||||
35 jump_if_not 37(37) not(`test`.`sudoku_digit_ok`(v_row@7,v_col@8,v_dig@4))
|
||||
35 jump_if_not 37(37) (not(`test`.`sudoku_digit_ok`(v_row@7,v_col@8,v_dig@4)))
|
||||
36 jump 15
|
||||
37 set v_i@3 (v_i@3 + 1)
|
||||
38 jump 15
|
||||
|
@ -744,7 +744,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `1` having trigcond((<cache>(`test`.`t2`.`id`) = <ref_null_helper>(1))) union select 3 AS `3` having trigcond((<cache>(`test`.`t2`.`id`) = <ref_null_helper>(3)))))
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `1` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(1)) union select 3 AS `3` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(3))))
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||
id
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||
@ -892,7 +892,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL PRIMARY 4 NULL 4 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery a a 5 func 2 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`a`) in t2 on a checking NULL))) AS `t1.a in (select t2.a from t2)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`a`) in t2 on a checking NULL having <is_not_null_test>(`test`.`t2`.`a`)))) AS `t1.a in (select t2.a from t2)` from `test`.`t1`
|
||||
CREATE TABLE t3 (a int(11) default '0');
|
||||
INSERT INTO t3 VALUES (1),(2),(3);
|
||||
SELECT t1.a, t1.a in (select t2.a from t2,t3 where t3.a=t2.a) FROM t1;
|
||||
@ -907,7 +907,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
2 DEPENDENT SUBQUERY t2 ref_or_null a a 5 func 2 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and trigcond(((<cache>(`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`)))) having trigcond(<is_not_null_test>(`test`.`t2`.`a`)))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,<in_optimizer>(`test`.`t1`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t2`.`a`) and ((<cache>(`test`.`t1`.`a`) = `test`.`t2`.`a`) or isnull(`test`.`t2`.`a`))) having <is_not_null_test>(`test`.`t2`.`a`))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from `test`.`t1`
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (a float);
|
||||
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
||||
@ -1305,7 +1305,7 @@ a
|
||||
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<primary_index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on PRIMARY where (`test`.`t1`.`b` <> 30))))
|
||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
@ -1462,27 +1462,27 @@ a3 1
|
||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL))) AS `s1 = ANY (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))) AS `s1 = ANY (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL)))) AS `s1 <> ALL (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 <> ALL (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Using where
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2'))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2') having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
drop table t1,t2;
|
||||
create table t2 (a int, b int);
|
||||
create table t3 (a int);
|
||||
@ -1737,14 +1737,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 12 Using where
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where (`test`.`t1`.`id` < 8)))))
|
||||
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where (not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where (`test`.`t1`.`id` < 8))))))
|
||||
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY tt ALL NULL NULL NULL NULL 12 Using where
|
||||
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 test.tt.id 1 Using where; Using index
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'tt.id' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`tt`.`id` AS `id`,`test`.`tt`.`text` AS `text` from `test`.`t1` `tt` where not(exists(select `test`.`t1`.`id` AS `id` from `test`.`t1` where ((`test`.`t1`.`id` < 8) and (`test`.`t1`.`id` = `test`.`tt`.`id`)) having (`test`.`t1`.`id` is not null)))
|
||||
Note 1003 select `test`.`tt`.`id` AS `id`,`test`.`tt`.`text` AS `text` from `test`.`t1` `tt` where (not(exists(select `test`.`t1`.`id` AS `id` from `test`.`t1` where ((`test`.`t1`.`id` < 8) and (`test`.`t1`.`id` = `test`.`tt`.`id`)) having (`test`.`t1`.`id` is not null))))
|
||||
insert into t1 (id, text) values (1000, 'text1000'), (1001, 'text1001');
|
||||
create table t2 (id int not null, text varchar(20) not null default '', primary key (id));
|
||||
insert into t2 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text1'), (12, 'text2'), (13, 'text3'), (14, 'text4'), (15, 'text5'), (16, 'text6'), (17, 'text7'), (18, 'text8'), (19, 'text9'), (20, 'text10'),(21, 'text1'), (22, 'text2'), (23, 'text3'), (24, 'text4'), (25, 'text5'), (26, 'text6'), (27, 'text7'), (28, 'text8'), (29, 'text9'), (30, 'text10'), (31, 'text1'), (32, 'text2'), (33, 'text3'), (34, 'text4'), (35, 'text5'), (36, 'text6'), (37, 'text7'), (38, 'text8'), (39, 'text9'), (40, 'text10'), (41, 'text1'), (42, 'text2'), (43, 'text3'), (44, 'text4'), (45, 'text5'), (46, 'text6'), (47, 'text7'), (48, 'text8'), (49, 'text9'), (50, 'text10');
|
||||
@ -2816,19 +2816,19 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and trigcond((((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))))) having trigcond((<is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))))
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and (<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))
|
||||
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having trigcond((((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)) and <is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) and trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a char(5), b char(5));
|
||||
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
|
||||
@ -3009,7 +3009,7 @@ INSERT INTO t2 VALUES (1),(2),(3);
|
||||
EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index; Full scan on NULL key
|
||||
SELECT a, a IN (SELECT a FROM t1) FROM t2;
|
||||
a a IN (SELECT a FROM t1)
|
||||
1 1
|
||||
@ -3605,3 +3605,36 @@ FROM t1) t;
|
||||
COUNT(*)
|
||||
3000
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (id char(4) PRIMARY KEY, c int);
|
||||
CREATE TABLE t2 (c int);
|
||||
INSERT INTO t1 VALUES ('aa', 1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT c FROM t2 WHERE c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
id c
|
||||
aa 1
|
||||
INSERT INTO t1 VALUES ('bb', 2), ('cc', 3), ('dd',1);
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT c FROM t2 WHERE c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
id c
|
||||
aa 1
|
||||
bb 2
|
||||
cc 3
|
||||
dd 1
|
||||
INSERT INTO t2 VALUES (2);
|
||||
CREATE TABLE t3 (c int);
|
||||
INSERT INTO t3 VALUES (1);
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT t2.c FROM t2 JOIN t3 ON t2.c=t3.c WHERE t2.c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
id c
|
||||
aa 1
|
||||
bb 2
|
||||
cc 3
|
||||
dd 1
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -126,11 +126,11 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL DDOCTYPEID_IDX NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 34 test.t2.DOCID 1
|
||||
1 PRIMARY t4 eq_ref PRIMARY PRIMARY 34 test.t2.DOCTYPEID 1
|
||||
2 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
3 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
4 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
2 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using where
|
||||
3 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using where
|
||||
4 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using where
|
||||
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using where
|
||||
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 func 1 Using where
|
||||
drop table t1, t2, t3, t4;
|
||||
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
|
@ -15,9 +15,8 @@ insert into t2 values
|
||||
(4, NULL),
|
||||
(2, NULL);
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
a oref a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp)
|
||||
from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
a oref Z
|
||||
1 1 1
|
||||
2 2 0
|
||||
3 3 NULL
|
||||
@ -25,14 +24,13 @@ NULL 4 0
|
||||
NULL 2 NULL
|
||||
explain extended
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>(`test`.`t2`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having trigcond((<cache>(`test`.`t2`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))) AS `a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp)` from `test`.`t2`
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>(`test`.`t2`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having trigcond((<cache>(`test`.`t2`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))) AS `Z` from `test`.`t2`
|
||||
explain extended
|
||||
select a, oref from t2
|
||||
where a in (select max(ie) from t1 where oref=t2.oref group by grp);
|
||||
@ -42,6 +40,16 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(select max(`test`.`t1`.`ie`) AS `max(ie)` from `test`.`t1` where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) group by `test`.`t1`.`grp` having (<cache>(`test`.`t2`.`a`) = <ref_null_helper>(max(`test`.`t1`.`ie`)))))
|
||||
select a, oref, a in (
|
||||
select max(ie) from t1 where oref=t2.oref group by grp union
|
||||
select max(ie) from t1 where oref=t2.oref group by grp
|
||||
) Z from t2;
|
||||
a oref Z
|
||||
1 1 1
|
||||
2 2 0
|
||||
3 3 NULL
|
||||
NULL 4 0
|
||||
NULL 2 NULL
|
||||
create table t3 (a int);
|
||||
insert into t3 values (NULL), (NULL);
|
||||
flush status;
|
||||
@ -81,10 +89,10 @@ explain extended
|
||||
select oref, a, a in (select a from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 4
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index; Using where
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`oref` AS `oref`,`test`.`t2`.`a` AS `a`,<in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a checking NULL where (`test`.`t1`.`oref` = `test`.`t2`.`oref`)))) AS `Z` from `test`.`t2`
|
||||
Note 1003 select `test`.`t2`.`oref` AS `oref`,`test`.`t2`.`a` AS `a`,<in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a checking NULL where (`test`.`t1`.`oref` = `test`.`t2`.`oref`) having trigcond(<is_not_null_test>(`test`.`t1`.`a`))))) AS `Z` from `test`.`t2`
|
||||
flush status;
|
||||
select oref, a from t2 where a in (select a from t1 where oref=t2.oref);
|
||||
oref a
|
||||
@ -145,9 +153,479 @@ t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3
|
||||
2 DEPENDENT SUBQUERY t1 ref_or_null a a 5 func 4 Using where
|
||||
2 DEPENDENT SUBQUERY t1 ref_or_null a a 5 func 4 Using where; Full scan on NULL key
|
||||
2 DEPENDENT SUBQUERY t2 ref a a 5 test.t1.b 1 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't3.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,<in_optimizer>(`test`.`t3`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond(((<cache>(`test`.`t3`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`)))) having trigcond(<is_not_null_test>(`test`.`t1`.`a`)))) AS `Z` from `test`.`t3`
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (a int NOT NULL, b int NOT NULL, key(a));
|
||||
insert into t1 values
|
||||
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
create table t2 like t1;
|
||||
insert into t2 select * from t1;
|
||||
update t2 set b=1;
|
||||
create table t3 (a int, oref int);
|
||||
insert into t3 values (1, 1), (NULL,1), (NULL,0);
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
a oref Z
|
||||
1 1 1
|
||||
NULL 1 NULL
|
||||
NULL 0 0
|
||||
This must show a trig_cond:
|
||||
explain extended
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3
|
||||
2 DEPENDENT SUBQUERY t1 ref a a 4 func 2 Using where; Full scan on NULL key
|
||||
2 DEPENDENT SUBQUERY t2 ref a a 4 test.t1.b 1 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't3.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t3`.`oref` AS `oref`,<in_optimizer>(`test`.`t3`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`oref`) and trigcond((<cache>(`test`.`t3`.`a`) = `test`.`t1`.`a`))))) AS `Z` from `test`.`t3`
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (oref int, grp int);
|
||||
insert into t1 (oref, grp) values
|
||||
(1, 1),
|
||||
(1, 1);
|
||||
create table t2 (oref int, a int);
|
||||
insert into t2 values
|
||||
(1, NULL),
|
||||
(2, NULL);
|
||||
select a, oref,
|
||||
a in (select count(*) from t1 group by grp having grp=t2.oref) Z from t2;
|
||||
a oref Z
|
||||
NULL 1 NULL
|
||||
NULL 2 0
|
||||
This must show a trig_cond:
|
||||
explain extended
|
||||
select a, oref,
|
||||
a in (select count(*) from t1 group by grp having grp=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>(`test`.`t2`.`a`,<exists>(select count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`grp` having ((`test`.`t1`.`grp` = `test`.`t2`.`oref`) and trigcond((<cache>(`test`.`t2`.`a`) = <ref_null_helper>(count(0))))))) AS `Z` from `test`.`t2`
|
||||
drop table t1, t2;
|
||||
create table t1 (a int, b int, primary key (a));
|
||||
insert into t1 values (1,1), (3,1),(100,1);
|
||||
create table t2 (a int, b int);
|
||||
insert into t2 values (1,1),(2,1),(NULL,1),(NULL,0);
|
||||
select a,b, a in (select a from t1 where t1.b = t2.b union select a from
|
||||
t1 where t1.b = t2.b) Z from t2 ;
|
||||
a b Z
|
||||
1 1 1
|
||||
2 1 0
|
||||
NULL 1 NULL
|
||||
NULL 0 0
|
||||
select a,b, a in (select a from t1 where t1.b = t2.b) Z from t2 ;
|
||||
a b Z
|
||||
1 1 1
|
||||
2 1 0
|
||||
NULL 1 NULL
|
||||
NULL 0 0
|
||||
drop table t1, t2;
|
||||
create table t3 (a int);
|
||||
insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, b int, oref int);
|
||||
insert into t2 values (NULL,1, 100), (NULL,2, 100);
|
||||
create table t1 (a int, b int, c int, key(a,b));
|
||||
insert into t1 select 2*A, 2*A, 100 from t3;
|
||||
explain extended select a,b, oref, (a,b) in (select a,b from t1 where c=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`b`),<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a checking NULL where ((`test`.`t1`.`c` = `test`.`t2`.`oref`) and trigcond(((<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`))) and trigcond(((<cache>(`test`.`t2`.`b`) = `test`.`t1`.`b`) or isnull(`test`.`t1`.`b`)))) having (trigcond(<is_not_null_test>(`test`.`t1`.`a`)) and trigcond(<is_not_null_test>(`test`.`t1`.`b`)))))) AS `Z` from `test`.`t2`
|
||||
select a,b, oref, (a,b) in (select a,b from t1 where c=t2.oref) Z from t2;
|
||||
a b oref Z
|
||||
NULL 1 100 0
|
||||
NULL 2 100 NULL
|
||||
create table t4 (x int);
|
||||
insert into t4 select A.a + 10*B.a from t1 A, t1 B;
|
||||
explain extended
|
||||
select a,b, oref,
|
||||
(a,b) in (select a,b from t1,t4 where c=t2.oref) Z
|
||||
from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY t1 ref_or_null a a 5 func 2 Using where; Full scan on NULL key
|
||||
2 DEPENDENT SUBQUERY t4 ALL NULL NULL NULL NULL 100 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`oref` AS `oref`,<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`b`),<exists>(select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` join `test`.`t4` where ((`test`.`t1`.`c` = `test`.`t2`.`oref`) and trigcond(((<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`) or isnull(`test`.`t1`.`a`))) and trigcond(((<cache>(`test`.`t2`.`b`) = `test`.`t1`.`b`) or isnull(`test`.`t1`.`b`)))) having (trigcond(<is_not_null_test>(`test`.`t1`.`a`)) and trigcond(<is_not_null_test>(`test`.`t1`.`b`))))) AS `Z` from `test`.`t2`
|
||||
select a,b, oref,
|
||||
(a,b) in (select a,b from t1,t4 where c=t2.oref) Z
|
||||
from t2;
|
||||
a b oref Z
|
||||
NULL 1 100 0
|
||||
NULL 2 100 NULL
|
||||
drop table t1,t2,t3,t4;
|
||||
create table t1 (oref char(4), grp int, ie1 int, ie2 int);
|
||||
insert into t1 (oref, grp, ie1, ie2) values
|
||||
('aa', 10, 2, 1),
|
||||
('aa', 10, 1, 1),
|
||||
('aa', 20, 2, 1),
|
||||
('bb', 10, 3, 1),
|
||||
('cc', 10, 4, 2),
|
||||
('cc', 20, 3, 2),
|
||||
('ee', 10, 2, 1),
|
||||
('ee', 10, 1, 2),
|
||||
('ff', 20, 2, 2),
|
||||
('ff', 20, 1, 2);
|
||||
create table t2 (oref char(4), a int, b int);
|
||||
insert into t2 values
|
||||
('ee', NULL, 1),
|
||||
('bb', 2, 1),
|
||||
('ff', 2, 2),
|
||||
('cc', 3, NULL),
|
||||
('bb', NULL, NULL),
|
||||
('aa', 1, 1),
|
||||
('dd', 1, NULL);
|
||||
alter table t1 add index idx(ie1,ie2);
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=3 and b is null ;
|
||||
oref a b Z
|
||||
cc 3 NULL NULL
|
||||
insert into t2 values ('new1', 10,10);
|
||||
insert into t1 values ('new1', 1234, 10, NULL);
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=10 and b=10;
|
||||
oref a b Z
|
||||
new1 10 10 NULL
|
||||
explain extended
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=10 and b=10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 8 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery idx idx 5 func 4 Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`oref` AS `oref`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`b`),<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on idx checking NULL where ((`test`.`t1`.`oref` = `test`.`t2`.`oref`) and trigcond(((<cache>(`test`.`t2`.`a`) = `test`.`t1`.`ie1`) or isnull(`test`.`t1`.`ie1`))) and trigcond(((<cache>(`test`.`t2`.`b`) = `test`.`t1`.`ie2`) or isnull(`test`.`t1`.`ie2`)))) having (trigcond(<is_not_null_test>(`test`.`t1`.`ie1`)) and trigcond(<is_not_null_test>(`test`.`t1`.`ie2`)))))) AS `Z` from `test`.`t2` where ((`test`.`t2`.`b` = 10) and (`test`.`t2`.`a` = 10))
|
||||
drop table t1, t2;
|
||||
create table t1 (oref char(4), grp int, ie int);
|
||||
insert into t1 (oref, grp, ie) values
|
||||
('aa', 10, 2),
|
||||
('aa', 10, 1),
|
||||
('aa', 20, NULL),
|
||||
('bb', 10, 3),
|
||||
('cc', 10, 4),
|
||||
('cc', 20, NULL),
|
||||
('ee', 10, NULL),
|
||||
('ee', 10, NULL),
|
||||
('ff', 20, 2),
|
||||
('ff', 20, 1);
|
||||
create table t2 (oref char(4), a int);
|
||||
insert into t2 values
|
||||
('ee', NULL),
|
||||
('bb', 2),
|
||||
('ff', 2),
|
||||
('cc', 3),
|
||||
('aa', 1),
|
||||
('dd', NULL),
|
||||
('bb', NULL);
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
ee NULL NULL
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 NULL
|
||||
aa 1 1
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
ff 2
|
||||
aa 1
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
bb 2
|
||||
dd NULL
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
oref a Z
|
||||
ee NULL NULL
|
||||
bb 2 0
|
||||
ff 2 0
|
||||
cc 3 NULL
|
||||
aa 1 1
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where
|
||||
a in (select min(ie) from t1 where oref=t2.oref group by grp);
|
||||
oref a
|
||||
aa 1
|
||||
select oref, a from t2 where
|
||||
a not in (select min(ie) from t1 where oref=t2.oref group by grp);
|
||||
oref a
|
||||
bb 2
|
||||
ff 2
|
||||
dd NULL
|
||||
update t1 set ie=3 where oref='ff' and ie=1;
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by
|
||||
grp) Z from t2;
|
||||
oref a Z
|
||||
ee NULL NULL
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 NULL
|
||||
aa 1 1
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp);
|
||||
oref a
|
||||
ff 2
|
||||
aa 1
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp);
|
||||
oref a
|
||||
bb 2
|
||||
dd NULL
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by
|
||||
grp having min(ie) > 1) Z from t2;
|
||||
oref a Z
|
||||
ee NULL 0
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 0
|
||||
aa 1 0
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp having min(ie) > 1);
|
||||
oref a
|
||||
ff 2
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp having min(ie) > 1);
|
||||
oref a
|
||||
ee NULL
|
||||
bb 2
|
||||
cc 3
|
||||
aa 1
|
||||
dd NULL
|
||||
alter table t1 add index idx(ie);
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery idx idx 5 func 4 Using where; Full scan on NULL key
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
ee NULL NULL
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 NULL
|
||||
aa 1 1
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
ff 2
|
||||
aa 1
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
bb 2
|
||||
dd NULL
|
||||
alter table t1 drop index idx;
|
||||
alter table t1 add index idx(oref,ie);
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 ref_or_null idx idx 10 test.t2.oref,func 4 Using where; Using index; Full scan on NULL key
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
ee NULL NULL
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 NULL
|
||||
aa 1 1
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
ff 2
|
||||
aa 1
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
bb 2
|
||||
dd NULL
|
||||
explain
|
||||
select oref, a,
|
||||
a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1) Z
|
||||
from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 ref idx idx 5 test.t2.oref 2 Using where; Using temporary; Using filesort
|
||||
select oref, a,
|
||||
a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1) Z
|
||||
from t2;
|
||||
oref a Z
|
||||
ee NULL 0
|
||||
bb 2 0
|
||||
ff 2 1
|
||||
cc 3 0
|
||||
aa 1 0
|
||||
dd NULL 0
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1);
|
||||
oref a
|
||||
ff 2
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1);
|
||||
oref a
|
||||
ee NULL
|
||||
bb 2
|
||||
cc 3
|
||||
aa 1
|
||||
dd NULL
|
||||
drop table t1,t2;
|
||||
create table t1 (oref char(4), grp int, ie1 int, ie2 int);
|
||||
insert into t1 (oref, grp, ie1, ie2) values
|
||||
('aa', 10, 2, 1),
|
||||
('aa', 10, 1, 1),
|
||||
('aa', 20, 2, 1),
|
||||
('bb', 10, 3, 1),
|
||||
('cc', 10, 4, 2),
|
||||
('cc', 20, 3, 2),
|
||||
('ee', 10, 2, 1),
|
||||
('ee', 10, 1, 2),
|
||||
('ff', 20, 2, 2),
|
||||
('ff', 20, 1, 2);
|
||||
create table t2 (oref char(4), a int, b int);
|
||||
insert into t2 values
|
||||
('ee', NULL, 1),
|
||||
('bb', 2, 1),
|
||||
('ff', 2, 2),
|
||||
('cc', 3, NULL),
|
||||
('bb', NULL, NULL),
|
||||
('aa', 1, 1),
|
||||
('dd', 1, NULL);
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
oref a b Z
|
||||
ee NULL 1 NULL
|
||||
bb 2 1 0
|
||||
ff 2 2 1
|
||||
cc 3 NULL NULL
|
||||
bb NULL NULL NULL
|
||||
aa 1 1 1
|
||||
dd 1 NULL 0
|
||||
select oref, a, b from t2 where (a,b) in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
oref a b
|
||||
ff 2 2
|
||||
aa 1 1
|
||||
select oref, a, b from t2 where (a,b) not in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
oref a b
|
||||
bb 2 1
|
||||
dd 1 NULL
|
||||
select oref, a, b,
|
||||
(a,b) in (select min(ie1),max(ie2) from t1
|
||||
where oref=t2.oref group by grp) Z
|
||||
from t2;
|
||||
oref a b Z
|
||||
ee NULL 1 0
|
||||
bb 2 1 0
|
||||
ff 2 2 0
|
||||
cc 3 NULL NULL
|
||||
bb NULL NULL NULL
|
||||
aa 1 1 1
|
||||
dd 1 NULL 0
|
||||
select oref, a, b from t2 where
|
||||
(a,b) in (select min(ie1), max(ie2) from t1 where oref=t2.oref group by grp);
|
||||
oref a b
|
||||
aa 1 1
|
||||
select oref, a, b from t2 where
|
||||
(a,b) not in (select min(ie1), max(ie2) from t1 where oref=t2.oref group by grp);
|
||||
oref a b
|
||||
ee NULL 1
|
||||
bb 2 1
|
||||
ff 2 2
|
||||
dd 1 NULL
|
||||
alter table t1 add index idx(ie1,ie2);
|
||||
explain select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery idx idx 5 func 4 Using where; Full scan on NULL key
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
oref a b Z
|
||||
ee NULL 1 NULL
|
||||
bb 2 1 0
|
||||
ff 2 2 1
|
||||
cc 3 NULL NULL
|
||||
bb NULL NULL NULL
|
||||
aa 1 1 1
|
||||
dd 1 NULL 0
|
||||
select oref, a, b from t2 where (a,b) in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
oref a b
|
||||
ff 2 2
|
||||
aa 1 1
|
||||
select oref, a, b from t2 where (a,b) not in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
oref a b
|
||||
bb 2 1
|
||||
dd 1 NULL
|
||||
explain extended
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 index_subquery idx idx 5 func 4 Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1276 Field or reference 't2.oref' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`oref` AS `oref`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`b`),<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on idx checking NULL where ((`test`.`t1`.`oref` = `test`.`t2`.`oref`) and trigcond(((<cache>(`test`.`t2`.`a`) = `test`.`t1`.`ie1`) or isnull(`test`.`t1`.`ie1`))) and trigcond(((<cache>(`test`.`t2`.`b`) = `test`.`t1`.`ie2`) or isnull(`test`.`t1`.`ie2`)))) having (trigcond(<is_not_null_test>(`test`.`t1`.`ie1`)) and trigcond(<is_not_null_test>(`test`.`t1`.`ie2`)))))) AS `Z` from `test`.`t2`
|
||||
drop table t1,t2;
|
||||
create table t1 (oref char(4), grp int, ie int primary key);
|
||||
insert into t1 (oref, grp, ie) values
|
||||
('aa', 10, 2),
|
||||
('aa', 10, 1),
|
||||
('bb', 10, 3),
|
||||
('cc', 10, 4),
|
||||
('cc', 20, 5),
|
||||
('cc', 10, 6);
|
||||
create table t2 (oref char(4), a int);
|
||||
insert into t2 values
|
||||
('ee', NULL),
|
||||
('bb', 2),
|
||||
('cc', 5),
|
||||
('cc', 2),
|
||||
('cc', NULL),
|
||||
('aa', 1),
|
||||
('bb', NULL);
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using where; Full scan on NULL key
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
oref a Z
|
||||
ee NULL 0
|
||||
bb 2 0
|
||||
cc 5 1
|
||||
cc 2 0
|
||||
cc NULL NULL
|
||||
aa 1 1
|
||||
bb NULL NULL
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
cc 5
|
||||
aa 1
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
oref a
|
||||
ee NULL
|
||||
bb 2
|
||||
cc 2
|
||||
explain
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 7
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using where; Using temporary; Using filesort
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
oref a Z
|
||||
ee NULL 0
|
||||
bb 2 0
|
||||
cc 5 1
|
||||
cc 2 0
|
||||
cc NULL NULL
|
||||
aa 1 1
|
||||
bb NULL NULL
|
||||
drop table t1,t2;
|
||||
|
@ -1278,4 +1278,36 @@ a b
|
||||
2 b
|
||||
3 c
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL DEFAULT '0',
|
||||
a varchar(10) NOT NULL,
|
||||
b varchar(10),
|
||||
c varchar(10),
|
||||
d timestamp NOT NULL,
|
||||
PRIMARY KEY (id, a)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
fubar_id int unsigned NOT NULL DEFAULT '0',
|
||||
last_change_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (fubar_id)
|
||||
);
|
||||
CREATE TRIGGER fubar_change
|
||||
AFTER UPDATE ON t1
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 (fubar_id, last_change_time)
|
||||
SELECT DISTINCT NEW.id AS fubar_id, NOW() AS last_change_time
|
||||
FROM t1 WHERE (id = NEW.id) AND (OLD.c != NEW.c)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
last_change_time =
|
||||
IF((fubar_id = NEW.id)AND(OLD.c != NEW.c),NOW(),last_change_time);
|
||||
END
|
||||
|
|
||||
INSERT INTO t1 (id,a, b,c,d) VALUES
|
||||
(1,'a','b','c',now()),(2,'a','b','c',now());
|
||||
UPDATE t1 SET c='Bang!' WHERE id=1;
|
||||
SELECT fubar_id FROM t2;
|
||||
fubar_id
|
||||
1
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
|
@ -240,3 +240,37 @@ drop table bug18761;
|
||||
select is_const((1,2,3));
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
drop function if exists is_const;
|
||||
CREATE FUNCTION metaphon RETURNS STRING SONAME "UDF_EXAMPLE_LIB";
|
||||
CREATE FUNCTION myfunc_double RETURNS REAL SONAME "UDF_EXAMPLE_LIB";
|
||||
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
|
||||
create function f1(p1 varchar(255))
|
||||
returns varchar(255)
|
||||
begin
|
||||
return metaphon(p1);
|
||||
end//
|
||||
create function f2(p1 varchar(255))
|
||||
returns double
|
||||
begin
|
||||
return myfunc_double(p1);
|
||||
end//
|
||||
create function f3(p1 varchar(255))
|
||||
returns double
|
||||
begin
|
||||
return myfunc_int(p1);
|
||||
end//
|
||||
select f3(NULL);
|
||||
f3(NULL)
|
||||
0
|
||||
select f2(NULL);
|
||||
f2(NULL)
|
||||
NULL
|
||||
select f1(NULL);
|
||||
f1(NULL)
|
||||
NULL
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop function f3;
|
||||
drop function metaphon;
|
||||
drop function myfunc_double;
|
||||
drop function myfunc_int;
|
||||
End of 5.0 tests.
|
||||
|
@ -3014,6 +3014,17 @@ i j
|
||||
6 3
|
||||
DROP VIEW v1, v2;
|
||||
DROP TABLE t1;
|
||||
CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL;
|
||||
SHOW CREATE VIEW v;
|
||||
View Create View
|
||||
v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select ((not(0)) * 5) AS `x`
|
||||
SELECT !0 * 5 AS x FROM DUAL;
|
||||
x
|
||||
5
|
||||
SELECT * FROM v;
|
||||
x
|
||||
5
|
||||
DROP VIEW v;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
CREATE VIEW v1 AS SELECT 'The\ZEnd';
|
||||
SELECT * FROM v1;
|
||||
|
@ -163,6 +163,17 @@ delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
|
||||
delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and
|
||||
# non-restricting WHERE is present.
|
||||
#
|
||||
create table t1(f1 int primary key);
|
||||
insert into t1 values (4),(3),(1),(2);
|
||||
delete from t1 where (@a:= f1) order by f1 limit 1;
|
||||
select @a;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -58,4 +58,32 @@ insert into t2 values (1, 'bword'), (3, 'aword'), (5, '');
|
||||
select * from t1 left join t2 on m_id = id where match(d, e, f) against ('+aword +bword' in boolean mode);
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# BUG#25637: LEFT JOIN with BOOLEAN FULLTEXT loses left table matches
|
||||
# (this is actually the same bug as bug #14708)
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id int(10) NOT NULL auto_increment,
|
||||
link int(10) default NULL,
|
||||
name mediumtext default NULL,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT (name)
|
||||
);
|
||||
INSERT INTO t1 VALUES (1, 1, 'string');
|
||||
INSERT INTO t1 VALUES (2, 0, 'string');
|
||||
CREATE TABLE t2 (
|
||||
id int(10) NOT NULL auto_increment,
|
||||
name mediumtext default NULL,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT (name)
|
||||
);
|
||||
INSERT INTO t2 VALUES (1, 'string');
|
||||
|
||||
SELECT t1.*, MATCH(t1.name) AGAINST('string') AS relevance
|
||||
FROM t1 LEFT JOIN t2 ON t1.link = t2.id
|
||||
WHERE MATCH(t1.name, t2.name) AGAINST('string' IN BOOLEAN MODE);
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -261,5 +261,41 @@ select some_id from t1 where some_id not in('-1', '0');
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# BUG#20420: optimizer reports wrong keys on left join with IN
|
||||
#
|
||||
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
|
||||
INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
|
||||
|
||||
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
|
||||
INSERT INTO t2 VALUES (3,2),(4,2);
|
||||
|
||||
CREATE TABLE t3 (a int PRIMARY KEY);
|
||||
INSERT INTO t3 VALUES (1),(2),(3),(4);
|
||||
|
||||
CREATE TABLE t4 (a int PRIMARY KEY);
|
||||
INSERT INTO t4 VALUES (1),(2);
|
||||
|
||||
EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
|
||||
JOIN t1 ON t3.a=t1.a
|
||||
JOIN t2 ON t3.a=t2.a
|
||||
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
|
||||
|
||||
SELECT STRAIGHT_JOIN * FROM t3
|
||||
JOIN t1 ON t3.a=t1.a
|
||||
JOIN t2 ON t3.a=t2.a
|
||||
JOIN t4 WHERE t4.a IN (t1.b, t2.b);
|
||||
|
||||
EXPLAIN SELECT STRAIGHT_JOIN
|
||||
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
|
||||
FROM t3, t1, t2
|
||||
WHERE t3.a=t1.a AND t3.a=t2.a;
|
||||
|
||||
SELECT STRAIGHT_JOIN
|
||||
(SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
|
||||
FROM t3, t1, t2
|
||||
WHERE t3.a=t1.a AND t3.a=t2.a;
|
||||
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -730,6 +730,14 @@ EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#23409: ENCODE() and DECODE() functions aren't printed correctly
|
||||
#
|
||||
create table t1(f1 varchar(4));
|
||||
explain extended select encode(f1,'zxcv') as 'enc' from t1;
|
||||
explain extended select decode(f1,'zxcv') as 'enc' from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -701,3 +701,54 @@ EXPLAIN SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
|
||||
SELECT b, sum(1) FROM t1 GROUP BY b;
|
||||
SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1),(2,1),(3,2),(4,2),(5,3),(6,3);
|
||||
|
||||
SET SQL_MODE = 'ONLY_FULL_GROUP_BY';
|
||||
SELECT MAX(a)-MIN(a) FROM t1 GROUP BY b;
|
||||
SELECT CEILING(MIN(a)) FROM t1 GROUP BY b;
|
||||
SELECT CASE WHEN AVG(a)>=0 THEN 'Positive' ELSE 'Negative' END FROM t1
|
||||
GROUP BY b;
|
||||
SELECT a + 1 FROM t1 GROUP BY a;
|
||||
--error ER_WRONG_FIELD_WITH_GROUP
|
||||
SELECT a + b FROM t1 GROUP BY b;
|
||||
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1)
|
||||
FROM t1 AS t1_outer;
|
||||
SELECT 1 FROM t1 as t1_outer GROUP BY a
|
||||
HAVING (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1);
|
||||
--error ER_WRONG_FIELD_WITH_GROUP
|
||||
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
SELECT 1 FROM t1 as t1_outer GROUP BY a
|
||||
HAVING (SELECT t1_outer.b FROM t1 AS t1_inner LIMIT 1);
|
||||
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1)
|
||||
FROM t1 AS t1_outer;
|
||||
--error ER_WRONG_FIELD_WITH_GROUP
|
||||
SELECT (SELECT SUM(t1_outer.a) FROM t1 AS t1_inner LIMIT 1)
|
||||
FROM t1 AS t1_outer GROUP BY t1_outer.b;
|
||||
|
||||
SELECT 1 FROM t1 as t1_outer
|
||||
WHERE (SELECT t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1);
|
||||
|
||||
SELECT b FROM t1 GROUP BY b HAVING CEILING(b) > 0;
|
||||
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING b = 2 OR b = 3 OR SUM(a) > 12;
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING ROW (b,b) = ROW (1,1);
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
SELECT 1 FROM t1 GROUP BY b HAVING a = 2;
|
||||
--error ER_INVALID_GROUP_FUNC_USE
|
||||
SELECT 1 FROM t1 GROUP BY SUM(b);
|
||||
--error ER_WRONG_FIELD_WITH_GROUP
|
||||
SELECT b FROM t1 AS t1_outer GROUP BY a HAVING t1_outer.a IN
|
||||
(SELECT SUM(t1_inner.b)+t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.a
|
||||
HAVING SUM(t1_inner.b)+t1_outer.b > 5);
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE = '';
|
||||
|
@ -198,3 +198,21 @@ select row_count();
|
||||
insert into t1 values (5, 5) on duplicate key update data= data + 10;
|
||||
select row_count();
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#25123: ON DUPLICATE KEY clause allows fields not from the insert table
|
||||
#
|
||||
create table t1 (f1 int unique, f2 int);
|
||||
create table t2 (f3 int, f4 int);
|
||||
create view v1 as select * from t1, t2 where f1= f3;
|
||||
insert into t1 values (1,11), (2,22);
|
||||
insert into t2 values (1,12), (2,24);
|
||||
--error 1393
|
||||
insert into v1 (f1) values (3) on duplicate key update f3= f3 + 10;
|
||||
insert into v1 (f1) values (3) on duplicate key update f1= f3 + 10;
|
||||
select * from t1;
|
||||
insert into v1 (f1) values (3) on duplicate key update f1= f3 + 10;
|
||||
select * from t1;
|
||||
drop view v1;
|
||||
drop table t1,t2;
|
||||
|
||||
|
@ -525,6 +525,49 @@ explain select a from t1 where a > 'x';
|
||||
select a from t1 where a > 'x';
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #24776: assertion abort for 'range checked for each record'
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
|
||||
OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid',
|
||||
OXLEFT int NOT NULL DEFAULT '0',
|
||||
OXRIGHT int NOT NULL DEFAULT '0',
|
||||
OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (OXID),
|
||||
KEY OXNID (OXID),
|
||||
KEY OXLEFT (OXLEFT),
|
||||
KEY OXRIGHT (OXRIGHT),
|
||||
KEY OXROOTID (OXROOTID)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9,
|
||||
'd8c4177d09f8b11f5.52725521'),
|
||||
('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11,
|
||||
'd8c4177d09f8b11f5.52725521');
|
||||
|
||||
EXPLAIN
|
||||
SELECT s.oxid FROM t1 v, t1 s
|
||||
WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
|
||||
v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
|
||||
s.oxleft > v.oxleft AND s.oxleft < v.oxright;
|
||||
|
||||
SELECT s.oxid FROM t1 v, t1 s
|
||||
WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
|
||||
v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
|
||||
s.oxleft > v.oxleft AND s.oxleft < v.oxright;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -3103,6 +3103,16 @@ SELECT t3.a FROM t1,t2,t3
|
||||
t3.c IN ('bb','ee');
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
#
|
||||
# Bug#25172: Not checked buffer size leads to a server crash
|
||||
#
|
||||
CREATE TABLE t1 ( f1 int primary key, f2 int, f3 int, f4 int, f5 int, f6 int, checked_out int);
|
||||
CREATE TABLE t2 ( f11 int PRIMARY KEY );
|
||||
INSERT INTO t1 VALUES (1,1,1,0,0,0,0),(2,1,1,3,8,1,0),(3,1,1,4,12,1,0);
|
||||
INSERT INTO t2 VALUES (62);
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON f11 = t1.checked_out GROUP BY f1 ORDER BY f2, f3, f4, f5 LIMIT 0, 1;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug#6298: LIMIT #, -1 no longer works to set start with no end limit
|
||||
|
@ -2508,3 +2508,37 @@ SELECT SQL_NO_CACHE COUNT(*)
|
||||
FROM t1) t;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #25219: EXIST subquery with UNION over a mix of
|
||||
# correlated and uncorrelated selects
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id char(4) PRIMARY KEY, c int);
|
||||
CREATE TABLE t2 (c int);
|
||||
|
||||
INSERT INTO t1 VALUES ('aa', 1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT c FROM t2 WHERE c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
|
||||
INSERT INTO t1 VALUES ('bb', 2), ('cc', 3), ('dd',1);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT c FROM t2 WHERE c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
|
||||
INSERT INTO t2 VALUES (2);
|
||||
CREATE TABLE t3 (c int);
|
||||
INSERT INTO t3 VALUES (1);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT t2.c FROM t2 JOIN t3 ON t2.c=t3.c WHERE t2.c=1
|
||||
UNION
|
||||
SELECT c from t2 WHERE c=t1.c);
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -16,13 +16,14 @@ insert into t1 (oref, grp, ie) values
|
||||
(3, 1, 4),
|
||||
(3, 2, NULL);
|
||||
|
||||
# Ok, for
|
||||
# Ok, for
|
||||
# select max(ie) from t1 where oref=PARAM group by grp
|
||||
# we'll have:
|
||||
# 1 -> (1, NULL) matching + NULL
|
||||
# 2 -> (3) non-matching
|
||||
# 3 -> (3, NULL) non-matching + NULL
|
||||
# 4 -> () nothing.
|
||||
# PARAM subquery result
|
||||
# 1 -> {(1), (NULL)} matching + NULL
|
||||
# 2 -> {(3)} non-matching
|
||||
# 3 -> {(3), (NULL)} non-matching + NULL
|
||||
# 4 -> {} empty set
|
||||
|
||||
create table t2 (oref int, a int);
|
||||
insert into t2 values
|
||||
@ -34,18 +35,21 @@ insert into t2 values
|
||||
|
||||
# true, false, null, false, null
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
|
||||
# This must have a trigcond
|
||||
explain extended
|
||||
select a, oref, a in (select max(ie)
|
||||
from t1 where oref=t2.oref group by grp) from t2;
|
||||
from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
|
||||
# This must not have a trigcond:
|
||||
explain extended
|
||||
select a, oref from t2
|
||||
where a in (select max(ie) from t1 where oref=t2.oref group by grp);
|
||||
|
||||
select a, oref, a in (
|
||||
select max(ie) from t1 where oref=t2.oref group by grp union
|
||||
select max(ie) from t1 where oref=t2.oref group by grp
|
||||
) Z from t2;
|
||||
|
||||
# Non-correlated subquery, 2 NULL evaluations
|
||||
create table t3 (a int);
|
||||
@ -135,3 +139,336 @@ from t3;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
|
||||
#
|
||||
# BUG#24085: Wrong query result for "NULL IN (SELECT ... UNION SELECT ...)"
|
||||
#
|
||||
|
||||
# case 1: NULL IN (SELECT not_null_val FROM ...) w/o HAVING/GROUP-BY/etc
|
||||
create table t1 (a int NOT NULL, b int NOT NULL, key(a));
|
||||
insert into t1 values
|
||||
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
|
||||
create table t2 like t1;
|
||||
insert into t2 select * from t1;
|
||||
update t2 set b=1;
|
||||
|
||||
create table t3 (a int, oref int);
|
||||
insert into t3 values (1, 1), (NULL,1), (NULL,0);
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
|
||||
--echo This must show a trig_cond:
|
||||
explain extended
|
||||
select a, oref,
|
||||
t3.a in (select t1.a from t1, t2 where t1.b=t2.a and t2.b=t3.oref) Z
|
||||
from t3;
|
||||
drop table t1,t2,t3;
|
||||
|
||||
|
||||
# case 2: NULL IN (SELECT not_null_val FROM) where SELECT has GROUP BY
|
||||
create table t1 (oref int, grp int);
|
||||
insert into t1 (oref, grp) values
|
||||
(1, 1),
|
||||
(1, 1);
|
||||
|
||||
# Ok, for
|
||||
# select count(*) from t1 group by grp having grp=PARAM
|
||||
# we'll have:
|
||||
# PARAM subuqery result
|
||||
# 1 -> {(2)}
|
||||
# 2 -> {} - empty set
|
||||
create table t2 (oref int, a int);
|
||||
insert into t2 values
|
||||
(1, NULL),
|
||||
(2, NULL);
|
||||
|
||||
select a, oref,
|
||||
a in (select count(*) from t1 group by grp having grp=t2.oref) Z from t2;
|
||||
|
||||
--echo This must show a trig_cond:
|
||||
explain extended
|
||||
select a, oref,
|
||||
a in (select count(*) from t1 group by grp having grp=t2.oref) Z from t2;
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
create table t1 (a int, b int, primary key (a));
|
||||
insert into t1 values (1,1), (3,1),(100,1);
|
||||
create table t2 (a int, b int);
|
||||
insert into t2 values (1,1),(2,1),(NULL,1),(NULL,0);
|
||||
|
||||
select a,b, a in (select a from t1 where t1.b = t2.b union select a from
|
||||
t1 where t1.b = t2.b) Z from t2 ;
|
||||
select a,b, a in (select a from t1 where t1.b = t2.b) Z from t2 ;
|
||||
drop table t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# BUG#24127: Incorrect results of row-based subqueries with NULLs on the left side.
|
||||
#
|
||||
create table t3 (a int);
|
||||
insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, b int, oref int);
|
||||
insert into t2 values (NULL,1, 100), (NULL,2, 100);
|
||||
|
||||
create table t1 (a int, b int, c int, key(a,b));
|
||||
insert into t1 select 2*A, 2*A, 100 from t3;
|
||||
|
||||
# First test index subquery engine
|
||||
explain extended select a,b, oref, (a,b) in (select a,b from t1 where c=t2.oref) Z from t2;
|
||||
select a,b, oref, (a,b) in (select a,b from t1 where c=t2.oref) Z from t2;
|
||||
|
||||
# Then check that we do turn off 'ref' scans in the subquery
|
||||
create table t4 (x int);
|
||||
insert into t4 select A.a + 10*B.a from t1 A, t1 B;
|
||||
explain extended
|
||||
select a,b, oref,
|
||||
(a,b) in (select a,b from t1,t4 where c=t2.oref) Z
|
||||
from t2;
|
||||
select a,b, oref,
|
||||
(a,b) in (select a,b from t1,t4 where c=t2.oref) Z
|
||||
from t2;
|
||||
|
||||
drop table t1,t2,t3,t4;
|
||||
|
||||
# More tests for tricky multi-column cases, where some of pushed-down
|
||||
# equalities are used for index lookups and some arent.
|
||||
create table t1 (oref char(4), grp int, ie1 int, ie2 int);
|
||||
insert into t1 (oref, grp, ie1, ie2) values
|
||||
('aa', 10, 2, 1),
|
||||
('aa', 10, 1, 1),
|
||||
('aa', 20, 2, 1),
|
||||
('bb', 10, 3, 1),
|
||||
('cc', 10, 4, 2),
|
||||
('cc', 20, 3, 2),
|
||||
|
||||
('ee', 10, 2, 1),
|
||||
('ee', 10, 1, 2),
|
||||
|
||||
('ff', 20, 2, 2),
|
||||
('ff', 20, 1, 2);
|
||||
create table t2 (oref char(4), a int, b int);
|
||||
insert into t2 values
|
||||
('ee', NULL, 1),
|
||||
('bb', 2, 1),
|
||||
('ff', 2, 2),
|
||||
('cc', 3, NULL),
|
||||
('bb', NULL, NULL),
|
||||
('aa', 1, 1),
|
||||
('dd', 1, NULL);
|
||||
alter table t1 add index idx(ie1,ie2);
|
||||
|
||||
--cc 3 NULL NULL
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=3 and b is null ;
|
||||
insert into t2 values ('new1', 10,10);
|
||||
insert into t1 values ('new1', 1234, 10, NULL);
|
||||
-- new1, 10, 10, NULL,
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=10 and b=10;
|
||||
explain extended
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2 where a=10 and b=10;
|
||||
drop table t1, t2;
|
||||
|
||||
# Now test different column types:
|
||||
create table t1 (oref char(4), grp int, ie int);
|
||||
insert into t1 (oref, grp, ie) values
|
||||
('aa', 10, 2),
|
||||
('aa', 10, 1),
|
||||
('aa', 20, NULL),
|
||||
|
||||
('bb', 10, 3),
|
||||
|
||||
('cc', 10, 4),
|
||||
('cc', 20, NULL),
|
||||
|
||||
('ee', 10, NULL),
|
||||
('ee', 10, NULL),
|
||||
|
||||
('ff', 20, 2),
|
||||
('ff', 20, 1);
|
||||
|
||||
create table t2 (oref char(4), a int);
|
||||
insert into t2 values
|
||||
('ee', NULL),
|
||||
('bb', 2),
|
||||
('ff', 2),
|
||||
('cc', 3),
|
||||
('aa', 1),
|
||||
('dd', NULL),
|
||||
('bb', NULL);
|
||||
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
|
||||
select oref, a from t2 where
|
||||
a in (select min(ie) from t1 where oref=t2.oref group by grp);
|
||||
|
||||
select oref, a from t2 where
|
||||
a not in (select min(ie) from t1 where oref=t2.oref group by grp);
|
||||
|
||||
#
|
||||
update t1 set ie=3 where oref='ff' and ie=1;
|
||||
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by
|
||||
grp) Z from t2;
|
||||
|
||||
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp);
|
||||
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp);
|
||||
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by
|
||||
grp having min(ie) > 1) Z from t2;
|
||||
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp having min(ie) > 1);
|
||||
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where
|
||||
oref=t2.oref group by grp having min(ie) > 1);
|
||||
|
||||
#
|
||||
alter table t1 add index idx(ie);
|
||||
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
|
||||
alter table t1 drop index idx;
|
||||
alter table t1 add index idx(oref,ie);
|
||||
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
explain
|
||||
select oref, a,
|
||||
a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1) Z
|
||||
from t2;
|
||||
|
||||
select oref, a,
|
||||
a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1) Z
|
||||
from t2;
|
||||
|
||||
select oref, a from t2 where a in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1);
|
||||
|
||||
select oref, a from t2 where a not in (select min(ie) from t1 where oref=t2.oref
|
||||
group by grp having min(ie) > 1);
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
create table t1 (oref char(4), grp int, ie1 int, ie2 int);
|
||||
insert into t1 (oref, grp, ie1, ie2) values
|
||||
('aa', 10, 2, 1),
|
||||
('aa', 10, 1, 1),
|
||||
('aa', 20, 2, 1),
|
||||
|
||||
('bb', 10, 3, 1),
|
||||
|
||||
('cc', 10, 4, 2),
|
||||
('cc', 20, 3, 2),
|
||||
|
||||
('ee', 10, 2, 1),
|
||||
('ee', 10, 1, 2),
|
||||
|
||||
('ff', 20, 2, 2),
|
||||
('ff', 20, 1, 2);
|
||||
|
||||
create table t2 (oref char(4), a int, b int);
|
||||
insert into t2 values
|
||||
('ee', NULL, 1),
|
||||
('bb', 2, 1),
|
||||
('ff', 2, 2),
|
||||
('cc', 3, NULL),
|
||||
('bb', NULL, NULL),
|
||||
('aa', 1, 1),
|
||||
('dd', 1, NULL);
|
||||
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, b from t2 where (a,b) in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a, b from t2 where (a,b) not in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a, b,
|
||||
(a,b) in (select min(ie1),max(ie2) from t1
|
||||
where oref=t2.oref group by grp) Z
|
||||
from t2;
|
||||
|
||||
select oref, a, b from t2 where
|
||||
(a,b) in (select min(ie1), max(ie2) from t1 where oref=t2.oref group by grp);
|
||||
|
||||
select oref, a, b from t2 where
|
||||
(a,b) not in (select min(ie1), max(ie2) from t1 where oref=t2.oref group by grp);
|
||||
|
||||
alter table t1 add index idx(ie1,ie2);
|
||||
|
||||
explain select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, b from t2 where (a,b) in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a, b from t2 where (a,b) not in (select ie1,ie2 from t1 where oref=t2.oref);
|
||||
|
||||
explain extended
|
||||
select oref, a, b, (a,b) in (select ie1,ie2 from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
create table t1 (oref char(4), grp int, ie int primary key);
|
||||
insert into t1 (oref, grp, ie) values
|
||||
('aa', 10, 2),
|
||||
('aa', 10, 1),
|
||||
|
||||
('bb', 10, 3),
|
||||
|
||||
('cc', 10, 4),
|
||||
('cc', 20, 5),
|
||||
('cc', 10, 6);
|
||||
|
||||
create table t2 (oref char(4), a int);
|
||||
insert into t2 values
|
||||
('ee', NULL),
|
||||
('bb', 2),
|
||||
('cc', 5),
|
||||
('cc', 2),
|
||||
('cc', NULL),
|
||||
('aa', 1),
|
||||
('bb', NULL);
|
||||
|
||||
explain select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a, a in (select ie from t1 where oref=t2.oref) Z from t2;
|
||||
|
||||
select oref, a from t2 where a in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
select oref, a from t2 where a not in (select ie from t1 where oref=t2.oref);
|
||||
|
||||
explain
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
|
||||
select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z from t2;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
|
@ -1554,4 +1554,50 @@ select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#25398: crash when a trigger contains a SELECT with
|
||||
# trigger fields in the select list under DISTINCT
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL DEFAULT '0',
|
||||
a varchar(10) NOT NULL,
|
||||
b varchar(10),
|
||||
c varchar(10),
|
||||
d timestamp NOT NULL,
|
||||
PRIMARY KEY (id, a)
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
fubar_id int unsigned NOT NULL DEFAULT '0',
|
||||
last_change_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (fubar_id)
|
||||
);
|
||||
|
||||
DELIMITER |;
|
||||
|
||||
CREATE TRIGGER fubar_change
|
||||
AFTER UPDATE ON t1
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 (fubar_id, last_change_time)
|
||||
SELECT DISTINCT NEW.id AS fubar_id, NOW() AS last_change_time
|
||||
FROM t1 WHERE (id = NEW.id) AND (OLD.c != NEW.c)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
last_change_time =
|
||||
IF((fubar_id = NEW.id)AND(OLD.c != NEW.c),NOW(),last_change_time);
|
||||
END
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
INSERT INTO t1 (id,a, b,c,d) VALUES
|
||||
(1,'a','b','c',now()),(2,'a','b','c',now());
|
||||
|
||||
UPDATE t1 SET c='Bang!' WHERE id=1;
|
||||
|
||||
SELECT fubar_id FROM t2;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -242,3 +242,50 @@ drop table bug18761;
|
||||
select is_const((1,2,3));
|
||||
|
||||
drop function if exists is_const;
|
||||
|
||||
#
|
||||
# Bug #25382: Passing NULL to an UDF called from stored procedures
|
||||
# crashes server
|
||||
#
|
||||
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
|
||||
eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB";
|
||||
|
||||
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
|
||||
eval CREATE FUNCTION myfunc_double RETURNS REAL SONAME "$UDF_EXAMPLE_LIB";
|
||||
|
||||
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
|
||||
eval CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
|
||||
|
||||
delimiter //;
|
||||
create function f1(p1 varchar(255))
|
||||
returns varchar(255)
|
||||
begin
|
||||
return metaphon(p1);
|
||||
end//
|
||||
|
||||
create function f2(p1 varchar(255))
|
||||
returns double
|
||||
begin
|
||||
return myfunc_double(p1);
|
||||
end//
|
||||
|
||||
create function f3(p1 varchar(255))
|
||||
returns double
|
||||
begin
|
||||
return myfunc_int(p1);
|
||||
end//
|
||||
|
||||
delimiter ;//
|
||||
|
||||
select f3(NULL);
|
||||
select f2(NULL);
|
||||
select f1(NULL);
|
||||
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop function f3;
|
||||
drop function metaphon;
|
||||
drop function myfunc_double;
|
||||
drop function myfunc_int;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
@ -2959,6 +2959,17 @@ SELECT * FROM t1;
|
||||
DROP VIEW v1, v2;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #25580: !0 as an operand in a select expression of a view
|
||||
#
|
||||
|
||||
CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL;
|
||||
SHOW CREATE VIEW v;
|
||||
|
||||
SELECT !0 * 5 AS x FROM DUAL;
|
||||
SELECT * FROM v;
|
||||
|
||||
DROP VIEW v;
|
||||
|
||||
#
|
||||
# BUG#24293: '\Z' token is not handled correctly in views
|
||||
|
Reference in New Issue
Block a user