2008 lines
61 KiB
Plaintext
2008 lines
61 KiB
Plaintext
# The include statement below is a temp one for tests that are yet to
|
||
#be ported to run with InnoDB,
|
||
#but needs to be kept for tests that would need MyISAM in future.
|
||
--source include/force_myisam_default.inc
|
||
|
||
--source include/no_valgrind_without_big.inc
|
||
|
||
# This test uses grants, which can't get tested for embedded server
|
||
-- source include/not_embedded.inc
|
||
|
||
#Don't run this test when thread_pool active
|
||
--source include/not_threadpool.inc
|
||
|
||
# Save the initial number of concurrent sessions
|
||
--source include/count_sessions.inc
|
||
|
||
#
|
||
# Remove NO_AUTO_CREATE_USER sql mode (default since 5.7).
|
||
#
|
||
set @orig_sql_mode= @@sql_mode;
|
||
set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER',''));
|
||
|
||
# Test for information_schema.schemata &
|
||
# show databases
|
||
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS t0,t1,t2,t3,t4,t5;
|
||
DROP VIEW IF EXISTS v1;
|
||
--enable_warnings
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#11763174 INFORMATION_SCHEMA.PARAMETERS.NUMERIC_PRECISION SHOULD BE BIGINT
|
||
--echo #
|
||
select table_name, data_type, column_type from information_schema.columns where column_name = 'numeric_precision' and table_schema = 'information_schema';
|
||
|
||
--disable_warnings
|
||
show variables where variable_name like "skip_show_database";
|
||
--enable_warnings
|
||
grant select, update, execute on test.* to mysqltest_2@localhost;
|
||
grant select, update on test.* to mysqltest_1@localhost;
|
||
create user mysqltest_3@localhost;
|
||
create user mysqltest_3;
|
||
|
||
|
||
select * from information_schema.SCHEMATA where schema_name > 'm';
|
||
select schema_name from information_schema.schemata;
|
||
show databases like 't%';
|
||
show databases;
|
||
show databases where `database` = 't%';
|
||
|
||
# Test for information_schema.tables &
|
||
# show tables
|
||
|
||
create database mysqltest;
|
||
create table mysqltest.t1(a int, b VARCHAR(30), KEY string_data (b));
|
||
create table test.t2(a int);
|
||
create table t3(a int, KEY a_data (a));
|
||
create table mysqltest.t4(a int);
|
||
create table t5 (id int auto_increment primary key);
|
||
insert into t5 values (10);
|
||
create view v1 (c) as
|
||
SELECT table_name FROM information_schema.TABLES
|
||
WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND
|
||
table_name not like 'ndb_%' AND table_name not like 'innodb_%';
|
||
select * from v1;
|
||
|
||
select c,table_name from v1
|
||
inner join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||
where v1.c like "t%";
|
||
|
||
select c,table_name from v1
|
||
left join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||
where v1.c like "t%";
|
||
|
||
select c, v2.table_name from v1
|
||
right join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||
where v1.c like "t%";
|
||
|
||
select table_name from information_schema.TABLES
|
||
where table_schema = "mysqltest" and table_name like "t%";
|
||
|
||
select * from information_schema.STATISTICS where TABLE_SCHEMA = "mysqltest";
|
||
show keys from t3 where Key_name = "a_data";
|
||
|
||
show tables like 't%';
|
||
--replace_column 8 # 12 # 13 #
|
||
show table status;
|
||
show full columns from t3 like "a%";
|
||
show full columns from mysql.db like "Insert%";
|
||
show full columns from v1;
|
||
select * from information_schema.COLUMNS where table_name="t1"
|
||
and column_name= "a";
|
||
show columns from mysqltest.t1 where field like "%a%";
|
||
|
||
create view mysqltest.v1 (c) as select a from mysqltest.t1;
|
||
grant select (a) on mysqltest.t1 to mysqltest_2@localhost;
|
||
grant select on mysqltest.v1 to mysqltest_3;
|
||
connect (user3,localhost,mysqltest_2,,);
|
||
connection user3;
|
||
select table_name, column_name, privileges from information_schema.columns
|
||
where table_schema = 'mysqltest' and table_name = 't1';
|
||
show columns from mysqltest.t1;
|
||
connect (user4,localhost,mysqltest_3,,mysqltest);
|
||
connection user4;
|
||
select table_name, column_name, privileges from information_schema.columns
|
||
where table_schema = 'mysqltest' and table_name = 'v1';
|
||
--error ER_VIEW_NO_EXPLAIN
|
||
explain select * from v1;
|
||
connection default;
|
||
disconnect user4;
|
||
|
||
drop view v1, mysqltest.v1;
|
||
drop tables mysqltest.t4, mysqltest.t1, t2, t3, t5;
|
||
drop database mysqltest;
|
||
|
||
# Test for information_schema.CHARACTER_SETS &
|
||
# SHOW CHARACTER SET
|
||
|
||
select * from information_schema.CHARACTER_SETS
|
||
where CHARACTER_SET_NAME like 'latin1%';
|
||
SHOW CHARACTER SET LIKE 'latin1%';
|
||
SHOW CHARACTER SET WHERE charset like 'latin1%';
|
||
|
||
# Test for information_schema.COLLATIONS &
|
||
# SHOW COLLATION
|
||
|
||
--replace_column 5 #
|
||
select * from information_schema.COLLATIONS
|
||
where COLLATION_NAME like 'latin1%';
|
||
--replace_column 5 #
|
||
SHOW COLLATION LIKE 'latin1%';
|
||
--replace_column 5 #
|
||
SHOW COLLATION WHERE collation like 'latin1%';
|
||
|
||
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
|
||
where COLLATION_NAME like 'latin1%';
|
||
|
||
# Test for information_schema.ROUTINES &
|
||
#
|
||
|
||
--disable_warnings
|
||
drop procedure if exists sel2;
|
||
drop function if exists sub1;
|
||
drop function if exists sub2;
|
||
--enable_warnings
|
||
|
||
create function sub1(i int) returns int
|
||
return i+1;
|
||
delimiter |;
|
||
create procedure sel2()
|
||
begin
|
||
select * from t1;
|
||
select * from t2;
|
||
end|
|
||
delimiter ;|
|
||
|
||
#
|
||
# Bug#7222 information_schema: errors in "routines"
|
||
#
|
||
select parameter_style, sql_data_access, dtd_identifier
|
||
from information_schema.routines where routine_schema='test';
|
||
|
||
--replace_column 5 # 6 #
|
||
show procedure status where db='test';
|
||
--replace_column 5 # 6 #
|
||
show function status where db='test';
|
||
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||
information_schema.SCHEMATA b where
|
||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test';
|
||
--replace_column 3 #
|
||
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||
information_schema.SCHEMATA b where
|
||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||
|
||
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
||
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) AND a.ROUTINE_SCHEMA='test' order by 1;
|
||
select count(*) from information_schema.ROUTINES where routine_schema='test';
|
||
|
||
create view v1 as select routine_schema, routine_name from information_schema.routines where routine_schema='test'
|
||
order by routine_schema, routine_name;
|
||
select * from v1;
|
||
drop view v1;
|
||
|
||
connect (user1,localhost,mysqltest_1,,);
|
||
connection user1;
|
||
select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
|
||
--error ER_SP_DOES_NOT_EXIST
|
||
show create function sub1;
|
||
connection user3;
|
||
select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
|
||
connection default;
|
||
grant all privileges on test.* to mysqltest_1@localhost;
|
||
connect (user2,localhost,mysqltest_1,,);
|
||
connection user2;
|
||
select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
|
||
create function sub2(i int) returns int
|
||
return i+1;
|
||
select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
|
||
show create procedure sel2;
|
||
show create function sub1;
|
||
show create function sub2;
|
||
--replace_column 5 # 6 #
|
||
show function status like "sub2";
|
||
connection default;
|
||
disconnect user1;
|
||
disconnect user3;
|
||
drop function sub2;
|
||
show create procedure sel2;
|
||
|
||
#
|
||
# Test for views
|
||
#
|
||
create view v0 (c) as select schema_name from information_schema.schemata;
|
||
select * from v0;
|
||
--replace_column 3 #
|
||
explain select * from v0;
|
||
create view v1 (c) as select table_name from information_schema.tables
|
||
where table_name="v1";
|
||
select * from v1;
|
||
create view v2 (c) as select column_name from information_schema.columns
|
||
where table_name="v2";
|
||
select * from v2;
|
||
create view v3 (c) as select CHARACTER_SET_NAME from information_schema.character_sets
|
||
where CHARACTER_SET_NAME like "latin1%";
|
||
select * from v3;
|
||
create view v4 (c) as select COLLATION_NAME from information_schema.collations
|
||
where COLLATION_NAME like "latin1%";
|
||
select * from v4;
|
||
show keys from v4;
|
||
select * from information_schema.views where TABLE_SCHEMA != 'sys' and TABLE_NAME like "v%";
|
||
drop view v0, v1, v2, v3, v4;
|
||
|
||
#
|
||
# Test for privileges tables
|
||
#
|
||
create table t1 (a int);
|
||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||
grant select (a), update (a),insert(a), references(a) on t1 to mysqltest_1@localhost;
|
||
grant all on test.* to mysqltest_1@localhost with grant option;
|
||
select * from information_schema.USER_PRIVILEGES where grantee like '%mysqltest_1%';
|
||
select * from information_schema.SCHEMA_PRIVILEGES where grantee like '%mysqltest_1%';
|
||
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
||
select * from information_schema.COLUMN_PRIVILEGES where grantee like '%mysqltest_1%';
|
||
delete from mysql.user where user like 'mysqltest%';
|
||
delete from mysql.db where user like 'mysqltest%';
|
||
delete from mysql.tables_priv where user like 'mysqltest%';
|
||
delete from mysql.columns_priv where user like 'mysqltest%';
|
||
flush privileges;
|
||
drop table t1;
|
||
|
||
|
||
#
|
||
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
|
||
#
|
||
|
||
create table t1 (a int not null, primary key(a));
|
||
alter table t1 add constraint constraint_1 unique (a);
|
||
alter table t1 add constraint unique key_1(a);
|
||
alter table t1 add constraint constraint_2 unique key_2(a);
|
||
show create table t1;
|
||
select * from information_schema.TABLE_CONSTRAINTS where
|
||
TABLE_SCHEMA= "test";
|
||
select * from information_schema.key_column_usage where
|
||
TABLE_SCHEMA= "test";
|
||
|
||
connection user2;
|
||
select table_name from information_schema.TABLES where table_schema like "test%";
|
||
select table_name,column_name from information_schema.COLUMNS where table_schema like "test%";
|
||
select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_SCHEMA != 'sys';
|
||
disconnect user2;
|
||
connection default;
|
||
delete from mysql.user where user='mysqltest_1';
|
||
drop table t1;
|
||
drop procedure sel2;
|
||
drop function sub1;
|
||
|
||
create table t1(a int);
|
||
create view v1 (c) as select a from t1 with check option;
|
||
create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||
select * from information_schema.views where table_schema != 'sys';
|
||
grant select (a) on test.t1 to joe@localhost with grant option;
|
||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE table_schema != 'sys';
|
||
select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE table_schema NOT IN ('sys','mysql');
|
||
drop view v1, v2, v3;
|
||
drop table t1;
|
||
delete from mysql.user where user='joe';
|
||
delete from mysql.db where user='joe';
|
||
delete from mysql.tables_priv where user='joe';
|
||
delete from mysql.columns_priv where user='joe';
|
||
flush privileges;
|
||
|
||
# QQ This results in NULLs instead of the version numbers when
|
||
# QQ a LOCK TABLES is in effect when selecting from
|
||
# QQ information_schema.tables.
|
||
|
||
--disable_parsing # until bug is fixed
|
||
delimiter //;
|
||
create procedure px5 ()
|
||
begin
|
||
declare v int;
|
||
declare c cursor for select version from
|
||
information_schema.tables where table_schema <> 'information_schema';
|
||
open c;
|
||
fetch c into v;
|
||
select v;
|
||
close c;
|
||
end;//
|
||
|
||
call px5()//
|
||
call px5()//
|
||
delimiter ;//
|
||
select sql_mode from information_schema.ROUTINES where ROUTINE_SCHEMA != 'sys';
|
||
drop procedure px5;
|
||
--enable_parsing
|
||
|
||
create table t1 (a int not null auto_increment,b int, primary key (a));
|
||
insert into t1 values (1,1),(NULL,3),(NULL,4);
|
||
select AUTO_INCREMENT from information_schema.tables where table_name = 't1';
|
||
drop table t1;
|
||
create table t1 (s1 int);
|
||
insert into t1 values (0),(9),(0);
|
||
select s1 from t1 where s1 in (select version from
|
||
information_schema.tables) union select version from
|
||
information_schema.tables;
|
||
drop table t1;
|
||
|
||
SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
||
set names latin2;
|
||
SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
||
set names latin1;
|
||
|
||
create table t1 select * from information_schema.CHARACTER_SETS
|
||
where CHARACTER_SET_NAME like "latin1";
|
||
select * from t1;
|
||
alter table t1 default character set utf8;
|
||
show create table t1;
|
||
drop table t1;
|
||
|
||
create view v1 as select * from information_schema.TABLES;
|
||
drop view v1;
|
||
create table t1(a NUMERIC(5,3), b NUMERIC(5,1), c float(5,2),
|
||
d NUMERIC(6,4), e float, f DECIMAL(6,3), g int(11), h DOUBLE(10,3),
|
||
i DOUBLE);
|
||
select COLUMN_NAME,COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH,
|
||
CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
|
||
from information_schema.columns where table_name= 't1';
|
||
drop table t1;
|
||
|
||
create table t115 as select table_name, column_name, column_type
|
||
from information_schema.columns where table_name = 'proc';
|
||
select * from t115;
|
||
drop table t115;
|
||
|
||
delimiter //;
|
||
create procedure p108 () begin declare c cursor for select data_type
|
||
from information_schema.columns; open c; open c; end;//
|
||
--error ER_SP_CURSOR_ALREADY_OPEN
|
||
call p108()//
|
||
delimiter ;//
|
||
drop procedure p108;
|
||
|
||
create view v1 as select A1.table_name from information_schema.TABLES A1
|
||
where table_name= "user";
|
||
select * from v1;
|
||
drop view v1;
|
||
|
||
create view vo as select 'a' union select 'a';
|
||
show index from vo;
|
||
select * from information_schema.TABLE_CONSTRAINTS where
|
||
TABLE_NAME= "vo";
|
||
select * from information_schema.key_column_usage where
|
||
TABLE_NAME= "vo";
|
||
drop view vo;
|
||
|
||
select TABLE_NAME,TABLE_TYPE,ENGINE
|
||
from information_schema.tables
|
||
where table_schema='information_schema' limit 2;
|
||
show tables from information_schema like "T%";
|
||
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create database information_schema;
|
||
use information_schema;
|
||
show full tables like "T%";
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create table t1(a int);
|
||
use test;
|
||
show tables;
|
||
use information_schema;
|
||
show tables like "T%";
|
||
|
||
#
|
||
# Bug#7210 information_schema: can't access when table-name = reserved word
|
||
#
|
||
select table_name from tables where table_name='user';
|
||
select column_name, privileges from columns
|
||
where table_name='user' and column_name like '%o%';
|
||
|
||
#
|
||
# Bug#7212 information_schema: "Can't find file" errors if storage engine gone
|
||
# Bug#7211 information_schema: crash if bad view
|
||
#
|
||
use test;
|
||
create function sub1(i int) returns int
|
||
return i+1;
|
||
create table t1(f1 int);
|
||
create view v2 (c) as select f1 from t1;
|
||
create view v3 (c) as select sub1(1);
|
||
create table t4(f1 int, KEY f1_key (f1));
|
||
drop table t1;
|
||
drop function sub1;
|
||
select table_name from information_schema.views
|
||
where table_schema='test';
|
||
select table_name from information_schema.views
|
||
where table_schema='test';
|
||
select column_name from information_schema.columns
|
||
where table_schema='test';
|
||
select index_name from information_schema.statistics where table_schema='test';
|
||
select constraint_name from information_schema.table_constraints
|
||
where table_schema='test';
|
||
show create view v2;
|
||
show create table v3;
|
||
drop view v2;
|
||
drop view v3;
|
||
drop table t4;
|
||
|
||
#
|
||
# Bug#7213 information_schema: redundant non-standard TABLE_NAMES table
|
||
#
|
||
--error ER_UNKNOWN_TABLE
|
||
select * from information_schema.table_names;
|
||
|
||
#
|
||
# Bug#2719 information_schema: errors in "columns"
|
||
#
|
||
select column_type from information_schema.columns
|
||
where table_schema="information_schema" and table_name="COLUMNS" and
|
||
(column_name="character_set_name" or column_name="collation_name");
|
||
|
||
#
|
||
# Bug#2718 information_schema: errors in "tables"
|
||
#
|
||
select TABLE_ROWS from information_schema.tables where
|
||
table_schema="information_schema" and table_name="COLUMNS";
|
||
select table_type from information_schema.tables
|
||
where table_schema="mysql" and table_name="user";
|
||
|
||
# test for 'show open tables ... where'
|
||
show open tables where `table` like "user";
|
||
# test for 'show status ... where'
|
||
--disable_warnings
|
||
show status where variable_name like "%database%";
|
||
# test for 'show variables ... where'
|
||
show variables where variable_name like "skip_show_databas";
|
||
--enable_warnings
|
||
|
||
#
|
||
# Bug#7981 SHOW GLOBAL STATUS crashes server
|
||
#
|
||
# We don't actually care about the value, just that it doesn't crash.
|
||
--replace_column 2 #
|
||
show global status like "Threads_running";
|
||
|
||
#
|
||
# Bug#7915 crash,JOIN VIEW, subquery,
|
||
# SELECT .. FROM INFORMATION_SCHEMA.COLUMNS
|
||
#
|
||
create table t1(f1 int);
|
||
create table t2(f2 int);
|
||
create view v1 as select * from t1, t2;
|
||
set @got_val= (select count(*) from information_schema.columns);
|
||
drop view v1;
|
||
drop table t1, t2;
|
||
|
||
#
|
||
# Bug#7476 crash on SELECT * FROM INFORMATION_SCHEMA.TABLES
|
||
#
|
||
use test;
|
||
CREATE TABLE t_crashme ( f1 BIGINT);
|
||
CREATE VIEW a1 (t_CRASHME) AS SELECT f1 FROM t_crashme GROUP BY f1;
|
||
CREATE VIEW a2 AS SELECT t_CRASHME FROM a1;
|
||
let $tab_count= 65;
|
||
--disable_query_log
|
||
while ($tab_count)
|
||
{
|
||
EVAL CREATE TABLE t_$tab_count (f1 BIGINT);
|
||
dec $tab_count ;
|
||
}
|
||
--disable_result_log
|
||
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES;
|
||
--enable_result_log
|
||
SELECT count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
|
||
let $tab_count= 65;
|
||
while ($tab_count)
|
||
{
|
||
EVAL DROP TABLE t_$tab_count;
|
||
dec $tab_count ;
|
||
}
|
||
--enable_query_log
|
||
drop view a2, a1;
|
||
drop table t_crashme;
|
||
|
||
#
|
||
# Bug#7215 information_schema: columns are longtext instead of varchar
|
||
# Bug#7217 information_schema: columns are varbinary() instead of timestamp
|
||
#
|
||
select table_schema, table_name, column_name from information_schema.columns
|
||
where table_schema not in ('performance_schema', 'sys')
|
||
and data_type = 'longtext';
|
||
|
||
select table_name, column_name, data_type from information_schema.columns
|
||
where table_schema not in ('performance_schema', 'sys')
|
||
and data_type = 'datetime'
|
||
and table_name not like 'innodb_%';
|
||
|
||
#
|
||
# Bug#8164 subquery with INFORMATION_SCHEMA.COLUMNS, 100 % CPU
|
||
#
|
||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES A
|
||
WHERE NOT EXISTS
|
||
(SELECT * FROM INFORMATION_SCHEMA.COLUMNS B
|
||
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
|
||
AND A.TABLE_NAME = B.TABLE_NAME);
|
||
|
||
#
|
||
# Bug#9344 INFORMATION_SCHEMA, wrong content, numeric columns
|
||
#
|
||
|
||
create table t1
|
||
( x_bigint BIGINT,
|
||
x_integer INTEGER,
|
||
x_smallint SMALLINT,
|
||
x_decimal DECIMAL(5,3),
|
||
x_numeric NUMERIC(5,3),
|
||
x_real REAL,
|
||
x_float FLOAT,
|
||
x_double_precision DOUBLE PRECISION );
|
||
SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH
|
||
FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE TABLE_NAME= 't1';
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#10261 INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user
|
||
#
|
||
|
||
grant select on test.* to mysqltest_4@localhost;
|
||
connect (user10261,localhost,mysqltest_4,,);
|
||
connection user10261;
|
||
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS
|
||
where COLUMN_NAME='TABLE_NAME' ORDER BY TABLE_NAME;
|
||
connection default;
|
||
disconnect user10261;
|
||
delete from mysql.user where user='mysqltest_4';
|
||
delete from mysql.db where user='mysqltest_4';
|
||
flush privileges;
|
||
|
||
#
|
||
# Bug#9404 information_schema: Weird error messages
|
||
# with SELECT SUM() ... GROUP BY queries
|
||
#
|
||
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE
|
||
table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest')
|
||
AND table_name not like 'ndb%' AND table_name not like 'innodb_%'
|
||
GROUP BY TABLE_SCHEMA;
|
||
|
||
|
||
|
||
#
|
||
# TRIGGERS table test
|
||
#
|
||
create table t1 (i int, j int);
|
||
|
||
delimiter |;
|
||
create trigger trg1 before insert on t1 for each row
|
||
begin
|
||
if new.j > 10 then
|
||
set new.j := 10;
|
||
end if;
|
||
end|
|
||
create trigger trg2 before update on t1 for each row
|
||
begin
|
||
if old.i % 2 = 0 then
|
||
set new.j := -1;
|
||
end if;
|
||
end|
|
||
create trigger trg3 after update on t1 for each row
|
||
begin
|
||
if new.j = -1 then
|
||
set @fired:= "Yes";
|
||
end if;
|
||
end|
|
||
delimiter ;|
|
||
|
||
--replace_column 6 #
|
||
show triggers;
|
||
--replace_column 17 #
|
||
select * from information_schema.triggers where trigger_schema in ('mysql', 'information_schema', 'test', 'mysqltest');
|
||
|
||
drop trigger trg1;
|
||
drop trigger trg2;
|
||
drop trigger trg3;
|
||
drop table t1;
|
||
|
||
|
||
#
|
||
# Bug#10964 Information Schema:Authorization check on privilege tables is improper
|
||
#
|
||
|
||
create database mysqltest;
|
||
create table mysqltest.t1 (f1 int, f2 int);
|
||
create table mysqltest.t2 (f1 int);
|
||
grant select (f1) on mysqltest.t1 to user1@localhost;
|
||
grant select on mysqltest.t2 to user2@localhost;
|
||
grant select on mysqltest.* to user3@localhost;
|
||
grant select on *.* to user4@localhost;
|
||
|
||
connect (con1,localhost,user1,,mysqltest);
|
||
connect (con2,localhost,user2,,mysqltest);
|
||
connect (con3,localhost,user3,,mysqltest);
|
||
connect (con4,localhost,user4,,);
|
||
connection con1;
|
||
select * from information_schema.column_privileges order by grantee;
|
||
select * from information_schema.table_privileges order by grantee;
|
||
select * from information_schema.schema_privileges order by grantee;
|
||
select * from information_schema.user_privileges order by grantee;
|
||
show grants;
|
||
connection con2;
|
||
select * from information_schema.column_privileges order by grantee;
|
||
select * from information_schema.table_privileges order by grantee;
|
||
select * from information_schema.schema_privileges order by grantee;
|
||
select * from information_schema.user_privileges order by grantee;
|
||
show grants;
|
||
connection con3;
|
||
select * from information_schema.column_privileges order by grantee;
|
||
select * from information_schema.table_privileges order by grantee;
|
||
select * from information_schema.schema_privileges order by grantee;
|
||
select * from information_schema.user_privileges order by grantee;
|
||
show grants;
|
||
connection con4;
|
||
select * from information_schema.column_privileges where grantee like '%user%'
|
||
order by grantee;
|
||
select * from information_schema.table_privileges where grantee like '%user%'
|
||
and table_schema !='mysql' order by grantee;
|
||
select * from information_schema.schema_privileges where grantee like '%user%'
|
||
and table_schema !='performance_schema' order by grantee;
|
||
select * from information_schema.user_privileges where grantee like '%user%' and grantee not like '%session%'
|
||
order by grantee;
|
||
show grants;
|
||
connection default;
|
||
disconnect con1;
|
||
disconnect con2;
|
||
disconnect con3;
|
||
disconnect con4;
|
||
drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost;
|
||
use test;
|
||
drop database mysqltest;
|
||
|
||
#
|
||
# Bug#11055 information_schema: routines.sql_data_access has wrong value
|
||
#
|
||
--disable_warnings
|
||
drop procedure if exists p1;
|
||
drop procedure if exists p2;
|
||
--enable_warnings
|
||
|
||
create procedure p1 () modifies sql data set @a = 5;
|
||
create procedure p2 () set @a = 5;
|
||
select sql_data_access from information_schema.routines
|
||
where specific_name like 'p%' and ROUTINE_SCHEMA != 'sys';
|
||
drop procedure p1;
|
||
drop procedure p2;
|
||
|
||
#
|
||
# Bug#9434 SHOW CREATE DATABASE information_schema;
|
||
#
|
||
show create database information_schema;
|
||
|
||
#
|
||
# Bug#11057 information_schema: columns table has some questionable contents
|
||
# Bug#12301 information_schema: NUMERIC_SCALE must be 0 for integer columns
|
||
#
|
||
create table t1(f1 LONGBLOB, f2 LONGTEXT);
|
||
select column_name,data_type,CHARACTER_OCTET_LENGTH,
|
||
CHARACTER_MAXIMUM_LENGTH
|
||
from information_schema.columns
|
||
where table_name='t1';
|
||
drop table t1;
|
||
create table t1(f1 tinyint, f2 SMALLINT, f3 mediumint, f4 int,
|
||
f5 BIGINT, f6 BIT, f7 bit(64));
|
||
select column_name, NUMERIC_PRECISION, NUMERIC_SCALE
|
||
from information_schema.columns
|
||
where table_name='t1';
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#12127 triggers do not show in info_schema before they are used if set to the database
|
||
#
|
||
create table t1 (f1 integer);
|
||
create trigger tr1 after insert on t1 for each row set @test_var=42;
|
||
use information_schema;
|
||
select trigger_schema, trigger_name from triggers where
|
||
trigger_name='tr1';
|
||
use test;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#12518 COLUMN_DEFAULT has wrong value if NOT NULL is set
|
||
#
|
||
create table t1 (a int not null, b int);
|
||
use information_schema;
|
||
select column_name, column_default from columns
|
||
where table_schema='test' and table_name='t1';
|
||
use test;
|
||
show columns from t1;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#12636 SHOW TABLE STATUS with where condition containing a subquery
|
||
# over information schema
|
||
#
|
||
|
||
CREATE TABLE t1 (a int);
|
||
CREATE TABLE t2 (b int);
|
||
|
||
--replace_column 8 # 12 # 13 #
|
||
SHOW TABLE STATUS FROM test
|
||
WHERE name IN ( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
|
||
WHERE TABLE_SCHEMA='test' AND TABLE_TYPE='BASE TABLE');
|
||
|
||
DROP TABLE t1,t2;
|
||
|
||
#
|
||
# Bug#12905 show fields from view behaving erratically with current database
|
||
#
|
||
create table t1(f1 int);
|
||
create view v1 (c) as select f1 from t1;
|
||
connect (con5,localhost,root,,*NO-ONE*);
|
||
select database();
|
||
show fields from test.v1;
|
||
connection default;
|
||
disconnect con5;
|
||
drop view v1;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#9846 Inappropriate error displayed while dropping table from 'INFORMATION_SCHEMA'
|
||
#
|
||
--error ER_PARSE_ERROR
|
||
alter database information_schema;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
drop database information_schema;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
drop table information_schema.tables;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
alter table information_schema.tables;
|
||
#
|
||
# Bug#9683 INFORMATION_SCH: Creation of temporary table allowed in Information_schema DB
|
||
#
|
||
use information_schema;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create temporary table schemata(f1 char(10));
|
||
#
|
||
# Bug#10708 SP's can use INFORMATION_SCHEMA as ROUTINE_SCHEMA
|
||
#
|
||
delimiter |;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
CREATE PROCEDURE p1 ()
|
||
BEGIN
|
||
SELECT 'foo' FROM DUAL;
|
||
END |
|
||
delimiter ;|
|
||
select ROUTINE_NAME from routines where ROUTINE_SCHEMA='information_schema';
|
||
#
|
||
# Bug#10734 Grant of privileges other than 'select' and 'create view' should fail on schema
|
||
#
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
grant all on information_schema.* to 'user1'@'localhost';
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
grant select on information_schema.* to 'user1'@'localhost';
|
||
|
||
#
|
||
# Bug#14089 FROM list subquery always fails when information_schema is current database
|
||
#
|
||
use test;
|
||
create table t1(id int);
|
||
insert into t1(id) values (1);
|
||
select 1 from (select 1 from test.t1) a;
|
||
use information_schema;
|
||
select 1 from (select 1 from test.t1) a;
|
||
use test;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#14476 `information_schema`.`TABLES`.`TABLE_TYPE` with empty value
|
||
#
|
||
create table t1 (f1 int(11));
|
||
create view v1 as select * from t1;
|
||
drop table t1;
|
||
select table_type from information_schema.tables
|
||
where table_name="v1";
|
||
drop view v1;
|
||
|
||
#
|
||
# Bug#14387 SHOW COLUMNS doesn't work on temporary tables
|
||
# Bug#15224 SHOW INDEX from temporary table doesn't work
|
||
# Bug#12770 DESC cannot display the info. about temporary table
|
||
#
|
||
create temporary table t1(f1 int, index(f1));
|
||
show columns from t1;
|
||
describe t1;
|
||
show indexes from t1;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#14271 I_S: columns has no size for (var)binary columns
|
||
#
|
||
create table t1(f1 binary(32), f2 varbinary(64));
|
||
select character_maximum_length, character_octet_length
|
||
from information_schema.columns where table_name='t1';
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#15533 crash, information_schema, function, view
|
||
#
|
||
CREATE TABLE t1 (f1 BIGINT, f2 VARCHAR(20), f3 BIGINT);
|
||
INSERT INTO t1 SET f1 = 1, f2 = 'Schoenenbourg', f3 = 1;
|
||
|
||
CREATE FUNCTION func2() RETURNS BIGINT RETURN 1;
|
||
|
||
delimiter //;
|
||
CREATE FUNCTION func1() RETURNS BIGINT
|
||
BEGIN
|
||
RETURN ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA != 'sys');
|
||
END//
|
||
delimiter ;//
|
||
|
||
CREATE VIEW v1 AS SELECT 1 FROM t1
|
||
WHERE f3 = (SELECT func2 ());
|
||
SELECT func1();
|
||
DROP TABLE t1;
|
||
DROP VIEW v1;
|
||
DROP FUNCTION func1;
|
||
DROP FUNCTION func2;
|
||
|
||
|
||
#
|
||
# Bug#15307 GROUP_CONCAT() with ORDER BY returns empty set on information_schema
|
||
#
|
||
SELECT column_type, GROUP_CONCAT(table_schema, '.', table_name), COUNT(*) AS num
|
||
FROM information_schema.columns WHERE
|
||
table_schema='information_schema' AND
|
||
(column_type = 'varchar(7)' OR column_type = 'varchar(20)'
|
||
OR column_type = 'varchar(30)')
|
||
GROUP BY column_type ORDER BY num;
|
||
|
||
#
|
||
# Bug#19236 bad COLUMNS.CHARACTER_MAXIMUM_LENGHT and CHARACTER_OCTET_LENGTH
|
||
#
|
||
create table t1(f1 char(1) not null, f2 char(9) not null)
|
||
default character set utf8;
|
||
select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from
|
||
information_schema.columns where table_schema='test' and table_name = 't1';
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#18177 any access to INFORMATION_SCHEMA.ROUTINES crashes
|
||
#
|
||
use mysql;
|
||
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
|
||
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
|
||
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
|
||
select routine_name from information_schema.routines where ROUTINE_SCHEMA='test';
|
||
delete from proc where name='';
|
||
use test;
|
||
|
||
#
|
||
# Bug#16681 information_schema shows forbidden VIEW details
|
||
#
|
||
grant select on test.* to mysqltest_1@localhost;
|
||
create table t1 (id int);
|
||
create view v1 as select * from t1;
|
||
create definer = mysqltest_1@localhost
|
||
sql security definer view v2 as select 1;
|
||
|
||
connect (con16681,localhost,mysqltest_1,,test);
|
||
connection con16681;
|
||
|
||
select * from information_schema.views
|
||
where table_name='v1' or table_name='v2';
|
||
connection default;
|
||
disconnect con16681;
|
||
drop view v1, v2;
|
||
drop table t1;
|
||
drop user mysqltest_1@localhost;
|
||
|
||
#
|
||
# Bug#19599 duplication of information_schema column value in a CONCAT expr with user var
|
||
#
|
||
set @a:= '.';
|
||
create table t1(f1 char(5));
|
||
create table t2(f1 char(5));
|
||
select concat(@a, table_name), @a, table_name
|
||
from information_schema.tables where table_schema = 'test';
|
||
drop table t1,t2;
|
||
|
||
|
||
#
|
||
# Bug#20230 routine_definition is not null
|
||
#
|
||
--disable_warnings
|
||
DROP PROCEDURE IF EXISTS p1;
|
||
DROP FUNCTION IF EXISTS f1;
|
||
--enable_warnings
|
||
|
||
CREATE PROCEDURE p1() SET @a= 1;
|
||
CREATE FUNCTION f1() RETURNS INT RETURN @a + 1;
|
||
CREATE USER mysql_bug20230@localhost;
|
||
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
|
||
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
|
||
|
||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||
SHOW CREATE PROCEDURE p1;
|
||
SHOW CREATE FUNCTION f1;
|
||
|
||
connect (conn1, localhost, mysql_bug20230,,);
|
||
|
||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||
SHOW CREATE PROCEDURE p1;
|
||
SHOW CREATE FUNCTION f1;
|
||
CALL p1();
|
||
SELECT f1();
|
||
|
||
disconnect conn1;
|
||
connection default;
|
||
|
||
DROP FUNCTION f1;
|
||
DROP PROCEDURE p1;
|
||
DROP USER mysql_bug20230@localhost;
|
||
|
||
#
|
||
# Bug#21231 query with a simple non-correlated subquery over
|
||
# INFORMARTION_SCHEMA.TABLES
|
||
#
|
||
|
||
SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
|
||
SELECT table_name from information_schema.tables
|
||
WHERE table_name=(SELECT MAX(table_name)
|
||
FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
|
||
#
|
||
# Bug#23037 Bug in field "Default" of query "SHOW COLUMNS FROM table"
|
||
#
|
||
# Note, MyISAM/InnoDB can't take more that 65532 chars, because the row
|
||
# size is limited to 65535 bytes (BLOBs not counted)
|
||
#
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS bug23037;
|
||
DROP FUNCTION IF EXISTS get_value;
|
||
--enable_warnings
|
||
--disable_query_log
|
||
DELIMITER |;
|
||
CREATE FUNCTION get_value()
|
||
RETURNS TEXT
|
||
DETERMINISTIC
|
||
BEGIN
|
||
DECLARE col1, col2, col3, col4, col6 CHAR(255);
|
||
DECLARE default_val VARCHAR(65532);
|
||
DECLARE done INT DEFAULT 0;
|
||
DECLARE cur1 CURSOR FOR SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='bug23037';
|
||
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
||
OPEN cur1;
|
||
FETCH cur1 INTO col1, col2, col3, col4, default_val, col6;
|
||
CLOSE cur1;
|
||
RETURN default_val;
|
||
end|
|
||
DELIMITER ;|
|
||
|
||
let $body=`SELECT REPEAT('A', 65532)`;
|
||
eval CREATE TABLE bug23037(fld1 VARCHAR(65532) CHARACTER SET latin1 DEFAULT "$body");
|
||
--enable_query_log
|
||
|
||
SELECT COLUMN_NAME, MD5(COLUMN_DEFAULT), LENGTH(COLUMN_DEFAULT) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='bug23037';
|
||
|
||
SELECT MD5(get_value());
|
||
|
||
SELECT COLUMN_NAME, MD5(COLUMN_DEFAULT), LENGTH(COLUMN_DEFAULT), COLUMN_DEFAULT=get_value() FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='bug23037';
|
||
|
||
DROP TABLE bug23037;
|
||
DROP FUNCTION get_value;
|
||
|
||
#
|
||
# Bug#22413 EXPLAIN SELECT FROM view with ORDER BY yield server crash
|
||
#
|
||
create view v1 as
|
||
select table_schema as object_schema,
|
||
table_name as object_name,
|
||
table_type as object_type
|
||
from information_schema.tables
|
||
order by object_schema;
|
||
explain select * from v1;
|
||
explain select * from (select table_name from information_schema.tables) as a;
|
||
drop view v1;
|
||
|
||
#
|
||
# Bug#23299 Some queries against INFORMATION_SCHEMA with subqueries fail
|
||
#
|
||
create table t1 (f1 int(11));
|
||
create table t2 (f1 int(11), f2 int(11));
|
||
|
||
select table_name from information_schema.tables
|
||
where table_schema = 'test' and table_name not in
|
||
(select table_name from information_schema.columns
|
||
where table_schema = 'test' and column_name = 'f3');
|
||
drop table t1,t2;
|
||
|
||
|
||
#
|
||
# Bug#24630 Subselect query crashes mysqld
|
||
#
|
||
select 1 as f1 from information_schema.tables where "CHARACTER_SETS"=
|
||
(select cast(table_name as char) from information_schema.tables
|
||
where table_schema != 'performance_schema'
|
||
order by table_name limit 1) limit 1;
|
||
|
||
select t.table_name, group_concat(t.table_schema, '.', t.table_name),
|
||
count(*) as num1
|
||
from information_schema.tables t
|
||
inner join information_schema.columns c1
|
||
on t.table_schema = c1.table_schema AND t.table_name = c1.table_name
|
||
where t.table_name not like 'ndb%' and
|
||
t.table_schema = 'information_schema' and
|
||
c1.ordinal_position =
|
||
(select isnull(c2.column_type) -
|
||
isnull(group_concat(c2.table_schema, '.', c2.table_name)) +
|
||
count(*) as num
|
||
from information_schema.columns c2 where
|
||
c2.table_schema='information_schema' and
|
||
(c2.column_type = 'varchar(7)' or c2.column_type = 'varchar(20)')
|
||
group by c2.column_type order by num limit 1)
|
||
and t.table_name not like 'innodb_%'
|
||
group by t.table_name order by num1, t.table_name;
|
||
|
||
#
|
||
# Bug#28266 IS_UPDATABLE field on VIEWS table in I_S database is wrong
|
||
#
|
||
create table t1(f1 int);
|
||
create view v1 as select f1+1 as a from t1;
|
||
create table t2 (f1 int, f2 int);
|
||
create view v2 as select f1+1 as a, f2 as b from t2;
|
||
select table_name, is_updatable from information_schema.views where table_schema != 'sys';
|
||
#
|
||
# Note: we can perform 'delete' for non updatable view.
|
||
#
|
||
delete from v1;
|
||
drop view v1,v2;
|
||
drop table t1,t2;
|
||
|
||
#
|
||
# Bug#25859 ALTER DATABASE works w/o parameters
|
||
#
|
||
--error ER_PARSE_ERROR
|
||
alter database;
|
||
--error ER_PARSE_ERROR
|
||
alter database test;
|
||
|
||
#
|
||
# Bug#27629 Possible security flaw in INFORMATION_SCHEMA and SHOW statements
|
||
#
|
||
|
||
create database mysqltest;
|
||
create table mysqltest.t1(a int, b int, c int);
|
||
create trigger mysqltest.t1_ai after insert on mysqltest.t1
|
||
for each row set @a = new.a + new.b + new.c;
|
||
grant select(b) on mysqltest.t1 to mysqltest_1@localhost;
|
||
|
||
select trigger_name from information_schema.triggers
|
||
where event_object_table='t1';
|
||
--replace_column 6 #
|
||
show triggers from mysqltest;
|
||
|
||
connect (con27629,localhost,mysqltest_1,,mysqltest);
|
||
show columns from t1;
|
||
select column_name from information_schema.columns where table_name='t1';
|
||
|
||
--replace_column 6 #
|
||
show triggers;
|
||
select trigger_name from information_schema.triggers
|
||
where event_object_table='t1';
|
||
connection default;
|
||
disconnect con27629;
|
||
drop user mysqltest_1@localhost;
|
||
drop database mysqltest;
|
||
|
||
#
|
||
# Bug#27747 database metadata doesn't return sufficient column default info
|
||
#
|
||
create table t1 (
|
||
f1 varchar(50),
|
||
f2 varchar(50) not null,
|
||
f3 varchar(50) default '',
|
||
f4 varchar(50) default NULL,
|
||
f5 bigint not null,
|
||
f6 bigint not null default 10,
|
||
f7 datetime not null,
|
||
f8 datetime default '2006-01-01'
|
||
);
|
||
select column_default from information_schema.columns where table_name= 't1';
|
||
show columns from t1;
|
||
drop table t1;
|
||
|
||
#
|
||
# Bug#30079 A check for "hidden" I_S tables is flawed
|
||
#
|
||
--error ER_UNKNOWN_TABLE
|
||
show fields from information_schema.table_names;
|
||
--error ER_UNKNOWN_TABLE
|
||
show keys from information_schema.table_names;
|
||
|
||
#
|
||
# Bug#34529 Crash on complex Falcon I_S select after ALTER .. PARTITION BY
|
||
#
|
||
USE information_schema;
|
||
SET max_heap_table_size = 16384;
|
||
|
||
CREATE TABLE test.t1( a INT );
|
||
|
||
# What we need to create here is a bit of a corner case:
|
||
# We need a star query with information_schema tables, where the first
|
||
# branch of the star join produces zero rows, so that reading of the
|
||
# second branch never happens. At the same time we have to make sure
|
||
# that data for at least the last table is swapped from MEMORY/HEAP to
|
||
# MyISAM. This and only this triggers the bug.
|
||
SELECT *
|
||
FROM tables ta
|
||
JOIN collations co ON ( co.collation_name = ta.table_catalog )
|
||
JOIN character_sets cs ON ( cs.character_set_name = ta.table_catalog );
|
||
|
||
DROP TABLE test.t1;
|
||
SET max_heap_table_size = DEFAULT;
|
||
USE test;
|
||
|
||
--echo End of 5.0 tests.
|
||
|
||
#
|
||
# Show engines
|
||
#
|
||
|
||
select * from information_schema.engines WHERE ENGINE="MyISAM";
|
||
|
||
#
|
||
# INFORMATION_SCHEMA.PROCESSLIST
|
||
#
|
||
|
||
grant select on *.* to user3148@localhost;
|
||
connect (con3148,localhost,user3148,,test);
|
||
connection con3148;
|
||
select user,db from information_schema.processlist;
|
||
connection default;
|
||
disconnect con3148;
|
||
drop user user3148@localhost;
|
||
|
||
#
|
||
# Bug#26174 Server Crash: INSERT ... SELECT ... FROM I_S.GLOBAL_STATUS
|
||
# in Event (see also openssl_1.test)
|
||
#
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS server_status;
|
||
DROP EVENT IF EXISTS event_status;
|
||
--enable_warnings
|
||
|
||
SET GLOBAL event_scheduler=1;
|
||
|
||
DELIMITER $$;
|
||
|
||
CREATE EVENT event_status
|
||
ON SCHEDULE AT NOW()
|
||
ON COMPLETION NOT PRESERVE
|
||
DO
|
||
BEGIN
|
||
CREATE TABLE server_status
|
||
SELECT variable_name
|
||
FROM information_schema.global_status
|
||
WHERE variable_name LIKE 'ABORTED_CONNECTS' OR
|
||
variable_name LIKE 'BINLOG_CACHE_DISK_USE';
|
||
END$$
|
||
|
||
DELIMITER ;$$
|
||
|
||
let $wait_timeout= 300;
|
||
let $wait_condition=select count(*) = 0 from information_schema.events where event_name='event_status';
|
||
--source include/wait_condition.inc
|
||
|
||
SELECT variable_name FROM server_status;
|
||
|
||
DROP TABLE server_status;
|
||
SET GLOBAL event_scheduler=0;
|
||
|
||
|
||
#
|
||
# WL#3732 Information schema optimization
|
||
#
|
||
|
||
explain select table_name from information_schema.views where
|
||
table_schema='test' and table_name='v1';
|
||
|
||
explain select * from information_schema.tables;
|
||
explain select * from information_schema.collations;
|
||
|
||
explain select * from information_schema.tables where
|
||
table_schema='test' and table_name= 't1';
|
||
explain select table_name, table_type from information_schema.tables
|
||
where table_schema='test';
|
||
|
||
explain select b.table_name
|
||
from information_schema.tables a, information_schema.columns b
|
||
where a.table_name='t1' and a.table_schema='test' and b.table_name=a.table_name;
|
||
|
||
#
|
||
# Bug#30310 wrong result on SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE ..
|
||
#
|
||
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
|
||
WHERE SCHEMA_NAME = 'mysqltest';
|
||
|
||
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
|
||
WHERE SCHEMA_NAME = '';
|
||
|
||
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
|
||
WHERE SCHEMA_NAME = 'test';
|
||
|
||
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TABLE_NAME='nonexisting';
|
||
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TABLE_NAME='';
|
||
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='';
|
||
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='nonexisting';
|
||
|
||
#
|
||
# Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
|
||
#
|
||
CREATE VIEW v1
|
||
AS SELECT *
|
||
FROM information_schema.tables;
|
||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS where TABLE_NAME = 'v1';
|
||
DROP VIEW v1;
|
||
|
||
#
|
||
# Bug#30795 Query on INFORMATION_SCHEMA.SCHEMATA, wrong result
|
||
#
|
||
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
|
||
WHERE SCHEMA_NAME ='information_schema';
|
||
|
||
#
|
||
# Bug#31381 Error in retrieving Data from INFORMATION_SCHEMA
|
||
#
|
||
SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES
|
||
WHERE TABLE_SCHEMA='mysql' and TABLE_NAME= 'db';
|
||
|
||
#
|
||
# Bug#31633 Information schema = NULL queries crash the server
|
||
#
|
||
select * from information_schema.columns where table_schema = NULL;
|
||
select * from `information_schema`.`COLUMNS` where `TABLE_NAME` = NULL;
|
||
select * from `information_schema`.`key_column_usage` where `TABLE_SCHEMA` = NULL;
|
||
select * from `information_schema`.`key_column_usage` where `TABLE_NAME` = NULL;
|
||
select * from `information_schema`.`PARTITIONS` where `TABLE_SCHEMA` = NULL;
|
||
select * from `information_schema`.`PARTITIONS` where `TABLE_NAME` = NULL;
|
||
select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `CONSTRAINT_SCHEMA` = NULL;
|
||
select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `TABLE_NAME` = NULL;
|
||
select * from information_schema.schemata where schema_name = NULL;
|
||
select * from `information_schema`.`STATISTICS` where `TABLE_SCHEMA` = NULL;
|
||
select * from `information_schema`.`STATISTICS` where `TABLE_NAME` = NULL;
|
||
select * from information_schema.tables where table_schema = NULL;
|
||
select * from information_schema.tables where table_catalog = NULL;
|
||
select * from information_schema.tables where table_name = NULL;
|
||
select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_SCHEMA` = NULL;
|
||
select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_NAME` = NULL;
|
||
--replace_column 17 #
|
||
select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_SCHEMA` = NULL;
|
||
--replace_column 17 #
|
||
select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_TABLE` = NULL;
|
||
select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
|
||
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
||
|
||
#
|
||
# Bug#31630 debug assert with explain extended select ... from i_s
|
||
#
|
||
explain extended select 1 from information_schema.tables;
|
||
|
||
#
|
||
# Bug#32775 problems with SHOW EVENTS and Information_Schema
|
||
#
|
||
use information_schema;
|
||
show events;
|
||
show events from information_schema;
|
||
show events where Db= 'information_schema';
|
||
use test;
|
||
|
||
--echo #
|
||
--echo # Bug#34166 Server crash in SHOW OPEN TABLES and prelocking
|
||
--echo #
|
||
--disable_warnings
|
||
drop table if exists t1;
|
||
drop function if exists f1;
|
||
--enable_warnings
|
||
create table t1 (a int);
|
||
delimiter |;
|
||
create function f1() returns int
|
||
begin
|
||
insert into t1 (a) values (1);
|
||
return 0;
|
||
end|
|
||
delimiter ;|
|
||
--disable_result_log
|
||
show open tables where f1()=0;
|
||
show open tables where f1()=0;
|
||
--enable_result_log
|
||
drop table t1;
|
||
drop function f1;
|
||
|
||
#
|
||
# Bug#34656 KILL a query = Assertion failed: m_status == DA_ERROR ||
|
||
# m_status == DA_OK
|
||
#
|
||
connect (conn1, localhost, root,,);
|
||
connection conn1;
|
||
let $ID= `select connection_id()`;
|
||
send select * from information_schema.tables where 1=sleep(100000);
|
||
connection default;
|
||
let $wait_timeout= 10;
|
||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||
where state='User sleep' and
|
||
info='select * from information_schema.tables where 1=sleep(100000)';
|
||
--source include/wait_condition.inc
|
||
disable_query_log;
|
||
eval kill $ID;
|
||
enable_query_log;
|
||
disconnect conn1;
|
||
let $wait_timeout= 10;
|
||
let $wait_condition=select count(*)=0 from information_schema.processlist
|
||
where state='User sleep' and
|
||
info='select * from information_schema.tables where 1=sleep(100000)';
|
||
--source include/wait_condition.inc
|
||
|
||
connect (conn1, localhost, root,,);
|
||
connection conn1;
|
||
let $ID= `select connection_id()`;
|
||
send select * from information_schema.columns where 1=sleep(100000);
|
||
connection default;
|
||
let $wait_timeout= 10;
|
||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||
where state='User sleep' and
|
||
info='select * from information_schema.columns where 1=sleep(100000)';
|
||
--source include/wait_condition.inc
|
||
disable_query_log;
|
||
eval kill $ID;
|
||
enable_query_log;
|
||
disconnect conn1;
|
||
let $wait_timeout= 10;
|
||
let $wait_condition=select count(*)=0 from information_schema.processlist
|
||
where state='User sleep' and
|
||
info='select * from information_schema.columns where 1=sleep(100000)';
|
||
--source include/wait_condition.inc
|
||
|
||
|
||
#
|
||
# Bug#38918 selecting from information_schema.columns is disproportionately slow
|
||
#
|
||
explain select count(*) from information_schema.tables;
|
||
explain select count(*) from information_schema.columns;
|
||
explain select count(*) from information_schema.views;
|
||
|
||
#
|
||
# Bug#39955 SELECT on INFORMATION_SCHEMA.GLOBAL_VARIABLES takes too long
|
||
#
|
||
set global init_connect="drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;\
|
||
drop table if exists t1;drop table if exists t1;";
|
||
select * from information_schema.global_variables where variable_name='init_connect';
|
||
set global init_connect="";
|
||
|
||
#
|
||
# Bug#34517 SHOW GLOBAL STATUS does not work properly in embedded server.
|
||
#
|
||
|
||
--disable_warnings
|
||
create table t0 select * from information_schema.global_status where VARIABLE_NAME='COM_SELECT';
|
||
SELECT 1;
|
||
select a.VARIABLE_VALUE - b.VARIABLE_VALUE from t0 b, information_schema.global_status a
|
||
where a.VARIABLE_NAME = b.VARIABLE_NAME;
|
||
--enable_warnings
|
||
drop table t0;
|
||
|
||
#
|
||
# Bug#35275 INFORMATION_SCHEMA.TABLES.CREATE_OPTIONS omits KEY_BLOCK_SIZE
|
||
#
|
||
CREATE TABLE t1(a INT) KEY_BLOCK_SIZE=1;
|
||
SELECT CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
||
DROP TABLE t1;
|
||
|
||
#
|
||
# Bug #22047: Time in SHOW PROCESSLIST for SQL thread in replication seems
|
||
# to become negative
|
||
#
|
||
|
||
SET TIMESTAMP=@@TIMESTAMP + 10000000;
|
||
SELECT 'OK' AS TEST_RESULT FROM INFORMATION_SCHEMA.PROCESSLIST WHERE time < 0;
|
||
SET TIMESTAMP=DEFAULT;
|
||
|
||
|
||
--echo #
|
||
--echo # Bug #50276: Security flaw in INFORMATION_SCHEMA.TABLES
|
||
--echo #
|
||
CREATE DATABASE db1;
|
||
USE db1;
|
||
CREATE TABLE t1 (id INT);
|
||
CREATE USER nonpriv;
|
||
USE test;
|
||
|
||
connect (nonpriv_con, localhost, nonpriv,,);
|
||
connection nonpriv_con;
|
||
--echo # connected as nonpriv
|
||
--echo # Should return 0
|
||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
||
USE INFORMATION_SCHEMA;
|
||
--echo # Should return 0
|
||
SELECT COUNT(*) FROM TABLES WHERE TABLE_NAME='t1';
|
||
|
||
connection default;
|
||
--echo # connected as root
|
||
disconnect nonpriv_con;
|
||
DROP USER nonpriv;
|
||
DROP TABLE db1.t1;
|
||
DROP DATABASE db1;
|
||
|
||
--echo
|
||
--echo Bug#54422 query with = 'variables'
|
||
--echo
|
||
|
||
CREATE TABLE variables(f1 INT);
|
||
SELECT COLUMN_DEFAULT, TABLE_NAME
|
||
FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = 'variables';
|
||
DROP TABLE variables;
|
||
|
||
--echo #
|
||
--echo # Bug #53814: NUMERIC_PRECISION for unsigned bigint field is 19,
|
||
--echo # should be 20
|
||
--echo #
|
||
|
||
CREATE TABLE ubig (a BIGINT, b BIGINT UNSIGNED);
|
||
|
||
SELECT TABLE_NAME, COLUMN_NAME, NUMERIC_PRECISION
|
||
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='ubig';
|
||
|
||
INSERT IGNORE INTO ubig VALUES (0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF);
|
||
SELECT length(CAST(b AS CHAR)) FROM ubig;
|
||
|
||
DROP TABLE ubig;
|
||
|
||
|
||
--echo End of 5.1 tests.
|
||
|
||
#
|
||
# WL#2003 INFORMATION_SCHEMA: PARAMETERS view
|
||
# WL#2822 INFORMATION_SCHEMA.ROUTINES: Add missing columns
|
||
#
|
||
create function f1 (p1 int, p2 datetime, p3 decimal(10,2))
|
||
returns char(10) return null;
|
||
create procedure p1 (p1 float(8,5), p2 char(32), p3 varchar(10)) begin end;
|
||
create procedure p2 (p1 enum('c', 's'), p2 blob, p3 text) begin end;
|
||
select * from information_schema.parameters where specific_schema='test';
|
||
select data_type, character_maximum_length,
|
||
character_octet_length, numeric_precision,
|
||
numeric_scale, character_set_name,
|
||
collation_name, dtd_identifier
|
||
from information_schema.routines where routine_schema='test';
|
||
drop procedure p1;
|
||
drop procedure p2;
|
||
drop function f1;
|
||
|
||
--echo #
|
||
--echo # Additional test for WL#3726 "DDL locking for all metadata objects"
|
||
--echo # To avoid possible deadlocks process of filling of I_S tables should
|
||
--echo # use high-priority metadata lock requests when opening tables.
|
||
--echo # Below we just test that we really use high-priority lock request
|
||
--echo # since reproducing a deadlock will require much more complex test.
|
||
--echo #
|
||
--disable_warnings
|
||
drop tables if exists t1, t2, t3;
|
||
--enable_warnings
|
||
create table t1 (i int);
|
||
create table t2 (j int primary key auto_increment);
|
||
connect (con3726_1,localhost,root,,test);
|
||
--echo # Switching to connection 'con3726_1'
|
||
connection con3726_1;
|
||
lock table t2 read;
|
||
connect (con3726_2,localhost,root,,test);
|
||
--echo # Switching to connection 'con3726_2'
|
||
connection con3726_2;
|
||
--echo # RENAME below will be blocked by 'lock table t2 read' above but
|
||
--echo # will add two pending requests for exclusive metadata locks.
|
||
--send rename table t2 to t3
|
||
--echo # Switching to connection 'default'
|
||
connection default;
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table metadata lock" and
|
||
info like "rename table t2 to t3";
|
||
--source include/wait_condition.inc
|
||
--echo # These statements should not be blocked by pending lock requests
|
||
select table_name, column_name, data_type from information_schema.columns
|
||
where table_schema = 'test' and table_name in ('t1', 't2');
|
||
select table_name, auto_increment from information_schema.tables
|
||
where table_schema = 'test' and table_name in ('t1', 't2');
|
||
--echo # Switching to connection 'con3726_1'
|
||
connection con3726_1;
|
||
unlock tables;
|
||
--echo # Switching to connection 'con3726_2'
|
||
connection con3726_2;
|
||
--reap
|
||
--echo # Switching to connection 'default'
|
||
connection default;
|
||
disconnect con3726_1;
|
||
disconnect con3726_2;
|
||
drop tables t1, t3;
|
||
|
||
#
|
||
# Bug#39270 I_S optimization algorithm does not work properly in some cases
|
||
#
|
||
EXPLAIN SELECT * FROM information_schema.key_column_usage;
|
||
EXPLAIN SELECT * FROM information_schema.partitions WHERE TABLE_NAME='t1';
|
||
EXPLAIN SELECT * FROM information_schema.referential_constraints
|
||
WHERE CONSTRAINT_SCHEMA='test';
|
||
EXPLAIN SELECT * FROM information_schema.table_constraints
|
||
WHERE TABLE_NAME='t1' and TABLE_SCHEMA='test';
|
||
EXPLAIN SELECT * FROM information_schema.triggers
|
||
WHERE EVENT_OBJECT_SCHEMA='test';
|
||
|
||
#
|
||
# Bug#24062 Incorrect error msg after execute DROP TABLE IF EXISTS on information_schema
|
||
#
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create table information_schema.t1 (f1 INT);
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
drop table information_schema.t1;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
drop temporary table if exists information_schema.t1;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create temporary table information_schema.t1 (f1 INT);
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
drop view information_schema.v1;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create view information_schema.v1;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
create trigger mysql.trg1 after insert on information_schema.t1 for each row set @a=1;
|
||
--error 1109
|
||
create table t1 select * from information_schema.t1;
|
||
|
||
CREATE TABLE t1(f1 char(100));
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
REPAIR TABLE t1, information_schema.tables;
|
||
CHECKSUM TABLE t1, information_schema.tables;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
ANALYZE TABLE t1, information_schema.tables;
|
||
CHECK TABLE t1, information_schema.tables;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
OPTIMIZE TABLE t1, information_schema.tables;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
RENAME TABLE v1 to v2, information_schema.tables to t2;
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
DROP TABLE t1, information_schema.tables;
|
||
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
LOCK TABLES t1 READ, information_schema.tables READ;
|
||
DROP TABLE t1;
|
||
|
||
#
|
||
# Bug#38916 Select from I_S.ROUTINES results in "No database selected" error
|
||
#
|
||
create function f1() returns int return 1;
|
||
--connect (con7,localhost,root,,*NO-ONE*)
|
||
select routine_name, routine_type from information_schema.routines
|
||
where routine_schema = 'test';
|
||
connection default;
|
||
drop function f1;
|
||
disconnect con7;
|
||
|
||
|
||
#
|
||
# Bug #43834 Assertion in Natural_join_column::db_name() on an I_S query
|
||
#
|
||
|
||
SELECT *
|
||
FROM INFORMATION_SCHEMA.key_column_usage
|
||
LEFT JOIN INFORMATION_SCHEMA.COLUMNS
|
||
USING (TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME)
|
||
WHERE COLUMNS.TABLE_SCHEMA = 'test'
|
||
AND COLUMNS.TABLE_NAME = 't1';
|
||
|
||
|
||
--echo #
|
||
--echo # A test case for Bug#56540 "Exception (crash) in sql_show.cc
|
||
--echo # during rqg_info_schema test on Windows"
|
||
--echo # Ensure that we never access memory of a closed table,
|
||
--echo # in particular, never access table->field[] array.
|
||
--echo # Before the fix, the below test case, produced
|
||
--echo # valgrind errors.
|
||
--echo #
|
||
|
||
--disable_warnings
|
||
drop table if exists t1;
|
||
drop view if exists v1;
|
||
--enable_warnings
|
||
|
||
create table t1 (a int, b int);
|
||
create view v1 as select t1.a, t1.b from t1;
|
||
alter table t1 change b c int;
|
||
lock table t1 read;
|
||
connect(con1, localhost, root,,);
|
||
--echo # --> connection con1
|
||
connection con1;
|
||
send flush tables;
|
||
--echo # --> connection default
|
||
connection default;
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table flush" and
|
||
info = "flush tables";
|
||
--source include/wait_condition.inc
|
||
--vertical_results
|
||
select * from information_schema.views where table_schema != 'sys';
|
||
--horizontal_results
|
||
unlock tables;
|
||
|
||
--echo #
|
||
--echo # Cleanup.
|
||
--echo #
|
||
|
||
--echo # --> connection con1
|
||
connection con1;
|
||
--echo # Reaping 'flush tables'
|
||
reap;
|
||
disconnect con1;
|
||
--source include/wait_until_disconnected.inc
|
||
--echo # --> connection default
|
||
connection default;
|
||
drop table t1;
|
||
drop view v1;
|
||
|
||
|
||
--echo #
|
||
--echo # Test for bug #12828477 - "MDL SUBSYSTEM CREATES BIG OVERHEAD FOR
|
||
--echo # CERTAIN QUERIES TO INFORMATION_SCHEMA".
|
||
--echo #
|
||
--echo # Check that metadata locks which are acquired during the process
|
||
--echo # of opening tables/.FRMs/.TRG files while filling I_S table are
|
||
--echo # not kept to the end of statement. Keeping the locks has caused
|
||
--echo # performance problems in cases when big number of tables (.FRMs
|
||
--echo # or .TRG files) were scanned as cost of new lock acquisition has
|
||
--echo # increased linearly.
|
||
--disable_warnings
|
||
drop database if exists mysqltest;
|
||
--enable_warnings
|
||
create database mysqltest;
|
||
use mysqltest;
|
||
create table t0 (i int);
|
||
create table t1 (j int);
|
||
create table t2 (k int);
|
||
|
||
--echo #
|
||
--echo # Test that we don't keep locks in case when we to fill
|
||
--echo # I_S table we perform full-blown table open.
|
||
--echo #
|
||
|
||
--echo # Acquire lock on 't2' so upcoming RENAME is
|
||
--echo # blocked.
|
||
lock tables t2 read;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_1'.
|
||
--echo #
|
||
connect (con12828477_1, localhost, root,,mysqltest);
|
||
--echo # The below RENAME should wait on 't2' while
|
||
--echo # keeping X lock on 't1'.
|
||
--send rename table t1 to t3, t2 to t1, t3 to t2
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_2'.
|
||
--echo #
|
||
connect (con12828477_2, localhost, root,,mysqltest);
|
||
--echo # Wait while the above RENAME is blocked.
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table metadata lock" and
|
||
info = "rename table t1 to t3, t2 to t1, t3 to t2";
|
||
--source include/wait_condition.inc
|
||
|
||
--echo # Issue query to I_S which will open 't0' and get
|
||
--echo # blocked on 't1' because of RENAME.
|
||
--send select table_name, auto_increment from information_schema.tables where table_schema='mysqltest'
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_3'.
|
||
--echo #
|
||
connect (con12828477_3, localhost, root,,mysqltest);
|
||
--echo # Wait while the above SELECT is blocked.
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table metadata lock" and
|
||
info = "select table_name, auto_increment from information_schema.tables where table_schema='mysqltest'";
|
||
--source include/wait_condition.inc
|
||
|
||
--echo #
|
||
--echo # Check that it holds no lock on 't0' so it can be renamed.
|
||
rename table t0 to t4;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'default'.
|
||
--echo #
|
||
connection default;
|
||
--echo #
|
||
--echo # Unblock the first RENAME.
|
||
unlock tables;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_1'.
|
||
--echo #
|
||
connection con12828477_1;
|
||
--echo # Reap the first RENAME
|
||
--reap
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_2'.
|
||
--echo #
|
||
connection con12828477_2;
|
||
--echo # Reap SELECT to I_S.
|
||
--reap
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'default'.
|
||
--echo #
|
||
connection default;
|
||
|
||
--echo #
|
||
--echo # Now test that we don't keep locks in case when we to fill
|
||
--echo # I_S table we read .FRM or .TRG file only (this was the case
|
||
--echo # for which problem existed).
|
||
--echo #
|
||
|
||
rename table t4 to t0;
|
||
--echo # Acquire lock on 't2' so upcoming RENAME is
|
||
--echo # blocked.
|
||
lock tables t2 read;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_1'.
|
||
--echo #
|
||
connection con12828477_1;
|
||
--echo # The below RENAME should wait on 't2' while
|
||
--echo # keeping X lock on 't1'.
|
||
--send rename table t1 to t3, t2 to t1, t3 to t2
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_2'.
|
||
--echo #
|
||
connection con12828477_2;
|
||
--echo # Wait while the above RENAME is blocked.
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table metadata lock" and
|
||
info = "rename table t1 to t3, t2 to t1, t3 to t2";
|
||
--source include/wait_condition.inc
|
||
|
||
--echo # Issue query to I_S which will open 't0' and get
|
||
--echo # blocked on 't1' because of RENAME.
|
||
--send select event_object_table, trigger_name from information_schema.triggers where event_object_schema='mysqltest'
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_3'.
|
||
--echo #
|
||
connection con12828477_3;
|
||
--echo # Wait while the above SELECT is blocked.
|
||
let $wait_condition=
|
||
select count(*) = 1 from information_schema.processlist
|
||
where state = "Waiting for table metadata lock" and
|
||
info = "select event_object_table, trigger_name from information_schema.triggers where event_object_schema='mysqltest'";
|
||
--source include/wait_condition.inc
|
||
|
||
--echo #
|
||
--echo # Check that it holds no lock on 't0' so it can be renamed.
|
||
rename table t0 to t4;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'default'.
|
||
--echo #
|
||
connection default;
|
||
--echo #
|
||
--echo # Unblock the first RENAME.
|
||
unlock tables;
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_1'.
|
||
--echo #
|
||
connection con12828477_1;
|
||
--echo # Reap the first RENAME
|
||
--reap
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'con12828477_2'.
|
||
--echo #
|
||
connection con12828477_2;
|
||
--echo # Reap SELECT to I_S.
|
||
--reap
|
||
|
||
--echo #
|
||
--echo # Switching to connection 'default'.
|
||
--echo #
|
||
connection default;
|
||
disconnect con12828477_1;
|
||
disconnect con12828477_2;
|
||
disconnect con12828477_3;
|
||
|
||
--echo #
|
||
--echo # Test case to test DATETIME_PRECISION of information_schema.columns table
|
||
--echo #
|
||
--disable_warnings
|
||
drop database if exists mysqltest;
|
||
--enable_warnings
|
||
create database mysqltest;
|
||
use mysqltest;
|
||
create table mysqltest.t(a int, b date, c time, d datetime, e timestamp);
|
||
create table mysqltest.t0(a int, b date, c time(0), d datetime(0), e timestamp(0));
|
||
create table mysqltest.t1(a int, b date, c time(1), d datetime(1), e timestamp(1));
|
||
create table mysqltest.t2(a int, b date, c time(2), d datetime(2), e timestamp(2));
|
||
create table mysqltest.t3(a int, b date, c time(3), d datetime(3), e timestamp(3));
|
||
create table mysqltest.t4(a int, b date, c time(4), d datetime(4), e timestamp(4));
|
||
create table mysqltest.t5(a int, b date, c time(5), d datetime(5), e timestamp(5));
|
||
create table mysqltest.t6(a int, b date, c time(6), d datetime(6), e timestamp(6));
|
||
select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATETIME_PRECISION from information_schema.columns where TABLE_SCHEMA='mysqltest';
|
||
|
||
--echo #
|
||
--echo # Clean-up.
|
||
drop database mysqltest;
|
||
use test;
|
||
|
||
--echo #
|
||
--echo # Test for bug #16869534 - "QUERYING SUBSET OF COLUMNS DOESN'T USE TABLE
|
||
--echo # CACHE; OPENED_TABLES INCREASES"
|
||
--echo #
|
||
--disable_result_log
|
||
SELECT * FROM INFORMATION_SCHEMA.TABLES;
|
||
--enable_result_log
|
||
--disable_warnings
|
||
SELECT VARIABLE_VALUE INTO @val1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE
|
||
VARIABLE_NAME LIKE 'Opened_tables';
|
||
--enable_warnings
|
||
--disable_result_log
|
||
SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES;
|
||
--enable_result_log
|
||
--disable_warnings
|
||
--echo # The below SELECT query should give same output as above SELECT query.
|
||
SELECT VARIABLE_VALUE INTO @val2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE
|
||
VARIABLE_NAME LIKE 'Opened_tables';
|
||
--enable_warnings
|
||
--echo # The below select should return '1'
|
||
SELECT @val1 = @val2;
|
||
|
||
--echo #
|
||
--echo # End of 5.5 tests
|
||
--echo #
|
||
|
||
--echo #
|
||
--echo # Bug #13966514 : CRASH IN GET_SCHEMA_TABLES_RESULT WITH MIN/MAX,
|
||
--echo # LEFT/RIGHT JOIN ON I_S TABLE
|
||
--echo #
|
||
|
||
CREATE TABLE t1(a INT PRIMARY KEY);
|
||
INSERT INTO t1 VALUES (1);
|
||
--echo # must not crash
|
||
SELECT MAX(a) FROM information_schema.engines RIGHT JOIN t1 ON 1;
|
||
DROP TABLE t1;
|
||
|
||
--echo #
|
||
--echo # BUG#13463397 - 63562: UNKNOWN DATABASE INFORMATION_SCHEMA
|
||
--echo #
|
||
|
||
--error ER_DBACCESS_DENIED_ERROR
|
||
CREATE PROCEDURE information_schema.is() BEGIN END;
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED
|
||
--echo #
|
||
|
||
SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES
|
||
WHERE
|
||
SUPPORT IN (
|
||
SELECT DISTINCT SUPPORT
|
||
FROM INFORMATION_SCHEMA.ENGINES
|
||
WHERE
|
||
ENGINE IN (
|
||
SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES
|
||
WHERE ENGINE IN ('MEMORY')))
|
||
ORDER BY ENGINE
|
||
LIMIT 1;
|
||
|
||
|
||
--echo #
|
||
--echo # End of 5.6 tests
|
||
--echo #
|
||
|
||
# Wait till all disconnects are completed
|
||
--source include/wait_until_count_sessions.inc
|
||
|
||
--echo #
|
||
--echo # Bug#19307777 ASSERTION `QEP_TAB->CONDITION() == QEP_TAB->CONDITION_OPTIM()' FAILED
|
||
--echo #
|
||
|
||
let $query=
|
||
select * from
|
||
information_schema . innodb_cmp as table1
|
||
left outer join mysql . procs_priv as table2
|
||
on ( table2 . routine_name = table1 . compress_time )
|
||
where not table1 . compress_time <> '2006-09-03 10:11:37.046313'
|
||
having table2 . grantor <> '2008-02-28 22:17:05.025739' limit 9;
|
||
|
||
eval EXPLAIN $query;
|
||
eval $query;
|
||
|
||
--echo #
|
||
--echo # Bug#20665051 SQL_SHOW.CC:7764: ASSERTION `QEP_TAB->CONDITION() == QEP_TAB->CONDITION_OPTIM()
|
||
--echo #
|
||
|
||
let query=
|
||
SELECT 1
|
||
FROM DUAL
|
||
WHERE (SELECT 1 FROM information_schema.tables
|
||
WHERE table_schema
|
||
ORDER BY table_name
|
||
LIMIT 1);
|
||
eval EXPLAIN $query;
|
||
--disable_warnings
|
||
eval $query;
|
||
--enable_warnings
|
||
|
||
let $query=
|
||
SELECT 1 AS F1 FROM information_schema.tables
|
||
WHERE "CHARACTER_SETS"=
|
||
(SELECT CAST(TABLE_NAME AS CHAR)
|
||
FROM information_schema.tables
|
||
WHERE table_schema != 'PERFORMANCE_SCHEMA'
|
||
ORDER BY table_name
|
||
LIMIT 1)
|
||
LIMIT 1;
|
||
|
||
eval EXPLAIN $query;
|
||
eval $query;
|
||
|
||
--echo #
|
||
--echo # WL#2284: Increase the length of a user name
|
||
--echo #
|
||
|
||
connection default;
|
||
|
||
--character_set utf8
|
||
set names utf8;
|
||
|
||
CREATE USER user_name_len_22_01234@localhost;
|
||
GRANT SELECT ON *.* TO user_name_len_22_01234@localhost;
|
||
connect (con_user22,localhost,user_name_len_22_01234,,test);
|
||
connection con_user22;
|
||
SELECT user,db FROM information_schema.processlist;
|
||
connection default;
|
||
|
||
# 32 characters user name
|
||
CREATE USER очень_очень_очень_длинный_юзер__@localhost;
|
||
GRANT SELECT ON *.* TO очень_очень_очень_длинный_юзер__@localhost;
|
||
connect (con_user32_utf8,localhost,очень_очень_очень_длинный_юзер__,,test);
|
||
connection con_user32_utf8;
|
||
SELECT user,db FROM information_schema.processlist;
|
||
connection default;
|
||
|
||
# cleanup
|
||
disconnect con_user22;
|
||
disconnect con_user32_utf8;
|
||
DROP USER user_name_len_22_01234@localhost;
|
||
DROP USER очень_очень_очень_длинный_юзер__@localhost;
|
||
set names default;
|
||
|
||
set sql_mode= @orig_sql_mode;
|