Move tmp_table_used to THD
Optimize depending sub querys Remove valgrind warnings
This commit is contained in:
parent
aee7346ec1
commit
48558055ed
@ -63,8 +63,7 @@ my_bool simple_command(MYSQL *mysql,enum enum_server_command command,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Clear result variables */
|
/* Clear result variables */
|
||||||
thd->net.last_error[0]=0;
|
thd->clear_error();
|
||||||
thd->net.last_errno=0;
|
|
||||||
mysql->affected_rows= ~(my_ulonglong) 0;
|
mysql->affected_rows= ~(my_ulonglong) 0;
|
||||||
|
|
||||||
thd->store_globals(); // Fix if more than one connect
|
thd->store_globals(); // Fix if more than one connect
|
||||||
|
@ -623,7 +623,7 @@ report_stats () {
|
|||||||
# Find errors
|
# Find errors
|
||||||
for i in "^Warning:" "^Error:" "^==.* at 0x"
|
for i in "^Warning:" "^Error:" "^==.* at 0x"
|
||||||
do
|
do
|
||||||
if `$GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings`
|
if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
|
||||||
then
|
then
|
||||||
found_error=1
|
found_error=1
|
||||||
fi
|
fi
|
||||||
|
@ -641,168 +641,183 @@ x y
|
|||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
||||||
No tables used
|
No tables used
|
||||||
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t2 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
INSERT INTO t VALUES (1),(2);
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1);
|
SELECT * FROM t2 WHERE id IN (SELECT 1);
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1);
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
1 PRIMARY t2 ref id id 5 const 1 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1247 Select 2 was reduced during optimisation
|
Note 1247 Select 2 was reduced during optimisation
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1+(select 1));
|
SELECT * FROM t2 WHERE id IN (SELECT 1+(select 1));
|
||||||
id
|
id
|
||||||
2
|
2
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1+(select 1));
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1+(select 1));
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t ref id id 5 const 1 Using where; Using index
|
1 PRIMARY t2 ref id id 5 const 1 Using where; Using index
|
||||||
3 SUBSELECT NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 SUBSELECT NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1247 Select 3 was reduced during optimisation
|
Note 1247 Select 3 was reduced during optimisation
|
||||||
Note 1247 Select 2 was reduced during optimisation
|
Note 1247 Select 2 was reduced during optimisation
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t index NULL id 5 NULL 2 Using where; Using index
|
1 PRIMARY t2 index NULL id 5 NULL 2 Using where; Using index
|
||||||
2 DEPENDENT SUBSELECT NULL NULL NULL NULL NULL NULL NULL No tables used
|
2 DEPENDENT SUBSELECT NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||||
id
|
id
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||||
id
|
id
|
||||||
2
|
2
|
||||||
INSERT INTO t VALUES ((SELECT * FROM t));
|
INSERT INTO t2 VALUES ((SELECT * FROM t2));
|
||||||
You can't specify target table 't' for update in FROM clause
|
You can't specify target table 't2' for update in FROM clause
|
||||||
SELECT * FROM t;
|
SELECT * FROM t2;
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
INSERT INTO t1 values (1),(1);
|
INSERT INTO t1 values (1),(1);
|
||||||
UPDATE t SET id=(SELECT * FROM t1);
|
UPDATE t2 SET id=(SELECT * FROM t1);
|
||||||
Subselect returns more than 1 record
|
Subselect returns more than 1 record
|
||||||
drop table t, t1;
|
drop table t2, t1;
|
||||||
create table t (a int);
|
create table t1 (a int);
|
||||||
insert into t values (1),(2),(3);
|
insert into t1 values (1),(2),(3);
|
||||||
select 1 IN (SELECT * from t);
|
select 1 IN (SELECT * from t1);
|
||||||
1 IN (SELECT * from t)
|
1 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 10 IN (SELECT * from t);
|
select 10 IN (SELECT * from t1);
|
||||||
10 IN (SELECT * from t)
|
10 IN (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
NULL IN (SELECT * from t)
|
NULL IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
update t set a=NULL where a=2;
|
update t1 set a=NULL where a=2;
|
||||||
select 1 IN (SELECT * from t);
|
select 1 IN (SELECT * from t1);
|
||||||
1 IN (SELECT * from t)
|
1 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 3 IN (SELECT * from t);
|
select 3 IN (SELECT * from t1);
|
||||||
3 IN (SELECT * from t)
|
3 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 10 IN (SELECT * from t);
|
select 10 IN (SELECT * from t1);
|
||||||
10 IN (SELECT * from t)
|
10 IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 1 > ALL (SELECT * from t);
|
select 1 > ALL (SELECT * from t1);
|
||||||
1 > ALL (SELECT * from t)
|
1 > ALL (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select 10 > ALL (SELECT * from t);
|
select 10 > ALL (SELECT * from t1);
|
||||||
10 > ALL (SELECT * from t)
|
10 > ALL (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 1 > ANY (SELECT * from t);
|
select 1 > ANY (SELECT * from t1);
|
||||||
1 > ANY (SELECT * from t)
|
1 > ANY (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 10 > ANY (SELECT * from t);
|
select 10 > ANY (SELECT * from t1);
|
||||||
10 > ANY (SELECT * from t)
|
10 > ANY (SELECT * from t1)
|
||||||
1
|
1
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t (a varchar(20));
|
create table t1 (a varchar(20));
|
||||||
insert into t values ('A'),('BC'),('DEF');
|
insert into t1 values ('A'),('BC'),('DEF');
|
||||||
select 'A' IN (SELECT * from t);
|
select 'A' IN (SELECT * from t1);
|
||||||
'A' IN (SELECT * from t)
|
'A' IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 'XYZS' IN (SELECT * from t);
|
select 'XYZS' IN (SELECT * from t1);
|
||||||
'XYZS' IN (SELECT * from t)
|
'XYZS' IN (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
NULL IN (SELECT * from t)
|
NULL IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
update t set a=NULL where a='BC';
|
update t1 set a=NULL where a='BC';
|
||||||
select 'A' IN (SELECT * from t);
|
select 'A' IN (SELECT * from t1);
|
||||||
'A' IN (SELECT * from t)
|
'A' IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 'DEF' IN (SELECT * from t);
|
select 'DEF' IN (SELECT * from t1);
|
||||||
'DEF' IN (SELECT * from t)
|
'DEF' IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 'XYZS' IN (SELECT * from t);
|
select 'XYZS' IN (SELECT * from t1);
|
||||||
'XYZS' IN (SELECT * from t)
|
'XYZS' IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 'A' > ALL (SELECT * from t);
|
select 'A' > ALL (SELECT * from t1);
|
||||||
'A' > ALL (SELECT * from t)
|
'A' > ALL (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select 'XYZS' > ALL (SELECT * from t);
|
select 'XYZS' > ALL (SELECT * from t1);
|
||||||
'XYZS' > ALL (SELECT * from t)
|
'XYZS' > ALL (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 'A' > ANY (SELECT * from t);
|
select 'A' > ANY (SELECT * from t1);
|
||||||
'A' > ANY (SELECT * from t)
|
'A' > ANY (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 'XYZS' > ANY (SELECT * from t);
|
select 'XYZS' > ANY (SELECT * from t1);
|
||||||
'XYZS' > ANY (SELECT * from t)
|
'XYZS' > ANY (SELECT * from t1)
|
||||||
1
|
1
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t (a float);
|
create table t1 (a float);
|
||||||
insert into t values (1.5),(2.5),(3.5);
|
insert into t1 values (1.5),(2.5),(3.5);
|
||||||
select 1.5 IN (SELECT * from t);
|
select 1.5 IN (SELECT * from t1);
|
||||||
1.5 IN (SELECT * from t)
|
1.5 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 10.5 IN (SELECT * from t);
|
select 10.5 IN (SELECT * from t1);
|
||||||
10.5 IN (SELECT * from t)
|
10.5 IN (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
NULL IN (SELECT * from t)
|
NULL IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
update t set a=NULL where a=2.5;
|
update t1 set a=NULL where a=2.5;
|
||||||
select 1.5 IN (SELECT * from t);
|
select 1.5 IN (SELECT * from t1);
|
||||||
1.5 IN (SELECT * from t)
|
1.5 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 3.5 IN (SELECT * from t);
|
select 3.5 IN (SELECT * from t1);
|
||||||
3.5 IN (SELECT * from t)
|
3.5 IN (SELECT * from t1)
|
||||||
1
|
1
|
||||||
select 10.5 IN (SELECT * from t);
|
select 10.5 IN (SELECT * from t1);
|
||||||
10.5 IN (SELECT * from t)
|
10.5 IN (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 1.5 > ALL (SELECT * from t);
|
select 1.5 > ALL (SELECT * from t1);
|
||||||
1.5 > ALL (SELECT * from t)
|
1.5 > ALL (SELECT * from t1)
|
||||||
0
|
0
|
||||||
select 10.5 > ALL (SELECT * from t);
|
select 10.5 > ALL (SELECT * from t1);
|
||||||
10.5 > ALL (SELECT * from t)
|
10.5 > ALL (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 1.5 > ANY (SELECT * from t);
|
select 1.5 > ANY (SELECT * from t1);
|
||||||
1.5 > ANY (SELECT * from t)
|
1.5 > ANY (SELECT * from t1)
|
||||||
NULL
|
NULL
|
||||||
select 10.5 > ANY (SELECT * from t);
|
select 10.5 > ANY (SELECT * from t1);
|
||||||
10.5 > ANY (SELECT * from t)
|
10.5 > ANY (SELECT * from t1)
|
||||||
1
|
1
|
||||||
explain select (select a+1) from t;
|
explain select (select a+1) from t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t ALL NULL NULL NULL NULL 3
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1247 Select 2 was reduced during optimisation
|
Note 1247 Select 2 was reduced during optimisation
|
||||||
select (select a+1) from t;
|
select (select a+1) from t1;
|
||||||
(select a+1)
|
(select a+1)
|
||||||
2.5
|
2.5
|
||||||
NULL
|
NULL
|
||||||
4.5
|
4.5
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t (a float);
|
CREATE TABLE t1 (a int(11) NOT NULL default '0', PRIMARY KEY (a));
|
||||||
select 10.5 IN (SELECT * from t LIMIT 1);
|
CREATE TABLE t2 (a int(11) default '0', INDEX (a));
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
|
||||||
|
a t1.a in (select t2.a from t2)
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
3 1
|
||||||
|
4 0
|
||||||
|
explain SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
|
||||||
|
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 SUBSELECT t2 index NULL a 5 NULL 3 Using where; Using index
|
||||||
|
drop table t1,t2;
|
||||||
|
create table t1 (a float);
|
||||||
|
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
||||||
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
|
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
|
||||||
select 10.5 IN (SELECT * from t LIMIT 1 UNION SELECT 1.5);
|
select 10.5 IN (SELECT * from t1 LIMIT 1 UNION SELECT 1.5);
|
||||||
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
|
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t1 (a int, b int, c varchar(10));
|
create table t1 (a int, b int, c varchar(10));
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
|
insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
|
||||||
@ -899,20 +914,20 @@ INSERT INTO t1 VALUES (1);
|
|||||||
UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
|
UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
|
||||||
Invalid use of group function
|
Invalid use of group function
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t (a int(1));
|
CREATE TABLE t1 (a int(1));
|
||||||
EXPLAIN SELECT (SELECT RAND() FROM t) FROM t;
|
EXPLAIN SELECT (SELECT RAND() FROM t1) FROM t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
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
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBSELECT t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t) FROM t;
|
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
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
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBSELECT t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t) FROM t;
|
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
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
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBSELECT t system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBSELECT t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
drop table t;
|
drop table t1;
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||||
`topic` mediumint(8) unsigned NOT NULL default '0',
|
`topic` mediumint(8) unsigned NOT NULL default '0',
|
||||||
|
@ -378,79 +378,90 @@ drop table t1, t2, t3;
|
|||||||
-- error 1096
|
-- error 1096
|
||||||
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
SELECT * FROM (SELECT 1) b WHERE 1 IN (SELECT *);
|
||||||
|
|
||||||
CREATE TABLE t (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t2 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
INSERT INTO t VALUES (1),(2);
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1);
|
SELECT * FROM t2 WHERE id IN (SELECT 1);
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1);
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 1+(select 1));
|
SELECT * FROM t2 WHERE id IN (SELECT 1+(select 1));
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1+(select 1));
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1+(select 1));
|
||||||
EXPLAIN SELECT * FROM t WHERE id IN (SELECT 1 UNION SELECT 3);
|
EXPLAIN SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||||
SELECT * FROM t WHERE id IN (SELECT 5 UNION SELECT 2);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
INSERT INTO t VALUES ((SELECT * FROM t));
|
INSERT INTO t2 VALUES ((SELECT * FROM t2));
|
||||||
SELECT * FROM t;
|
SELECT * FROM t2;
|
||||||
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
CREATE TABLE t1 (id int(11) default NULL, KEY id (id)) TYPE=MyISAM CHARSET=latin1;
|
||||||
INSERT INTO t1 values (1),(1);
|
INSERT INTO t1 values (1),(1);
|
||||||
-- error 1240
|
-- error 1240
|
||||||
UPDATE t SET id=(SELECT * FROM t1);
|
UPDATE t2 SET id=(SELECT * FROM t1);
|
||||||
drop table t, t1;
|
drop table t2, t1;
|
||||||
|
|
||||||
|
|
||||||
#NULL test
|
#NULL test
|
||||||
create table t (a int);
|
create table t1 (a int);
|
||||||
insert into t values (1),(2),(3);
|
insert into t1 values (1),(2),(3);
|
||||||
select 1 IN (SELECT * from t);
|
select 1 IN (SELECT * from t1);
|
||||||
select 10 IN (SELECT * from t);
|
select 10 IN (SELECT * from t1);
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
update t set a=NULL where a=2;
|
update t1 set a=NULL where a=2;
|
||||||
select 1 IN (SELECT * from t);
|
select 1 IN (SELECT * from t1);
|
||||||
select 3 IN (SELECT * from t);
|
select 3 IN (SELECT * from t1);
|
||||||
select 10 IN (SELECT * from t);
|
select 10 IN (SELECT * from t1);
|
||||||
select 1 > ALL (SELECT * from t);
|
select 1 > ALL (SELECT * from t1);
|
||||||
select 10 > ALL (SELECT * from t);
|
select 10 > ALL (SELECT * from t1);
|
||||||
select 1 > ANY (SELECT * from t);
|
select 1 > ANY (SELECT * from t1);
|
||||||
select 10 > ANY (SELECT * from t);
|
select 10 > ANY (SELECT * from t1);
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t (a varchar(20));
|
create table t1 (a varchar(20));
|
||||||
insert into t values ('A'),('BC'),('DEF');
|
insert into t1 values ('A'),('BC'),('DEF');
|
||||||
select 'A' IN (SELECT * from t);
|
select 'A' IN (SELECT * from t1);
|
||||||
select 'XYZS' IN (SELECT * from t);
|
select 'XYZS' IN (SELECT * from t1);
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
update t set a=NULL where a='BC';
|
update t1 set a=NULL where a='BC';
|
||||||
select 'A' IN (SELECT * from t);
|
select 'A' IN (SELECT * from t1);
|
||||||
select 'DEF' IN (SELECT * from t);
|
select 'DEF' IN (SELECT * from t1);
|
||||||
select 'XYZS' IN (SELECT * from t);
|
select 'XYZS' IN (SELECT * from t1);
|
||||||
select 'A' > ALL (SELECT * from t);
|
select 'A' > ALL (SELECT * from t1);
|
||||||
select 'XYZS' > ALL (SELECT * from t);
|
select 'XYZS' > ALL (SELECT * from t1);
|
||||||
select 'A' > ANY (SELECT * from t);
|
select 'A' > ANY (SELECT * from t1);
|
||||||
select 'XYZS' > ANY (SELECT * from t);
|
select 'XYZS' > ANY (SELECT * from t1);
|
||||||
drop table t;
|
drop table t1;
|
||||||
create table t (a float);
|
create table t1 (a float);
|
||||||
insert into t values (1.5),(2.5),(3.5);
|
insert into t1 values (1.5),(2.5),(3.5);
|
||||||
select 1.5 IN (SELECT * from t);
|
select 1.5 IN (SELECT * from t1);
|
||||||
select 10.5 IN (SELECT * from t);
|
select 10.5 IN (SELECT * from t1);
|
||||||
select NULL IN (SELECT * from t);
|
select NULL IN (SELECT * from t1);
|
||||||
update t set a=NULL where a=2.5;
|
update t1 set a=NULL where a=2.5;
|
||||||
select 1.5 IN (SELECT * from t);
|
select 1.5 IN (SELECT * from t1);
|
||||||
select 3.5 IN (SELECT * from t);
|
select 3.5 IN (SELECT * from t1);
|
||||||
select 10.5 IN (SELECT * from t);
|
select 10.5 IN (SELECT * from t1);
|
||||||
select 1.5 > ALL (SELECT * from t);
|
select 1.5 > ALL (SELECT * from t1);
|
||||||
select 10.5 > ALL (SELECT * from t);
|
select 10.5 > ALL (SELECT * from t1);
|
||||||
select 1.5 > ANY (SELECT * from t);
|
select 1.5 > ANY (SELECT * from t1);
|
||||||
select 10.5 > ANY (SELECT * from t);
|
select 10.5 > ANY (SELECT * from t1);
|
||||||
explain select (select a+1) from t;
|
explain select (select a+1) from t1;
|
||||||
select (select a+1) from t;
|
select (select a+1) from t1;
|
||||||
drop table t;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Null with keys
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int(11) NOT NULL default '0', PRIMARY KEY (a));
|
||||||
|
CREATE TABLE t2 (a int(11) default '0', INDEX (a));
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
|
||||||
|
explain SELECT t1.a, t1.a in (select t2.a from t2) FROM t1;
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
#LIMIT is not supported now
|
#LIMIT is not supported now
|
||||||
create table t (a float);
|
create table t1 (a float);
|
||||||
-- error 1235
|
-- error 1235
|
||||||
select 10.5 IN (SELECT * from t LIMIT 1);
|
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
||||||
-- error 1235
|
-- error 1235
|
||||||
select 10.5 IN (SELECT * from t LIMIT 1 UNION SELECT 1.5);
|
select 10.5 IN (SELECT * from t1 LIMIT 1 UNION SELECT 1.5);
|
||||||
drop table t;
|
drop table t1;
|
||||||
|
|
||||||
create table t1 (a int, b int, c varchar(10));
|
create table t1 (a int, b int, c varchar(10));
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
@ -517,11 +528,11 @@ UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i));
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#test of uncacheable subqueries
|
#test of uncacheable subqueries
|
||||||
CREATE TABLE t (a int(1));
|
CREATE TABLE t1 (a int(1));
|
||||||
EXPLAIN SELECT (SELECT RAND() FROM t) FROM t;
|
EXPLAIN SELECT (SELECT RAND() FROM t1) FROM t1;
|
||||||
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t) FROM t;
|
EXPLAIN SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1;
|
||||||
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t) FROM t;
|
EXPLAIN SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
||||||
drop table t;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
|
@ -286,7 +286,7 @@ table_map Item_field::used_tables() const
|
|||||||
{
|
{
|
||||||
if (field->table->const_table)
|
if (field->table->const_table)
|
||||||
return 0; // const item
|
return 0; // const item
|
||||||
return (depended_from? RAND_TABLE_BIT : field->table->map);
|
return (depended_from ? RAND_TABLE_BIT : field->table->map);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item *Item_field::get_tmp_table_item(THD *thd)
|
Item *Item_field::get_tmp_table_item(THD *thd)
|
||||||
|
@ -102,6 +102,7 @@ public:
|
|||||||
virtual void save_in_result_field(bool no_conversions) {}
|
virtual void save_in_result_field(bool no_conversions) {}
|
||||||
virtual void no_rows_in_result() {}
|
virtual void no_rows_in_result() {}
|
||||||
virtual Item *copy_or_same(THD *thd) { return this; }
|
virtual Item *copy_or_same(THD *thd) { return this; }
|
||||||
|
virtual Item *real_item() { return this; }
|
||||||
virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); }
|
virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); }
|
||||||
|
|
||||||
virtual bool binary() const
|
virtual bool binary() const
|
||||||
@ -468,9 +469,10 @@ class Item_ref :public Item_ident
|
|||||||
public:
|
public:
|
||||||
Field *result_field; /* Save result here */
|
Field *result_field; /* Save result here */
|
||||||
Item **ref;
|
Item **ref;
|
||||||
Item_ref(char *db_par,char *table_name_par,char *field_name_par)
|
Item_ref(const char *db_par, const char *table_name_par,
|
||||||
|
const char *field_name_par)
|
||||||
:Item_ident(db_par,table_name_par,field_name_par),ref(0) {}
|
:Item_ident(db_par,table_name_par,field_name_par),ref(0) {}
|
||||||
Item_ref(Item **item, char *table_name_par,char *field_name_par)
|
Item_ref(Item **item, const char *table_name_par, const char *field_name_par)
|
||||||
:Item_ident(NullS,table_name_par,field_name_par),ref(item) {}
|
:Item_ident(NullS,table_name_par,field_name_par),ref(item) {}
|
||||||
// Constructor need to process subselect with temporary tables (see Item)
|
// Constructor need to process subselect with temporary tables (see Item)
|
||||||
Item_ref(THD *thd, Item_ref &item)
|
Item_ref(THD *thd, Item_ref &item)
|
||||||
@ -521,6 +523,7 @@ public:
|
|||||||
{
|
{
|
||||||
(*ref)->save_in_field(result_field, no_conversions);
|
(*ref)->save_in_field(result_field, no_conversions);
|
||||||
}
|
}
|
||||||
|
Item *real_item() { return *ref; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_in_subselect;
|
class Item_in_subselect;
|
||||||
@ -530,7 +533,7 @@ protected:
|
|||||||
Item_in_subselect* owner;
|
Item_in_subselect* owner;
|
||||||
public:
|
public:
|
||||||
Item_ref_null_helper(Item_in_subselect* master, Item **item,
|
Item_ref_null_helper(Item_in_subselect* master, Item **item,
|
||||||
char *table_name_par, char *field_name_par):
|
const char *table_name_par, const char *field_name_par):
|
||||||
Item_ref(item, table_name_par, field_name_par), owner(master) {}
|
Item_ref(item, table_name_par, field_name_par), owner(master) {}
|
||||||
double val();
|
double val();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
|
@ -120,10 +120,10 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
used_tables_cache|=(*arg)->used_tables();
|
used_tables_cache|=(*arg)->used_tables();
|
||||||
const_item_cache&= (*arg)->const_item();
|
const_item_cache&= (*arg)->const_item();
|
||||||
}
|
}
|
||||||
if (result_type() == STRING_RESULT)
|
|
||||||
set_charset((*args)->charset());
|
|
||||||
}
|
}
|
||||||
fix_length_and_dec();
|
fix_length_and_dec();
|
||||||
|
if (result_type() == STRING_RESULT)
|
||||||
|
set_charset((*args)->charset());
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Item_row::Item_row(List<Item> &arg):
|
Item_row::Item_row(List<Item> &arg):
|
||||||
Item(), used_tables_cache(0), array_holder(1), const_item_cache(1)
|
Item(), used_tables_cache(0), array_holder(1), const_item_cache(1), with_null(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
//TODO: think placing 2-3 component items in item (as it done for function)
|
//TODO: think placing 2-3 component items in item (as it done for function)
|
||||||
|
@ -262,7 +262,7 @@ public:
|
|||||||
|
|
||||||
class Item_func_old_password :public Item_str_func
|
class Item_func_old_password :public Item_str_func
|
||||||
{
|
{
|
||||||
char tmp_value[16]; /* old password length */
|
char tmp_value[17]; /* old password length +1 */
|
||||||
public:
|
public:
|
||||||
Item_func_old_password(Item *a) :Item_str_func(a) {}
|
Item_func_old_password(Item *a) :Item_str_func(a) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
|
@ -489,8 +489,8 @@ void Item_in_subselect::single_value_transformer(THD *thd,
|
|||||||
sl->order_list.elements + sl->group_list.elements);
|
sl->order_list.elements + sl->group_list.elements);
|
||||||
item= (*func)(expr, new Item_ref_null_helper(this,
|
item= (*func)(expr, new Item_ref_null_helper(this,
|
||||||
sl->ref_pointer_array,
|
sl->ref_pointer_array,
|
||||||
(char *)"<no matter>",
|
(char *)"<ref>",
|
||||||
(char*)"<result>"));
|
this->full_name()));
|
||||||
sl->having= and_items(sl->having, item);
|
sl->having= and_items(sl->having, item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -766,7 +766,7 @@ int Query_log_event::write_data(IO_CACHE* file)
|
|||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
|
Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
|
||||||
ulong query_length, bool using_trans)
|
ulong query_length, bool using_trans)
|
||||||
:Log_event(thd_arg, !thd_arg->lex.tmp_table_used ?
|
:Log_event(thd_arg, !thd_arg->tmp_table_used ?
|
||||||
0 : LOG_EVENT_THREAD_SPECIFIC_F, using_trans),
|
0 : LOG_EVENT_THREAD_SPECIFIC_F, using_trans),
|
||||||
data_buf(0), query(query_arg),
|
data_buf(0), query(query_arg),
|
||||||
db(thd_arg->db), q_len((uint32) query_length),
|
db(thd_arg->db), q_len((uint32) query_length),
|
||||||
|
@ -792,7 +792,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
table->query_id=thd->query_id;
|
table->query_id=thd->query_id;
|
||||||
thd->lex.tmp_table_used= 1;
|
thd->tmp_table_used= 1;
|
||||||
goto reset;
|
goto reset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ THD::THD():user_time(0), is_fatal_error(0),
|
|||||||
locked=killed=count_cuted_fields=some_tables_deleted=no_errors=password=
|
locked=killed=count_cuted_fields=some_tables_deleted=no_errors=password=
|
||||||
query_start_used=prepare_command=0;
|
query_start_used=prepare_command=0;
|
||||||
db_length=query_length=col_access=0;
|
db_length=query_length=col_access=0;
|
||||||
query_error=0;
|
query_error= tmp_table_used= 0;
|
||||||
next_insert_id=last_insert_id=0;
|
next_insert_id=last_insert_id=0;
|
||||||
open_tables= temporary_tables= handler_tables= derived_tables= 0;
|
open_tables= temporary_tables= handler_tables= derived_tables= 0;
|
||||||
current_tablenr=0;
|
current_tablenr=0;
|
||||||
|
@ -550,6 +550,7 @@ public:
|
|||||||
bool query_error, bootstrap, cleanup_done;
|
bool query_error, bootstrap, cleanup_done;
|
||||||
bool volatile killed;
|
bool volatile killed;
|
||||||
bool prepare_command;
|
bool prepare_command;
|
||||||
|
bool tmp_table_used;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If we do a purge of binary logs, log index info of the threads
|
If we do a purge of binary logs, log index info of the threads
|
||||||
|
@ -167,7 +167,6 @@ LEX *lex_start(THD *thd, uchar *buf,uint length)
|
|||||||
lex->slave_thd_opt=0;
|
lex->slave_thd_opt=0;
|
||||||
lex->sql_command=SQLCOM_END;
|
lex->sql_command=SQLCOM_END;
|
||||||
lex->safe_to_cache_query= 1;
|
lex->safe_to_cache_query= 1;
|
||||||
lex->tmp_table_used= 0;
|
|
||||||
bzero(&lex->mi,sizeof(lex->mi));
|
bzero(&lex->mi,sizeof(lex->mi));
|
||||||
return lex;
|
return lex;
|
||||||
}
|
}
|
||||||
@ -1051,7 +1050,6 @@ void st_select_lex::init_select()
|
|||||||
use_index.empty();
|
use_index.empty();
|
||||||
ftfunc_list_alloc.empty();
|
ftfunc_list_alloc.empty();
|
||||||
ftfunc_list= &ftfunc_list_alloc;
|
ftfunc_list= &ftfunc_list_alloc;
|
||||||
if (linkage != UNION_TYPE)
|
|
||||||
linkage= UNSPECIFIED_TYPE;
|
linkage= UNSPECIFIED_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,9 +221,11 @@ public:
|
|||||||
|
|
||||||
static void *operator new(size_t size)
|
static void *operator new(size_t size)
|
||||||
{
|
{
|
||||||
|
// TODO: Change to alloc() and explicitely clear elements in constructors
|
||||||
return (void*) sql_calloc((uint) size);
|
return (void*) sql_calloc((uint) size);
|
||||||
}
|
}
|
||||||
static void operator delete(void *ptr,size_t size) {}
|
static void operator delete(void *ptr,size_t size) {}
|
||||||
|
st_select_lex_node() {}
|
||||||
virtual ~st_select_lex_node() {}
|
virtual ~st_select_lex_node() {}
|
||||||
inline st_select_lex_node* get_master() { return master; }
|
inline st_select_lex_node* get_master() { return master; }
|
||||||
virtual void init_query();
|
virtual void init_query();
|
||||||
@ -475,7 +477,6 @@ typedef struct st_lex
|
|||||||
uint slave_thd_opt;
|
uint slave_thd_opt;
|
||||||
CHARSET_INFO *charset;
|
CHARSET_INFO *charset;
|
||||||
char *help_arg;
|
char *help_arg;
|
||||||
bool tmp_table_used;
|
|
||||||
|
|
||||||
inline void uncacheable()
|
inline void uncacheable()
|
||||||
{
|
{
|
||||||
|
@ -3181,6 +3181,7 @@ mysql_init_query(THD *thd)
|
|||||||
thd->sent_row_count= thd->examined_row_count= 0;
|
thd->sent_row_count= thd->examined_row_count= 0;
|
||||||
thd->is_fatal_error= thd->rand_used= 0;
|
thd->is_fatal_error= thd->rand_used= 0;
|
||||||
thd->server_status &= ~SERVER_MORE_RESULTS_EXISTS;
|
thd->server_status &= ~SERVER_MORE_RESULTS_EXISTS;
|
||||||
|
thd->tmp_table_used= 0;
|
||||||
if (opt_bin_log)
|
if (opt_bin_log)
|
||||||
reset_dynamic(&thd->user_var_events);
|
reset_dynamic(&thd->user_var_events);
|
||||||
|
|
||||||
|
@ -1902,9 +1902,10 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
|
|||||||
case Item_func::OPTIMIZE_NONE:
|
case Item_func::OPTIMIZE_NONE:
|
||||||
break;
|
break;
|
||||||
case Item_func::OPTIMIZE_KEY:
|
case Item_func::OPTIMIZE_KEY:
|
||||||
if (cond_func->key_item()->type() == Item::FIELD_ITEM)
|
if (cond_func->key_item()->real_item()->type() == Item::FIELD_ITEM)
|
||||||
add_key_field(key_fields,*and_level,
|
add_key_field(key_fields,*and_level,
|
||||||
((Item_field*) (cond_func->key_item()))->field,
|
((Item_field*) (cond_func->key_item()->real_item()))
|
||||||
|
->field,
|
||||||
0,(Item*) 0,usable_tables);
|
0,(Item*) 0,usable_tables);
|
||||||
break;
|
break;
|
||||||
case Item_func::OPTIMIZE_OP:
|
case Item_func::OPTIMIZE_OP:
|
||||||
@ -1912,18 +1913,20 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
|
|||||||
bool equal_func=(cond_func->functype() == Item_func::EQ_FUNC ||
|
bool equal_func=(cond_func->functype() == Item_func::EQ_FUNC ||
|
||||||
cond_func->functype() == Item_func::EQUAL_FUNC);
|
cond_func->functype() == Item_func::EQUAL_FUNC);
|
||||||
|
|
||||||
if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM)
|
if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
add_key_field(key_fields,*and_level,
|
add_key_field(key_fields,*and_level,
|
||||||
((Item_field*) (cond_func->arguments()[0]))->field,
|
((Item_field*) (cond_func->arguments()[0])->real_item())
|
||||||
|
->field,
|
||||||
equal_func,
|
equal_func,
|
||||||
(cond_func->arguments()[1]),usable_tables);
|
(cond_func->arguments()[1]),usable_tables);
|
||||||
}
|
}
|
||||||
if (cond_func->arguments()[1]->type() == Item::FIELD_ITEM &&
|
if (cond_func->arguments()[1]->real_item()->type() == Item::FIELD_ITEM &&
|
||||||
cond_func->functype() != Item_func::LIKE_FUNC)
|
cond_func->functype() != Item_func::LIKE_FUNC)
|
||||||
{
|
{
|
||||||
add_key_field(key_fields,*and_level,
|
add_key_field(key_fields,*and_level,
|
||||||
((Item_field*) (cond_func->arguments()[1]))->field,
|
((Item_field*) (cond_func->arguments()[1])->real_item())
|
||||||
|
->field,
|
||||||
equal_func,
|
equal_func,
|
||||||
(cond_func->arguments()[0]),usable_tables);
|
(cond_func->arguments()[0]),usable_tables);
|
||||||
}
|
}
|
||||||
@ -1931,10 +1934,11 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
|
|||||||
}
|
}
|
||||||
case Item_func::OPTIMIZE_NULL:
|
case Item_func::OPTIMIZE_NULL:
|
||||||
/* column_name IS [NOT] NULL */
|
/* column_name IS [NOT] NULL */
|
||||||
if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM)
|
if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
add_key_field(key_fields,*and_level,
|
add_key_field(key_fields,*and_level,
|
||||||
((Item_field*) (cond_func->arguments()[0]))->field,
|
((Item_field*) (cond_func->arguments()[0])->real_item())
|
||||||
|
->field,
|
||||||
cond_func->functype() == Item_func::ISNULL_FUNC,
|
cond_func->functype() == Item_func::ISNULL_FUNC,
|
||||||
new Item_null, usable_tables);
|
new Item_null, usable_tables);
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
|
|||||||
wrong_tables.append(String(table->real_name,default_charset_info));
|
wrong_tables.append(String(table->real_name,default_charset_info));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thd->lex.tmp_table_used= tmp_table_deleted;
|
thd->tmp_table_used= tmp_table_deleted;
|
||||||
if (some_tables_deleted || tmp_table_deleted)
|
if (some_tables_deleted || tmp_table_deleted)
|
||||||
{
|
{
|
||||||
query_cache_invalidate3(thd, tables, 0);
|
query_cache_invalidate3(thd, tables, 0);
|
||||||
@ -885,7 +885,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
|
|||||||
(void) rm_temporary_table(create_info->db_type, path);
|
(void) rm_temporary_table(create_info->db_type, path);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
thd->lex.tmp_table_used= 1;
|
thd->tmp_table_used= 1;
|
||||||
}
|
}
|
||||||
if (!tmp_table && !no_log)
|
if (!tmp_table && !no_log)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user