Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rakia.(none):/home/kgeorge/mysql/autopush/B21772-5.0-opt
This commit is contained in:
commit
41aaa0f085
@ -1136,12 +1136,12 @@ ALTER TABLE t1 ADD INDEX (code);
|
|||||||
CREATE TABLE t2 (id varchar(10) PRIMARY KEY);
|
CREATE TABLE t2 (id varchar(10) PRIMARY KEY);
|
||||||
INSERT INTO t2 VALUES ('a11'), ('a12'), ('a13'), ('a14');
|
INSERT INTO t2 VALUES ('a11'), ('a12'), ('a13'), ('a14');
|
||||||
SELECT * FROM t1 INNER JOIN t2 ON t1.code=t2.id
|
SELECT * FROM t1 INNER JOIN t2 ON t1.code=t2.id
|
||||||
WHERE t2.id='a12' AND (code < 'a00' OR LENGTH(code)=5);
|
WHERE t2.id='a12' AND (LENGTH(code)=5 OR code < 'a00');
|
||||||
code id
|
code id
|
||||||
A12 a12
|
A12 a12
|
||||||
EXPLAIN EXTENDED
|
EXPLAIN EXTENDED
|
||||||
SELECT * FROM t1 INNER JOIN t2 ON code=id
|
SELECT * FROM t1 INNER JOIN t2 ON code=id
|
||||||
WHERE id='a12' AND (code < 'a00' OR LENGTH(code)=5);
|
WHERE id='a12' AND (LENGTH(code)=5 OR code < 'a00');
|
||||||
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 SIMPLE t1 ref code code 13 const 3 Using where; Using index
|
1 SIMPLE t1 ref code code 13 const 3 Using where; Using index
|
||||||
1 SIMPLE t2 ref PRIMARY PRIMARY 12 const 1 Using where; Using index
|
1 SIMPLE t2 ref PRIMARY PRIMARY 12 const 1 Using where; Using index
|
||||||
|
@ -807,8 +807,8 @@ explain
|
|||||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||||
where t2.b=v1.a GROUP BY t2.b;
|
where t2.b=v1.a GROUP BY t2.b;
|
||||||
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 t2 index b b 2 NULL 10 Using index
|
1 SIMPLE t2 index b b 2 NULL 10 Using index
|
||||||
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 1 test.t2.b 1
|
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 1 test.t2.b 1
|
||||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||||
where t2.b=v1.a GROUP BY t2.b;
|
where t2.b=v1.a GROUP BY t2.b;
|
||||||
a b real_b
|
a b real_b
|
||||||
|
@ -337,7 +337,7 @@ mysql
|
|||||||
test
|
test
|
||||||
explain select * from v0;
|
explain select * from v0;
|
||||||
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 # ALL NULL NULL NULL NULL 2
|
1 SIMPLE # ALL NULL NULL NULL NULL 2
|
||||||
create view v1 (c) as select table_name from information_schema.tables
|
create view v1 (c) as select table_name from information_schema.tables
|
||||||
where table_name="v1";
|
where table_name="v1";
|
||||||
select * from v1;
|
select * from v1;
|
||||||
|
@ -611,7 +611,7 @@ C
|
|||||||
NULL
|
NULL
|
||||||
EXPLAIN SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
EXPLAIN SELECT type FROM v1 GROUP BY type WITH ROLLUP;
|
||||||
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 t1 ALL NULL NULL NULL NULL 10 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 10 Using filesort
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a int(11) NOT NULL);
|
CREATE TABLE t1 (a int(11) NOT NULL);
|
||||||
|
@ -750,13 +750,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
||||||
EXPLAIN SELECT a,b FROM v1 WHERE a < 2 and b=3;
|
EXPLAIN SELECT a,b FROM v1 WHERE a < 2 and b=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 t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
||||||
EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
|
EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
|
||||||
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 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
||||||
EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
|
EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
|
||||||
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 t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
|
||||||
SELECT a,b FROM t1 WHERE a < 2 and b=3;
|
SELECT a,b FROM t1 WHERE a < 2 and b=3;
|
||||||
a b
|
a b
|
||||||
1 3
|
1 3
|
||||||
@ -799,13 +799,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
||||||
explain select * from v1 where a in (3,4) and b in (1,2,3);
|
explain select * from v1 where a in (3,4) and b in (1,2,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 t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
||||||
explain select * from t1 where a between 3 and 4 and b between 1 and 2;
|
explain select * from t1 where a between 3 and 4 and b between 1 and 2;
|
||||||
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 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
||||||
explain select * from v1 where a between 3 and 4 and b between 1 and 2;
|
explain select * from v1 where a between 3 and 4 and b between 1 and 2;
|
||||||
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 t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL # Using where; Using index
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t3 (a int);
|
create table t3 (a int);
|
||||||
|
@ -49,7 +49,7 @@ select v1.b from v1;
|
|||||||
ERROR 42S22: Unknown column 'v1.b' in 'field list'
|
ERROR 42S22: Unknown column 'v1.b' in 'field list'
|
||||||
explain extended select c from v1;
|
explain extended select c from v1;
|
||||||
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 t1 ALL NULL NULL NULL NULL 5
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select (`test`.`t1`.`b` + 1) AS `c` from `test`.`t1`
|
Note 1003 select (`test`.`t1`.`b` + 1) AS `c` from `test`.`t1`
|
||||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||||
@ -83,7 +83,7 @@ c
|
|||||||
12
|
12
|
||||||
explain extended select c from v3;
|
explain extended select c from v3;
|
||||||
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 t1 ALL NULL NULL NULL NULL 5
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select ((`test`.`t1`.`b` + 1) + 1) AS `c` from `test`.`t1`
|
Note 1003 select ((`test`.`t1`.`b` + 1) + 1) AS `c` from `test`.`t1`
|
||||||
create algorithm=temptable view v4 (c) as select c+1 from v2;
|
create algorithm=temptable view v4 (c) as select c+1 from v2;
|
||||||
@ -376,7 +376,7 @@ c
|
|||||||
30
|
30
|
||||||
explain extended select * from v1;
|
explain extended select * from v1;
|
||||||
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 t1 ALL NULL NULL NULL NULL 5 Using where
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`b` AS `c` from `test`.`t1` where (`test`.`t1`.`a` < 3)
|
Note 1003 select `test`.`t1`.`b` AS `c` from `test`.`t1` where (`test`.`t1`.`a` < 3)
|
||||||
update v1 set c=c+1;
|
update v1 set c=c+1;
|
||||||
@ -1391,9 +1391,9 @@ a a b
|
|||||||
4 NULL NULL
|
4 NULL NULL
|
||||||
explain extended select * from t3 left join v3 on (t3.a = v3.a);
|
explain extended select * from t3 left join v3 on (t3.a = v3.a);
|
||||||
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 t3 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 3
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join `test`.`t2` on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join `test`.`t2` on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
||||||
create view v1 (a) as select a from t1;
|
create view v1 (a) as select a from t1;
|
||||||
@ -1406,9 +1406,9 @@ a a b
|
|||||||
4 NULL NULL
|
4 NULL NULL
|
||||||
explain extended select * from t3 left join v4 on (t3.a = v4.a);
|
explain extended select * from t3 left join v4 on (t3.a = v4.a);
|
||||||
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 t3 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 3
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join (`test`.`t2`) on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join (`test`.`t2`) on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
||||||
prepare stmt1 from "select * from t3 left join v4 on (t3.a = v4.a);";
|
prepare stmt1 from "select * from t3 left join v4 on (t3.a = v4.a);";
|
||||||
@ -2321,12 +2321,12 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t2 ref a a 10 const,test.t1.b 2 Using where; Using index
|
1 SIMPLE t2 ref a a 10 const,test.t1.b 2 Using where; Using index
|
||||||
EXPLAIN SELECT * FROM v1 WHERE a=1;
|
EXPLAIN SELECT * FROM v1 WHERE a=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 t1 ref a a 5 const 1 Using where; Using index
|
1 SIMPLE t1 ref a a 5 const 1 Using where; Using index
|
||||||
1 PRIMARY t2 ref a a 10 const,test.t1.b 2 Using where; Using index
|
1 SIMPLE t2 ref a a 10 const,test.t1.b 2 Using where; Using index
|
||||||
EXPLAIN SELECT * FROM v2 WHERE a=1;
|
EXPLAIN SELECT * FROM v2 WHERE a=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 t1 ref a a 5 const 1 Using where; Using index
|
1 SIMPLE t1 ref a a 5 const 1 Using where; Using index
|
||||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
DROP VIEW v1,v2;
|
DROP VIEW v1,v2;
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
create table t1 (f1 int);
|
create table t1 (f1 int);
|
||||||
@ -2409,7 +2409,7 @@ insert into t1 values (1),(2);
|
|||||||
create view v1 as select * from t1;
|
create view v1 as select * from t1;
|
||||||
explain select id from v1 order by id;
|
explain select id from v1 order by id;
|
||||||
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 t1 index NULL PRIMARY 4 NULL 2 Using index
|
1 SIMPLE t1 index NULL PRIMARY 4 NULL 2 Using index
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1(f1 int, f2 int);
|
create table t1(f1 int, f2 int);
|
||||||
@ -2480,7 +2480,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
EXPLAIN SELECT MAX(a) FROM v1;
|
EXPLAIN SELECT MAX(a) FROM v1;
|
||||||
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 NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
SELECT MIN(a) FROM t1;
|
SELECT MIN(a) FROM t1;
|
||||||
MIN(a)
|
MIN(a)
|
||||||
0
|
0
|
||||||
@ -2492,7 +2492,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
EXPLAIN SELECT MIN(a) FROM v1;
|
EXPLAIN SELECT MIN(a) FROM v1;
|
||||||
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 NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (x varchar(10));
|
CREATE TABLE t1 (x varchar(10));
|
||||||
@ -2879,3 +2879,22 @@ View Create View
|
|||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` where (`t1`.`f1` between now() and (now() + interval 1 minute))
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` where (`t1`.`f1` between now() and (now() + interval 1 minute))
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (s1 int);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
EXPLAIN SELECT * 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
|
||||||
|
EXPLAIN SELECT * FROM v1;
|
||||||
|
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
|
||||||
|
INSERT INTO t1 VALUES (1), (3), (2);
|
||||||
|
EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
2 SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||||
|
EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
2 SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -103,7 +103,7 @@ ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for tabl
|
|||||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||||
explain select c from mysqltest.v1;
|
explain select c from mysqltest.v1;
|
||||||
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 t1 system NULL NULL NULL NULL 0 const row not found
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
show create view mysqltest.v1;
|
show create view mysqltest.v1;
|
||||||
ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
|
ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
|
||||||
explain select c from mysqltest.v2;
|
explain select c from mysqltest.v2;
|
||||||
@ -123,7 +123,7 @@ ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for tabl
|
|||||||
grant show view on mysqltest.* to mysqltest_1@localhost;
|
grant show view on mysqltest.* to mysqltest_1@localhost;
|
||||||
explain select c from mysqltest.v1;
|
explain select c from mysqltest.v1;
|
||||||
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 t1 system NULL NULL NULL NULL 0 const row not found
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
show create view mysqltest.v1;
|
show create view mysqltest.v1;
|
||||||
View Create View
|
View Create View
|
||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v1` AS select (`mysqltest`.`t1`.`a` + 1) AS `c`,(`mysqltest`.`t1`.`b` + 1) AS `d` from `mysqltest`.`t1`
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v1` AS select (`mysqltest`.`t1`.`a` + 1) AS `c`,(`mysqltest`.`t1`.`b` + 1) AS `d` from `mysqltest`.`t1`
|
||||||
@ -136,7 +136,7 @@ View Create View
|
|||||||
v2 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v2` AS select (`mysqltest`.`t1`.`a` + 1) AS `c`,(`mysqltest`.`t1`.`b` + 1) AS `d` from `mysqltest`.`t1`
|
v2 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v2` AS select (`mysqltest`.`t1`.`a` + 1) AS `c`,(`mysqltest`.`t1`.`b` + 1) AS `d` from `mysqltest`.`t1`
|
||||||
explain select c from mysqltest.v3;
|
explain select c from mysqltest.v3;
|
||||||
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 t2 system NULL NULL NULL NULL 0 const row not found
|
1 SIMPLE t2 system NULL NULL NULL NULL 0 const row not found
|
||||||
show create view mysqltest.v3;
|
show create view mysqltest.v3;
|
||||||
View Create View
|
View Create View
|
||||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v3` AS select (`mysqltest`.`t2`.`a` + 1) AS `c`,(`mysqltest`.`t2`.`b` + 1) AS `d` from `mysqltest`.`t2`
|
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest`.`v3` AS select (`mysqltest`.`t2`.`a` + 1) AS `c`,(`mysqltest`.`t2`.`b` + 1) AS `d` from `mysqltest`.`t2`
|
||||||
|
@ -773,10 +773,10 @@ CREATE TABLE t2 (id varchar(10) PRIMARY KEY);
|
|||||||
INSERT INTO t2 VALUES ('a11'), ('a12'), ('a13'), ('a14');
|
INSERT INTO t2 VALUES ('a11'), ('a12'), ('a13'), ('a14');
|
||||||
|
|
||||||
SELECT * FROM t1 INNER JOIN t2 ON t1.code=t2.id
|
SELECT * FROM t1 INNER JOIN t2 ON t1.code=t2.id
|
||||||
WHERE t2.id='a12' AND (code < 'a00' OR LENGTH(code)=5);
|
WHERE t2.id='a12' AND (LENGTH(code)=5 OR code < 'a00');
|
||||||
EXPLAIN EXTENDED
|
EXPLAIN EXTENDED
|
||||||
SELECT * FROM t1 INNER JOIN t2 ON code=id
|
SELECT * FROM t1 INNER JOIN t2 ON code=id
|
||||||
WHERE id='a12' AND (code < 'a00' OR LENGTH(code)=5);
|
WHERE id='a12' AND (LENGTH(code)=5 OR code < 'a00');
|
||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
@ -2760,3 +2760,21 @@ create view v1 as select * from t1 where f1 between now() and now() + interval 1
|
|||||||
show create view v1;
|
show create view v1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #5500: wrong select_type in EXPLAIN output for queries over views
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (s1 int);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
EXPLAIN SELECT * FROM v1;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1), (3), (2);
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
|
||||||
|
EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
27
sql/item.h
27
sql/item.h
@ -411,6 +411,17 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
typedef bool (Item::*Item_processor) (byte *arg);
|
typedef bool (Item::*Item_processor) (byte *arg);
|
||||||
|
/*
|
||||||
|
Analyzer function
|
||||||
|
SYNOPSIS
|
||||||
|
argp in/out IN: Analysis parameter
|
||||||
|
OUT: Parameter to be passed to the transformer
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
TRUE Invoke the transformer
|
||||||
|
FALSE Don't do it
|
||||||
|
|
||||||
|
*/
|
||||||
typedef bool (Item::*Item_analyzer) (byte **argp);
|
typedef bool (Item::*Item_analyzer) (byte **argp);
|
||||||
typedef Item* (Item::*Item_transformer) (byte *arg);
|
typedef Item* (Item::*Item_transformer) (byte *arg);
|
||||||
typedef void (*Cond_traverser) (const Item *item, void *arg);
|
typedef void (*Cond_traverser) (const Item *item, void *arg);
|
||||||
@ -740,6 +751,22 @@ public:
|
|||||||
return (this->*transformer)(arg);
|
return (this->*transformer)(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function performs a generic "compilation" of the Item tree.
|
||||||
|
The process of compilation is assumed to go as follows:
|
||||||
|
|
||||||
|
compile()
|
||||||
|
{
|
||||||
|
if (this->*some_analyzer(...))
|
||||||
|
{
|
||||||
|
compile children if any;
|
||||||
|
this->*some_transformer(...);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i.e. analysis is performed top-down while transformation is done
|
||||||
|
bottom-up.
|
||||||
|
*/
|
||||||
virtual Item* compile(Item_analyzer analyzer, byte **arg_p,
|
virtual Item* compile(Item_analyzer analyzer, byte **arg_p,
|
||||||
Item_transformer transformer, byte *arg_t)
|
Item_transformer transformer, byte *arg_t)
|
||||||
{
|
{
|
||||||
|
@ -2811,7 +2811,6 @@ Item *Item_cond::compile(Item_analyzer analyzer, byte **arg_p,
|
|||||||
if (!(this->*analyzer)(arg_p))
|
if (!(this->*analyzer)(arg_p))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
byte *arg_v= *arg_p;
|
|
||||||
List_iterator<Item> li(list);
|
List_iterator<Item> li(list);
|
||||||
Item *item;
|
Item *item;
|
||||||
while ((item= li++))
|
while ((item= li++))
|
||||||
@ -2820,6 +2819,7 @@ Item *Item_cond::compile(Item_analyzer analyzer, byte **arg_p,
|
|||||||
The same parameter value of arg_p must be passed
|
The same parameter value of arg_p must be passed
|
||||||
to analyze any argument of the condition formula.
|
to analyze any argument of the condition formula.
|
||||||
*/
|
*/
|
||||||
|
byte *arg_v= *arg_p;
|
||||||
Item *new_item= item->compile(analyzer, &arg_v, transformer, arg_t);
|
Item *new_item= item->compile(analyzer, &arg_v, transformer, arg_t);
|
||||||
if (new_item && new_item != item)
|
if (new_item && new_item != item)
|
||||||
li.replace(new_item);
|
li.replace(new_item);
|
||||||
|
@ -304,7 +304,6 @@ Item *Item_func::compile(Item_analyzer analyzer, byte **arg_p,
|
|||||||
{
|
{
|
||||||
if (!(this->*analyzer)(arg_p))
|
if (!(this->*analyzer)(arg_p))
|
||||||
return 0;
|
return 0;
|
||||||
byte *arg_v= *arg_p;
|
|
||||||
if (arg_count)
|
if (arg_count)
|
||||||
{
|
{
|
||||||
Item **arg,**arg_end;
|
Item **arg,**arg_end;
|
||||||
@ -314,6 +313,7 @@ Item *Item_func::compile(Item_analyzer analyzer, byte **arg_p,
|
|||||||
The same parameter value of arg_p must be passed
|
The same parameter value of arg_p must be passed
|
||||||
to analyze any argument of the condition formula.
|
to analyze any argument of the condition formula.
|
||||||
*/
|
*/
|
||||||
|
byte *arg_v= *arg_p;
|
||||||
Item *new_item= (*arg)->compile(analyzer, &arg_v, transformer, arg_t);
|
Item *new_item= (*arg)->compile(analyzer, &arg_v, transformer, arg_t);
|
||||||
if (new_item && *arg != new_item)
|
if (new_item && *arg != new_item)
|
||||||
current_thd->change_item_tree(arg, new_item);
|
current_thd->change_item_tree(arg, new_item);
|
||||||
|
@ -6919,9 +6919,9 @@ static COND *build_equal_items_for_cond(COND *cond,
|
|||||||
as soon the field is not of a string type or the field reference is
|
as soon the field is not of a string type or the field reference is
|
||||||
an argument of a comparison predicate.
|
an argument of a comparison predicate.
|
||||||
*/
|
*/
|
||||||
byte *dummy;
|
byte *is_subst_valid= (byte *) 1;
|
||||||
cond= cond->compile(&Item::subst_argument_checker,
|
cond= cond->compile(&Item::subst_argument_checker,
|
||||||
&dummy,
|
&is_subst_valid,
|
||||||
&Item::equal_fields_propagator,
|
&Item::equal_fields_propagator,
|
||||||
(byte *) inherited);
|
(byte *) inherited);
|
||||||
cond->update_used_tables();
|
cond->update_used_tables();
|
||||||
@ -14391,9 +14391,12 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
item_list.push_back(new Item_string(table_name_buffer, len, cs));
|
item_list.push_back(new Item_string(table_name_buffer, len, cs));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
item_list.push_back(new Item_string(table->alias,
|
{
|
||||||
strlen(table->alias),
|
TABLE_LIST *tab=table->pos_in_table_list;
|
||||||
|
item_list.push_back(new Item_string(tab->alias,
|
||||||
|
strlen(tab->alias),
|
||||||
cs));
|
cs));
|
||||||
|
}
|
||||||
/* type */
|
/* type */
|
||||||
item_list.push_back(new Item_string(join_type_str[tab->type],
|
item_list.push_back(new Item_string(join_type_str[tab->type],
|
||||||
strlen(join_type_str[tab->type]),
|
strlen(join_type_str[tab->type]),
|
||||||
@ -14580,8 +14583,8 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
|
|||||||
// drop UNCACHEABLE_EXPLAIN, because it is for internal usage only
|
// drop UNCACHEABLE_EXPLAIN, because it is for internal usage only
|
||||||
uint8 uncacheable= (sl->uncacheable & ~UNCACHEABLE_EXPLAIN);
|
uint8 uncacheable= (sl->uncacheable & ~UNCACHEABLE_EXPLAIN);
|
||||||
sl->type= (((&thd->lex->select_lex)==sl)?
|
sl->type= (((&thd->lex->select_lex)==sl)?
|
||||||
((thd->lex->all_selects_list != sl) ?
|
(sl->first_inner_unit() || sl->next_select() ?
|
||||||
primary_key_name : "SIMPLE"):
|
"PRIMARY" : "SIMPLE"):
|
||||||
((sl == first)?
|
((sl == first)?
|
||||||
((sl->linkage == DERIVED_TABLE_TYPE) ?
|
((sl->linkage == DERIVED_TABLE_TYPE) ?
|
||||||
"DERIVED":
|
"DERIVED":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user