mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
fixed bugs in temporary tables in subselect implementation (SCRUM)
merging with switching on static tables optimization (SCRUM) fixed subselects with uncacheable results added test for fixed bugs from bugreports mysql-test/r/subselect.result: changes in subselect test after switching on static tables optimization fixed bug test added uncacheable subselects mysql-test/t/subselect.test: changes in subselect test after switching on static tables optimization fixed bug test added uncacheable subselects sql/item_create.cc: fixed subselects with uncacheable results sql/item_func.cc: fixed subselects with uncacheable results sql/item_subselect.cc: fixed subselects with uncacheable results clean up sql/item_subselect.h: fixed subselects with uncacheable results sql/sql_lex.cc: fixed subselects with uncacheable results sql/sql_lex.h: fixed subselects with uncacheable results sql/sql_select.cc: fixed bugs in temporary tables in subselect implementation fixed subselects with uncacheable results sql/sql_union.cc: fixed subselects with uncacheable results sql/sql_yacc.yy: fixed subselects with uncacheable results
This commit is contained in:
@@ -278,7 +278,7 @@ NULL 1
|
||||
explain select (select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a), a 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 SUBSELECT t1 system NULL NULL NULL NULL 1 Using where
|
||||
2 DEPENDENT SUBSELECT t1 system NULL NULL NULL NULL 1
|
||||
3 DEPENDENT UNION t5 ALL NULL NULL NULL NULL 2 Using where
|
||||
select (select a from t1 where t1.a=t2.a union all select a from t5 where t5.a=t2.a), a from t2;
|
||||
Subselect returns more than 1 record
|
||||
@@ -321,9 +321,9 @@ INSERT INTO t8 (pseudo,email) VALUES ('2joce1','2test1');
|
||||
EXPLAIN SELECT pseudo,(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce')) FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t8 const PRIMARY PRIMARY 35 const 1
|
||||
4 SUBSELECT t8 const PRIMARY PRIMARY 35 const 1
|
||||
4 SUBSELECT t8 const PRIMARY PRIMARY 35 1
|
||||
2 SUBSELECT t8 const PRIMARY PRIMARY 35 const 1
|
||||
3 SUBSELECT t8 const PRIMARY PRIMARY 35 const 1
|
||||
3 SUBSELECT t8 const PRIMARY PRIMARY 35 1
|
||||
SELECT pseudo FROM t8 WHERE pseudo=(SELECT pseudo,email FROM
|
||||
t8 WHERE pseudo='joce');
|
||||
Cardinality error (more/less than 1 columns)
|
||||
@@ -397,33 +397,51 @@ SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) b;
|
||||
Unknown column 'a' in 'having clause'
|
||||
SELECT 1 IN (SELECT 1 FROM t2 HAVING a);
|
||||
Unknown column 'a' in 'having clause'
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY date);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY date HAVING topic < 4100);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic IN (SELECT SUM(topic) FROM t1);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY date);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY date HAVING topic < 4100);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = any (SELECT SUM(topic) FROM t1);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY date);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY date HAVING topic < 4100);
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY topic);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
joce 43506 2002-10-22 joce
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic IN (SELECT SUM(topic) FROM t1);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY topic);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
joce 43506 2002-10-22 joce
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = any (SELECT SUM(topic) FROM t1);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
joce 43506 2002-10-22 joce
|
||||
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100) from t2;
|
||||
mot topic date pseudo topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100)
|
||||
joce 40143 2002-10-22 joce 1
|
||||
joce 43506 2002-10-22 joce 1
|
||||
SELECT * from t2 where topic = all (SELECT SUM(topic) FROM t2);
|
||||
mot topic date pseudo
|
||||
SELECT * from t2 where topic <> any (SELECT SUM(topic) FROM t2);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
joce 43506 2002-10-22 joce
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
mot topic date pseudo
|
||||
joce 40143 2002-10-22 joce
|
||||
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000) from t2;
|
||||
mot topic date pseudo topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000)
|
||||
joce 40143 2002-10-22 joce 1
|
||||
joce 43506 2002-10-22 joce 0
|
||||
drop table t1,t2;
|
||||
CREATE TABLE `t1` (
|
||||
`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
@@ -850,3 +868,86 @@ do (SELECT a from t1);
|
||||
Table 'test.t1' doesn't exist
|
||||
set @a:=(SELECT a from t1);
|
||||
Table 'test.t1' doesn't exist
|
||||
CREATE TABLE t1 (a int, KEY(a));
|
||||
HANDLER t1 OPEN;
|
||||
HANDLER t1 READ a=((SELECT 1));
|
||||
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use
|
||||
HANDLER t1 CLOSE;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
insert into t1 values (1),(2);
|
||||
insert into t2 values (1);
|
||||
select a from t1 where a in (select a from t1 where a in (select b from t2));
|
||||
a
|
||||
1
|
||||
drop table t1, t2;
|
||||
create table t1 (a int, b int);
|
||||
create table t2 like t1;
|
||||
insert into t1 values (1,2),(1,3),(1,4),(1,5);
|
||||
insert into t2 values (1,2),(1,3);
|
||||
select * from t1 where row(a,b) in (select a,b from t2);
|
||||
a b
|
||||
1 2
|
||||
1 3
|
||||
drop table t1, t2;
|
||||
CREATE TABLE `t1` (`i` int(11) NOT NULL default '0',PRIMARY KEY (`i`)) TYPE=MyISAM CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
|
||||
Invalid use of group function
|
||||
drop table t1;
|
||||
CREATE TABLE t (a int(1));
|
||||
EXPLAIN SELECT (SELECT RAND() FROM t) FROM t;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
||||
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t) FROM t;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
||||
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t) FROM t;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
||||
drop table t;
|
||||
CREATE TABLE `t1` (
|
||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||
`topic` mediumint(8) unsigned NOT NULL default '0',
|
||||
`date` date NOT NULL default '0000-00-00',
|
||||
`pseudo` varchar(35) character set latin1 NOT NULL default '',
|
||||
PRIMARY KEY (`mot`,`pseudo`,`date`,`topic`),
|
||||
KEY `pseudo` (`pseudo`,`date`,`topic`),
|
||||
KEY `topic` (`topic`)
|
||||
) TYPE=MyISAM CHARSET=latin1 ROW_FORMAT=DYNAMIC;
|
||||
CREATE TABLE `t2` (
|
||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||
`topic` mediumint(8) unsigned NOT NULL default '0',
|
||||
`date` date NOT NULL default '0000-00-00',
|
||||
`pseudo` varchar(35) character set latin1 NOT NULL default '',
|
||||
PRIMARY KEY (`mot`,`pseudo`,`date`,`topic`),
|
||||
KEY `pseudo` (`pseudo`,`date`,`topic`),
|
||||
KEY `topic` (`topic`)
|
||||
) TYPE=MyISAM CHARSET=latin1 ROW_FORMAT=DYNAMIC;
|
||||
CREATE TABLE `t3` (
|
||||
`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`maxnumrep` int(10) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`numeropost`),
|
||||
UNIQUE KEY `maxnumrep` (`maxnumrep`)
|
||||
) TYPE=MyISAM CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES ('joce','1','','joce'),('test','2','','test');
|
||||
INSERT INTO t2 VALUES ('joce','1','','joce'),('test','2','','test');
|
||||
INSERT INTO t3 VALUES (1,1);
|
||||
SELECT DISTINCT topic FROM t2 WHERE NOT EXISTS(SELECT * FROM t3 WHERE
|
||||
numeropost=topic);
|
||||
topic
|
||||
2
|
||||
select * from t1;
|
||||
mot topic date pseudo
|
||||
joce 1 0000-00-00 joce
|
||||
test 2 0000-00-00 test
|
||||
DELETE FROM t1 WHERE topic IN (SELECT DISTINCT topic FROM t2 WHERE NOT
|
||||
EXISTS(SELECT * FROM t3 WHERE numeropost=topic));
|
||||
select * from t1;
|
||||
mot topic date pseudo
|
||||
joce 1 0000-00-00 joce
|
||||
drop table t1, t2, t3;
|
||||
|
||||
@@ -215,13 +215,13 @@ SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY topic HAVING t
|
||||
SELECT * from t2 where topic = any (SELECT SUM(topic) FROM t1);
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic);
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100);
|
||||
SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100;
|
||||
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100) from t2;
|
||||
SELECT * from t2 where topic = all (SELECT SUM(topic) FROM t2);
|
||||
SELECT * from t2 where topic <> any (SELECT SUM(topic) FROM t2);
|
||||
delete from t2 where topic=40143;
|
||||
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100) from t2;
|
||||
SELECT *, topic as fff, exists (SELECT topic FROM t2 GROUP BY topic HAVING topic < 4100 and fff = topic) from t2;
|
||||
SELECT * from t2 where topic IN (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
SELECT * from t2 where topic = any (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
SELECT * from t2 where topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000);
|
||||
SELECT *, topic = all (SELECT topic FROM t2 GROUP BY topic HAVING topic < 41000) from t2;
|
||||
drop table t1,t2;
|
||||
|
||||
#forumconthardwarefr7
|
||||
@@ -483,3 +483,79 @@ drop table t1;
|
||||
do (SELECT a from t1);
|
||||
-- error 1146
|
||||
set @a:=(SELECT a from t1);
|
||||
|
||||
CREATE TABLE t1 (a int, KEY(a));
|
||||
HANDLER t1 OPEN;
|
||||
-- error 1149
|
||||
HANDLER t1 READ a=((SELECT 1));
|
||||
HANDLER t1 CLOSE;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
insert into t1 values (1),(2);
|
||||
insert into t2 values (1);
|
||||
select a from t1 where a in (select a from t1 where a in (select b from t2));
|
||||
drop table t1, t2;
|
||||
|
||||
create table t1 (a int, b int);
|
||||
create table t2 like t1;
|
||||
insert into t1 values (1,2),(1,3),(1,4),(1,5);
|
||||
insert into t2 values (1,2),(1,3);
|
||||
select * from t1 where row(a,b) in (select a,b from t2);
|
||||
drop table t1, t2;
|
||||
|
||||
CREATE TABLE `t1` (`i` int(11) NOT NULL default '0',PRIMARY KEY (`i`)) TYPE=MyISAM CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
-- error 1111
|
||||
UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
|
||||
drop table t1;
|
||||
|
||||
#test of uncacheable subqueries
|
||||
CREATE TABLE t (a int(1));
|
||||
EXPLAIN SELECT (SELECT RAND() FROM t) FROM t;
|
||||
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t) FROM t;
|
||||
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t) FROM t;
|
||||
drop table t;
|
||||
|
||||
|
||||
CREATE TABLE `t1` (
|
||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||
`topic` mediumint(8) unsigned NOT NULL default '0',
|
||||
`date` date NOT NULL default '0000-00-00',
|
||||
`pseudo` varchar(35) character set latin1 NOT NULL default '',
|
||||
PRIMARY KEY (`mot`,`pseudo`,`date`,`topic`),
|
||||
KEY `pseudo` (`pseudo`,`date`,`topic`),
|
||||
KEY `topic` (`topic`)
|
||||
) TYPE=MyISAM CHARSET=latin1 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE `t2` (
|
||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||
`topic` mediumint(8) unsigned NOT NULL default '0',
|
||||
`date` date NOT NULL default '0000-00-00',
|
||||
`pseudo` varchar(35) character set latin1 NOT NULL default '',
|
||||
PRIMARY KEY (`mot`,`pseudo`,`date`,`topic`),
|
||||
KEY `pseudo` (`pseudo`,`date`,`topic`),
|
||||
KEY `topic` (`topic`)
|
||||
) TYPE=MyISAM CHARSET=latin1 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE `t3` (
|
||||
`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`maxnumrep` int(10) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`numeropost`),
|
||||
UNIQUE KEY `maxnumrep` (`maxnumrep`)
|
||||
) TYPE=MyISAM CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES ('joce','1','','joce'),('test','2','','test');
|
||||
|
||||
INSERT INTO t2 VALUES ('joce','1','','joce'),('test','2','','test');
|
||||
|
||||
INSERT INTO t3 VALUES (1,1);
|
||||
|
||||
SELECT DISTINCT topic FROM t2 WHERE NOT EXISTS(SELECT * FROM t3 WHERE
|
||||
numeropost=topic);
|
||||
select * from t1;
|
||||
DELETE FROM t1 WHERE topic IN (SELECT DISTINCT topic FROM t2 WHERE NOT
|
||||
EXISTS(SELECT * FROM t3 WHERE numeropost=topic));
|
||||
select * from t1;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
Reference in New Issue
Block a user