1479 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1479 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								# This test  uses grants, which can't get tested for embedded server
							 | 
						||
| 
								 | 
							
								-- source include/not_embedded.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# check that CSV engine was compiled in, as the result of the test depends
							 | 
						||
| 
								 | 
							
								# on the presence of the log tables (which are CSV-based).
							 | 
						||
| 
								 | 
							
								--source include/have_csv.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Save the initial number of concurrent sessions
							 | 
						||
| 
								 | 
							
								--source include/count_sessions.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# 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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								show variables where variable_name like "skip_show_database";
							 | 
						||
| 
								 | 
							
								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<>'ndb_binlog_index' AND
							 | 
						||
| 
								 | 
							
								        table_name<>'ndb_apply_status';
							 | 
						||
| 
								 | 
							
								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_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 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;
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								grant select (a) on test.t1 to joe@localhost with grant option;
							 | 
						||
| 
								 | 
							
								select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
							 | 
						||
| 
								 | 
							
								select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES;
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								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_UNKNOWN_TABLE
							 | 
						||
| 
								 | 
							
								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'
							 | 
						||
| 
								 | 
							
								show status where variable_name like "%database%";
							 | 
						||
| 
								 | 
							
								# test for 'show variables ... where'
							 | 
						||
| 
								 | 
							
								show variables where variable_name like "skip_show_databas";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 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 data_type = 'longtext';
							 | 
						||
| 
								 | 
							
								select table_name, column_name, data_type from information_schema.columns
							 | 
						||
| 
								 | 
							
								where data_type = 'datetime';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 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';
							 | 
						||
| 
								 | 
							
								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<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' 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 ;|
							 | 
						||
| 
								 | 
							
								show triggers;
							 | 
						||
| 
								 | 
							
								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%'
							 | 
						||
| 
								 | 
							
								order by grantee;
							 | 
						||
| 
								 | 
							
								select * from information_schema.schema_privileges where grantee like '%user%'
							 | 
						||
| 
								 | 
							
								order by grantee;
							 | 
						||
| 
								 | 
							
								select * from information_schema.user_privileges where grantee like '%user%'
							 | 
						||
| 
								 | 
							
								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%';
							 | 
						||
| 
								 | 
							
								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_BAD_DB_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);
							 | 
						||
| 
								 | 
							
								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(27)')
							 | 
						||
| 
								 | 
							
								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#18925 subqueries with MIN/MAX functions on INFORMARTION_SCHEMA
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT t.table_name, c1.column_name
							 | 
						||
| 
								 | 
							
								  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_schema = 'information_schema' AND
							 | 
						||
| 
								 | 
							
								        c1.ordinal_position =
							 | 
						||
| 
								 | 
							
								        ( SELECT COALESCE(MIN(c2.ordinal_position),1)
							 | 
						||
| 
								 | 
							
								            FROM information_schema.columns c2
							 | 
						||
| 
								 | 
							
								            WHERE c2.table_schema = t.table_schema AND
							 | 
						||
| 
								 | 
							
								                  c2.table_name = t.table_name AND
							 | 
						||
| 
								 | 
							
								                  c2.column_name LIKE '%SCHEMA%'
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								SELECT t.table_name, c1.column_name
							 | 
						||
| 
								 | 
							
								  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_schema = 'information_schema' AND
							 | 
						||
| 
								 | 
							
								        c1.ordinal_position =
							 | 
						||
| 
								 | 
							
								        ( SELECT COALESCE(MIN(c2.ordinal_position),1)
							 | 
						||
| 
								 | 
							
								            FROM information_schema.columns c2
							 | 
						||
| 
								 | 
							
								            WHERE c2.table_schema = 'information_schema' AND
							 | 
						||
| 
								 | 
							
								                  c2.table_name = t.table_name AND
							 | 
						||
| 
								 | 
							
								                  c2.column_name LIKE '%SCHEMA%'
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Bug#2123 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
							 | 
						||
| 
								 | 
							
								 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_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)
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 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';
							 | 
						||
| 
								 | 
							
								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';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_SCHEMA` = NULL;
							 | 
						||
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								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 INTO ubig VALUES (0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF);
							 | 
						||
| 
								 | 
							
								SELECT length(CAST(b AS CHAR)) FROM ubig;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DROP TABLE ubig;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--echo End of 5.1 tests.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Wait till all disconnects are completed
							 | 
						||
| 
								 | 
							
								--source include/wait_until_count_sessions.inc
							 | 
						||
| 
								 | 
							
								
							 |