2011-01-17 08:12:38 +01:00
################################################################################
#
# NOTICE:
#
# This file unfortunately contains characters in various different encodings.
# Be careful when editing this file to ensure that you (or your editor) do
# not change things (such as encodings) on lines that you did not mean to
# modify.
#
################################################################################
2006-10-23 12:02:51 +02:00
# Uses GRANT commands that usually disabled in embedded server
2005-03-30 03:17:46 +02:00
-- source include/not_embedded.inc
2006-01-19 03:56:06 +01:00
# 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
2000-12-28 02:56:38 +01:00
#
# Test of some show commands
#
2003-01-06 00:48:59 +01:00
--disable_warnings
2001-10-08 03:58:07 +02:00
drop table if exists t1,t2;
2005-01-03 20:04:33 +01:00
drop table if exists t1aa,t2aa;
2004-08-31 13:35:04 +02:00
drop database if exists mysqltest;
2005-12-07 15:01:17 +01:00
drop database if exists mysqltest1;
2004-10-07 09:50:13 +02:00
delete from mysql.user where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
delete from mysql.db where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges;
2003-01-06 00:48:59 +01:00
--enable_warnings
2000-12-28 02:56:38 +01:00
create table t1 (a int not null primary key, b int not null,c int not null, key(b,c));
insert into t1 values (1,2,2),(2,2,3),(3,2,4),(4,2,4);
2007-06-28 11:24:52 +02:00
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
2002-03-13 18:20:17 +01:00
check table t1 fast;
check table t1 fast;
check table t1 changed;
2000-12-28 02:56:38 +01:00
insert into t1 values (5,5,5);
2002-03-13 18:20:17 +01:00
check table t1 changed;
check table t1 medium;
check table t1 extended;
2001-03-15 12:36:14 +01:00
show index from t1;
2007-06-28 11:24:52 +02:00
--disable_metadata
2007-06-06 19:57:07 +02:00
--error ER_DUP_ENTRY
2004-11-02 19:13:27 +01:00
insert into t1 values (5,5,5);
2007-06-28 11:24:52 +02:00
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
2000-12-28 02:56:38 +01:00
optimize table t1;
2007-06-28 11:24:52 +02:00
--disable_metadata
2000-12-28 02:56:38 +01:00
optimize table t1;
drop table t1;
2001-01-03 01:15:48 +01:00
2011-01-07 14:37:46 +01:00
# show variables;
2007-06-28 11:24:52 +02:00
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
2001-01-03 01:15:48 +01:00
show variables like "wait_timeout%";
2002-04-18 17:24:14 +02:00
show variables like "WAIT_timeout%";
2001-01-03 01:15:48 +01:00
show variables like "this_doesn't_exists%";
show table status from test like "this_doesn't_exists%";
show databases;
show databases like "test%";
2007-06-28 11:24:52 +02:00
--disable_metadata
2001-03-15 12:36:14 +01:00
#
# Check of show index
#
create table t1 (f1 int not null, f2 int not null, f3 int not null, f4 int not null, primary key(f1,f2,f3,f4));
insert into t1 values (1,1,1,0),(1,1,2,0),(1,1,3,0),(1,2,1,0),(1,2,2,0),(1,2,3,0),(1,3,1,0),(1,3,2,0),(1,3,3,0),(1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,1),(1,2,2,1),(1,2,3,1),(1,3,1,1),(1,3,2,1),(1,3,3,1);
2007-06-28 11:24:52 +02:00
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
2001-03-15 12:36:14 +01:00
analyze table t1;
2007-06-28 11:24:52 +02:00
--disable_metadata
2001-03-15 12:36:14 +01:00
show index from t1;
2007-06-28 11:24:52 +02:00
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
2001-03-15 12:36:14 +01:00
repair table t1;
2007-06-28 11:24:52 +02:00
--disable_metadata
2001-03-15 12:36:14 +01:00
show index from t1;
drop table t1;
2001-04-25 21:44:27 +02:00
#
# Test of SHOW CREATE
#
create temporary table t1 (a int not null);
show create table t1;
alter table t1 rename t2;
show create table t2;
drop table t2;
create table t1 (
test_set set( 'val1', 'val2', 'val3' ) not null default '',
2002-06-04 07:23:57 +02:00
name char(20) default 'O''Brien' comment 'O''Brien as default',
2004-01-14 12:29:30 +01:00
c int not null comment 'int column',
2004-03-17 23:09:13 +01:00
`c-b` int comment 'name with a minus',
2004-05-05 20:46:16 +02:00
`space 2` int comment 'name with a space'
2001-04-25 21:44:27 +02:00
) comment = 'it\'s a table' ;
2004-01-14 12:29:30 +01:00
show create table t1;
set sql_quote_show_create=0;
show create table t1;
set sql_quote_show_create=1;
2002-06-04 07:23:57 +02:00
show full columns from t1;
2001-04-25 21:44:27 +02:00
drop table t1;
2001-06-21 09:50:14 +02:00
create table t1 (a int not null, unique aa (a));
show create table t1;
drop table t1;
create table t1 (a int not null, primary key (a));
show create table t1;
drop table t1;
2001-07-08 03:15:41 +02:00
flush tables;
show open tables;
create table t1(n int);
insert into t1 values (1);
show open tables;
drop table t1;
2001-09-30 04:47:35 +02:00
2003-12-10 05:31:42 +01:00
create table t1 (a int not null, b VARCHAR(10), INDEX (b) ) AVG_ROW_LENGTH=10 CHECKSUM=1 COMMENT="test" ENGINE=MYISAM MIN_ROWS=10 MAX_ROWS=100 PACK_KEYS=1 DELAY_KEY_WRITE=1 ROW_FORMAT=fixed;
2001-09-30 04:47:35 +02:00
show create table t1;
alter table t1 MAX_ROWS=200 ROW_FORMAT=dynamic PACK_KEYS=0;
show create table t1;
ALTER TABLE t1 AVG_ROW_LENGTH=0 CHECKSUM=0 COMMENT="" MIN_ROWS=0 MAX_ROWS=0 PACK_KEYS=DEFAULT DELAY_KEY_WRITE=0 ROW_FORMAT=default;
show create table t1;
drop table t1;
2002-05-16 17:20:49 +02:00
2002-04-26 12:56:32 +02:00
create table t1 (a decimal(9,2), b decimal (9,0), e double(9,2), f double(5,0), h float(3,2), i float(3,0));
show columns from t1;
2002-06-04 07:23:57 +02:00
show full columns from t1;
2002-04-26 12:56:32 +02:00
drop table t1;
2003-02-07 11:54:10 +01:00
#
# Do a create table that tries to cover all types and options
#
create table t1 (
2005-04-06 05:55:06 +02:00
type_bool bool not null default 0,
2003-02-07 11:54:10 +01:00
type_tiny tinyint not null auto_increment primary key,
type_short smallint(3),
type_mediumint mediumint,
type_bigint bigint,
type_decimal decimal(5,2),
type_numeric numeric(5,2),
empty_char char(0),
type_char char(2),
type_varchar varchar(10),
type_timestamp timestamp not null,
2005-01-15 02:09:35 +01:00
type_date date not null default '0000-00-00',
type_time time not null default '00:00:00',
type_datetime datetime not null default '0000-00-00 00:00:00',
2003-02-07 11:54:10 +01:00
type_year year,
type_enum enum ('red', 'green', 'blue'),
type_set enum ('red', 'green', 'blue'),
type_tinyblob tinyblob,
type_blob blob,
type_medium_blob mediumblob,
type_long_blob longblob,
index(type_short)
2003-12-10 05:31:42 +01:00
) AVG_ROW_LENGTH=10 CHECKSUM=1 COMMENT="test" ENGINE=MYISAM MIN_ROWS=10 MAX_ROWS=100 PACK_KEYS=1 DELAY_KEY_WRITE=1 ROW_FORMAT=fixed CHARSET=latin1;
2003-02-07 11:54:10 +01:00
2010-07-23 22:15:07 +02:00
# Not tested above: UNION INSERT_METHOD DATA DIRECTORY INDEX DIRECTORY
2003-02-07 11:54:10 +01:00
show create table t1;
insert into t1 (type_timestamp) values ("2003-02-07 10:00:01");
select * from t1;
drop table t1;
2003-08-27 09:26:03 +02:00
#
# Check metadata
#
create table t1 (a int not null);
create table t2 select max(a) from t1;
show columns from t2;
drop table t1,t2;
2003-02-07 11:54:10 +01:00
2002-04-26 12:56:32 +02:00
# Check auto conversions of types
create table t1 (c decimal, d double, f float, r real);
show columns from t1;
drop table t1;
create table t1 (c decimal(3,3), d double(3,3), f float(3,3));
show columns from t1;
drop table t1;
2004-02-06 21:57:22 +01:00
#
2009-03-03 21:34:18 +01:00
# Test for Bug#2593 SHOW CREATE TABLE doesn't properly double quotes
2004-02-06 21:57:22 +01:00
#
2004-03-05 14:57:36 +01:00
SET @old_sql_mode= @@sql_mode, sql_mode= '';
SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF;
2005-12-31 06:01:26 +01:00
CREATE TABLE ```ab``cd``` (i INT);
SHOW CREATE TABLE ```ab``cd```;
DROP TABLE ```ab``cd```;
CREATE TABLE ```ab````cd``` (i INT);
SHOW CREATE TABLE ```ab````cd```;
DROP TABLE ```ab````cd```;
CREATE TABLE ```a` (i INT);
SHOW CREATE TABLE ```a`;
DROP TABLE ```a`;
CREATE TABLE `a.1` (i INT);
SHOW CREATE TABLE `a.1`;
DROP TABLE `a.1`;
SET sql_mode= 'ANSI_QUOTES';
CREATE TABLE """a" (i INT);
SHOW CREATE TABLE """a";
DROP TABLE """a";
2004-02-06 21:57:22 +01:00
# to test quotes around keywords.. :
2004-03-05 14:57:36 +01:00
SET sql_mode= '';
SET sql_quote_show_create= OFF;
2004-02-06 21:57:22 +01:00
CREATE TABLE t1 (i INT);
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE `table` (i INT);
SHOW CREATE TABLE `table`;
DROP TABLE `table`;
2004-03-05 14:57:36 +01:00
SET sql_quote_show_create= @old_sql_quote_show_create;
SET sql_mode= @old_sql_mode;
2004-02-19 21:33:16 +01:00
#
2009-03-03 21:34:18 +01:00
# Test for Bug#2719 Heap tables status shows wrong or missing data.
2004-02-19 21:33:16 +01:00
#
select @@max_heap_table_size;
CREATE TABLE t1 (
a int(11) default NULL,
2005-01-08 07:31:13 +01:00
KEY a USING BTREE (a)
2004-02-19 21:33:16 +01:00
) ENGINE=HEAP;
CREATE TABLE t2 (
b int(11) default NULL,
index(b)
) ENGINE=HEAP;
CREATE TABLE t3 (
a int(11) default NULL,
b int(11) default NULL,
2005-01-08 07:31:13 +01:00
KEY a USING BTREE (a),
2004-02-19 21:33:16 +01:00
index(b)
) ENGINE=HEAP;
insert into t1 values (1),(2);
insert into t2 values (1),(2);
insert into t3 values (1,1),(2,2);
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
insert into t1 values (3),(4);
insert into t2 values (3),(4);
insert into t3 values (3,3),(4,4);
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
insert into t1 values (5);
insert into t2 values (5);
insert into t3 values (5,5);
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
delete from t1 where a=3;
delete from t2 where b=3;
delete from t3 where a=3;
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 10 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
2006-06-01 11:53:27 +02:00
truncate table t1;
truncate table t2;
truncate table t3;
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
insert into t1 values (5);
insert into t2 values (5);
insert into t3 values (5,5);
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
delete from t1 where a=5;
delete from t2 where b=5;
delete from t3 where a=5;
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 10 # 12 #
2004-02-19 21:33:16 +01:00
show table status;
drop table t1, t2, t3;
2004-04-06 17:26:35 +02:00
#
2009-03-03 21:34:18 +01:00
# Test for Bug#3342 SHOW CREATE DATABASE seems to require DROP privilege
2004-04-06 17:26:35 +02:00
#
2004-08-31 13:35:04 +02:00
create database mysqltest;
show create database mysqltest;
create table mysqltest.t1(a int);
insert into mysqltest.t1 values(1);
grant select on `mysqltest`.* to mysqltest_1@localhost;
grant usage on `mysqltest`.* to mysqltest_2@localhost;
grant drop on `mysqltest`.* to mysqltest_3@localhost;
2004-04-06 17:26:35 +02:00
2004-08-31 13:35:04 +02:00
connect (con1,localhost,mysqltest_1,,mysqltest);
2004-04-06 17:26:35 +02:00
connection con1;
select * from t1;
2004-08-31 13:35:04 +02:00
show create database mysqltest;
2009-03-03 21:34:18 +01:00
--error ER_TABLEACCESS_DENIED_ERROR
2004-04-06 17:26:35 +02:00
drop table t1;
2009-03-03 21:34:18 +01:00
--error ER_DBACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
drop database mysqltest;
2009-03-03 21:34:18 +01:00
disconnect con1;
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
2004-04-06 17:26:35 +02:00
connect (con2,localhost,mysqltest_2,,test);
connection con2;
2009-03-03 21:34:18 +01:00
--error ER_TABLEACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
select * from mysqltest.t1;
2009-03-03 21:34:18 +01:00
--error ER_DBACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
show create database mysqltest;
2009-03-03 21:34:18 +01:00
--error ER_TABLEACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
drop table mysqltest.t1;
2009-03-03 21:34:18 +01:00
--error ER_DBACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
drop database mysqltest;
2009-03-03 21:34:18 +01:00
disconnect con2;
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
2004-04-06 17:26:35 +02:00
connect (con3,localhost,mysqltest_3,,test);
connection con3;
2009-03-03 21:34:18 +01:00
--error ER_TABLEACCESS_DENIED_ERROR
2004-08-31 13:35:04 +02:00
select * from mysqltest.t1;
show create database mysqltest;
drop table mysqltest.t1;
drop database mysqltest;
2009-03-03 21:34:18 +01:00
disconnect con3;
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
2004-04-06 17:26:35 +02:00
connection default;
2004-07-08 15:54:07 +02:00
set names binary;
2009-03-03 21:34:18 +01:00
delete from mysql.user
2004-04-06 17:26:35 +02:00
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
2009-03-03 21:34:18 +01:00
delete from mysql.db
2004-04-06 17:26:35 +02:00
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges;
2004-07-02 13:52:02 +02:00
2005-01-13 18:22:35 +01:00
# Test that USING <keytype> is always shown in SHOW CREATE TABLE when it was
2009-03-03 21:34:18 +01:00
# specified during table creation, but not otherwise. (Bug#7235)
2005-01-13 18:22:35 +01:00
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i int, KEY USING HASH (i)) ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i int, KEY USING BTREE (i)) ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MyISAM;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i int, KEY USING BTREE (i)) ENGINE=MyISAM;
SHOW CREATE TABLE t1;
DROP TABLE t1;
# Test that when an index is created with the default key algorithm and
# altered to another storage engine, it gets the default key algorithm
# for that storage engine, but when it is specified, the specified type is
# preserved.
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MyISAM;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i int, KEY USING BTREE (i)) ENGINE=MyISAM;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
2005-04-16 21:35:39 +02:00
2009-03-03 21:34:18 +01:00
# Test for Bug#9439 Reporting wrong datatype for sub_part on show index
2005-04-16 21:35:39 +02:00
CREATE TABLE t1(
field1 text NOT NULL,
PRIMARY KEY(field1(1000))
);
--enable_metadata
show index from t1;
--disable_metadata
drop table t1;
2009-03-03 21:34:18 +01:00
# Test for Bug#11635 mysqldump exports TYPE instead of USING for HASH
2005-07-07 14:44:28 +02:00
create table t1 (
c1 int NOT NULL,
c2 int NOT NULL,
PRIMARY KEY USING HASH (c1),
INDEX USING BTREE(c2)
);
SHOW CREATE TABLE t1;
DROP TABLE t1;
2005-07-28 02:22:47 +02:00
2009-03-03 21:34:18 +01:00
# Test for Bug#93 4.1 protocl crash on corupted frm and SHOW TABLE STATUS
2005-10-13 15:52:22 +02:00
flush tables;
# Create a junk frm file on disk
2007-12-12 18:19:24 +01:00
let $MYSQLD_DATADIR= `select @@datadir`;
system echo "this is a junk file for test" >> $MYSQLD_DATADIR/test/t1.frm ;
2011-09-27 14:08:51 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2005-10-13 15:52:22 +02:00
SHOW TABLE STATUS like 't1';
2009-03-03 21:34:18 +01:00
--error ER_NOT_FORM_FILE
2005-10-13 15:52:22 +02:00
show create table t1;
2013-04-09 15:45:31 +02:00
--disable_warnings
2005-11-07 16:25:06 +01:00
drop table if exists t1;
2013-04-09 15:45:31 +02:00
--enable_warnings
2007-04-16 16:08:29 +02:00
--error 1,0
2007-12-12 18:19:24 +01:00
--remove_file $MYSQLD_DATADIR/test/t1.frm
2005-10-13 15:52:22 +02:00
2005-08-16 11:18:35 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#12183 SHOW OPEN TABLES behavior doesn't match grammar
2005-08-16 11:18:35 +02:00
# First we close all open tables with FLUSH tables and then we open some.
2006-07-13 09:43:52 +02:00
#
WL#3984 (Revise locking of mysql.general_log and mysql.slow_log)
Bug#25422 (Hang with log tables)
Bug 17876 (Truncating mysql.slow_log in a SP after using cursor locks the
thread)
Bug 23044 (Warnings on flush of a log table)
Bug 29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
a deadlock)
Prior to this fix, the server would hang when performing concurrent
ALTER TABLE or TRUNCATE TABLE statements against the LOG TABLES,
which are mysql.general_log and mysql.slow_log.
The root cause traces to the following code:
in sql_base.cc, open_table()
if (table->in_use != thd)
{
/* wait_for_condition will unlock LOCK_open for us */
wait_for_condition(thd, &LOCK_open, &COND_refresh);
}
The problem with this code is that the current implementation of the
LOGGER creates 'fake' THD objects, like
- Log_to_csv_event_handler::general_log_thd
- Log_to_csv_event_handler::slow_log_thd
which are not associated to a real thread running in the server,
so that waiting for these non-existing threads to release table locks
cause the dead lock.
In general, the design of Log_to_csv_event_handler does not fit into the
general architecture of the server, so that the concept of general_log_thd
and slow_log_thd has to be abandoned:
- this implementation does not work with table locking
- it will not work with commands like SHOW PROCESSLIST
- having the log tables always opened does not integrate well with DDL
operations / FLUSH TABLES / SET GLOBAL READ_ONLY
With this patch, the fundamental design of the LOGGER has been changed to:
- always open and close a log table when writing a log
- remove totally the usage of fake THD objects
- clarify how locking of log tables is implemented in general.
See WL#3984 for details related to the new locking design.
Additional changes (misc bugs exposed and fixed):
1)
mysqldump which would ignore some tables in dump_all_tables_in_db(),
but forget to ignore the same in dump_all_views_in_db().
2)
mysqldump would also issue an empty "LOCK TABLE" command when all the tables
to lock are to be ignored (numrows == 0), instead of not issuing the query.
3)
Internal errors handlers could intercept errors but not warnings
(see sql_error.cc).
4)
Implementing a nested call to open tables, for the performance schema tables,
exposed an existing bug in remove_table_from_cache(), which would perform:
in_use->some_tables_deleted=1;
against another thread, without any consideration about thread locking.
This call inside remove_table_from_cache() was not required anyway,
since calling mysql_lock_abort() takes care of aborting -- cleanly -- threads
that might hold a lock on a table.
This line (in_use->some_tables_deleted=1) has been removed.
sql/handler.cc:
Moved logic for system / log tables in the SQL layer.
sql/handler.h:
Moved logic for system / log tables in the SQL layer.
sql/lock.cc:
Revised locking of log tables
sql/log.cc:
Major cleanup: changed how log tables are locked / written to.
sql/log.h:
Major cleanup: changed how log tables are locked / written to.
sql/mysql_priv.h:
performance schema helpers
sql/slave.cc:
open_ltable() lock flags
sql/sp.cc:
open_ltable() lock flags
sql/sql_acl.cc:
open_ltable() lock flags
sql/sql_class.h:
performance schema helpers
sql/sql_delete.cc:
log tables cleanup in TRUNCATE
sql/sql_error.cc:
Internal handlers can also intercept warnings
sql/sql_insert.cc:
open_ltable() lock flags
sql/sql_parse.cc:
performance schema helpers
sql/sql_plugin.cc:
open_ltable() lock flags
sql/sql_rename.cc:
log tables cleanup in RENAME
sql/sql_servers.cc:
open_ltable() lock flags
sql/sql_show.cc:
Move INFORMATION_SCHEMA_NAME to table.cc
sql/sql_table.cc:
log tables cleanup (admin operations, ALTER TABLE)
sql/sql_udf.cc:
open_ltable() lock flags
sql/table.cc:
Implemented TABLE_CATEGORY.
sql/share/errmsg.txt:
Changed the wording and name of ER_CANT_READ_LOCK_LOG_TABLE
sql/table.h:
Implemented TABLE_CATEGORY.
storage/csv/ha_tina.cc:
Moved logic for system / log tables in the SQL layer.
storage/csv/ha_tina.h:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.cc:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.h:
Moved logic for system / log tables in the SQL layer.
client/mysqldump.c:
Don't lock tables in the ignore list.
Don't issue empty LOCK TABLES queries.
sql/sql_base.cc:
log tables cleanup
performance schema helpers
mysql-test/r/ps.result:
Adjust test results
mysql-test/r/show_check.result:
Adjust test results
mysql-test/r/status.result:
Adjust test results
mysql-test/t/log_state.test:
Added tests for Bug#29129
mysql-test/t/ps.test:
Make the test output deterministic
mysql-test/t/show_check.test:
Make the test output deterministic
mysql-test/r/log_state.result:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
Adjust test results
mysql-test/r/log_tables.result:
cleanup for -ps-protocol
mysql-test/t/log_tables.test:
cleanup for -ps-protocol
sql/set_var.cc:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
log tables cleanup
2007-07-27 08:31:06 +02:00
2008-02-28 13:35:25 +01:00
--echo
2009-03-06 15:56:17 +01:00
--echo # Bug#12183 SHOW OPEN TABLES behavior doesn't match grammar.
2008-02-28 13:35:25 +01:00
--echo
# NOTE: SHOW OPEN TABLES does not sort result list by database or table names.
# Tables are listed in the order they were opened. We can not use the system
# database (mysql) for the test here, because we have no control over the order
# of opening tables in it. Consequently, we can not use 'SHOW OPEN TABLES'.
--disable_warnings
DROP DATABASE IF EXISTS mysqltest1;
--enable_warnings
CREATE DATABASE mysqltest1;
use mysqltest1;
--echo
CREATE TABLE t1(a INT);
CREATE TABLE t2(a INT);
--echo
WL#3984 (Revise locking of mysql.general_log and mysql.slow_log)
Bug#25422 (Hang with log tables)
Bug 17876 (Truncating mysql.slow_log in a SP after using cursor locks the
thread)
Bug 23044 (Warnings on flush of a log table)
Bug 29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
a deadlock)
Prior to this fix, the server would hang when performing concurrent
ALTER TABLE or TRUNCATE TABLE statements against the LOG TABLES,
which are mysql.general_log and mysql.slow_log.
The root cause traces to the following code:
in sql_base.cc, open_table()
if (table->in_use != thd)
{
/* wait_for_condition will unlock LOCK_open for us */
wait_for_condition(thd, &LOCK_open, &COND_refresh);
}
The problem with this code is that the current implementation of the
LOGGER creates 'fake' THD objects, like
- Log_to_csv_event_handler::general_log_thd
- Log_to_csv_event_handler::slow_log_thd
which are not associated to a real thread running in the server,
so that waiting for these non-existing threads to release table locks
cause the dead lock.
In general, the design of Log_to_csv_event_handler does not fit into the
general architecture of the server, so that the concept of general_log_thd
and slow_log_thd has to be abandoned:
- this implementation does not work with table locking
- it will not work with commands like SHOW PROCESSLIST
- having the log tables always opened does not integrate well with DDL
operations / FLUSH TABLES / SET GLOBAL READ_ONLY
With this patch, the fundamental design of the LOGGER has been changed to:
- always open and close a log table when writing a log
- remove totally the usage of fake THD objects
- clarify how locking of log tables is implemented in general.
See WL#3984 for details related to the new locking design.
Additional changes (misc bugs exposed and fixed):
1)
mysqldump which would ignore some tables in dump_all_tables_in_db(),
but forget to ignore the same in dump_all_views_in_db().
2)
mysqldump would also issue an empty "LOCK TABLE" command when all the tables
to lock are to be ignored (numrows == 0), instead of not issuing the query.
3)
Internal errors handlers could intercept errors but not warnings
(see sql_error.cc).
4)
Implementing a nested call to open tables, for the performance schema tables,
exposed an existing bug in remove_table_from_cache(), which would perform:
in_use->some_tables_deleted=1;
against another thread, without any consideration about thread locking.
This call inside remove_table_from_cache() was not required anyway,
since calling mysql_lock_abort() takes care of aborting -- cleanly -- threads
that might hold a lock on a table.
This line (in_use->some_tables_deleted=1) has been removed.
sql/handler.cc:
Moved logic for system / log tables in the SQL layer.
sql/handler.h:
Moved logic for system / log tables in the SQL layer.
sql/lock.cc:
Revised locking of log tables
sql/log.cc:
Major cleanup: changed how log tables are locked / written to.
sql/log.h:
Major cleanup: changed how log tables are locked / written to.
sql/mysql_priv.h:
performance schema helpers
sql/slave.cc:
open_ltable() lock flags
sql/sp.cc:
open_ltable() lock flags
sql/sql_acl.cc:
open_ltable() lock flags
sql/sql_class.h:
performance schema helpers
sql/sql_delete.cc:
log tables cleanup in TRUNCATE
sql/sql_error.cc:
Internal handlers can also intercept warnings
sql/sql_insert.cc:
open_ltable() lock flags
sql/sql_parse.cc:
performance schema helpers
sql/sql_plugin.cc:
open_ltable() lock flags
sql/sql_rename.cc:
log tables cleanup in RENAME
sql/sql_servers.cc:
open_ltable() lock flags
sql/sql_show.cc:
Move INFORMATION_SCHEMA_NAME to table.cc
sql/sql_table.cc:
log tables cleanup (admin operations, ALTER TABLE)
sql/sql_udf.cc:
open_ltable() lock flags
sql/table.cc:
Implemented TABLE_CATEGORY.
sql/share/errmsg.txt:
Changed the wording and name of ER_CANT_READ_LOCK_LOG_TABLE
sql/table.h:
Implemented TABLE_CATEGORY.
storage/csv/ha_tina.cc:
Moved logic for system / log tables in the SQL layer.
storage/csv/ha_tina.h:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.cc:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.h:
Moved logic for system / log tables in the SQL layer.
client/mysqldump.c:
Don't lock tables in the ignore list.
Don't issue empty LOCK TABLES queries.
sql/sql_base.cc:
log tables cleanup
performance schema helpers
mysql-test/r/ps.result:
Adjust test results
mysql-test/r/show_check.result:
Adjust test results
mysql-test/r/status.result:
Adjust test results
mysql-test/t/log_state.test:
Added tests for Bug#29129
mysql-test/t/ps.test:
Make the test output deterministic
mysql-test/t/show_check.test:
Make the test output deterministic
mysql-test/r/log_state.result:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
Adjust test results
mysql-test/r/log_tables.result:
cleanup for -ps-protocol
mysql-test/t/log_tables.test:
cleanup for -ps-protocol
sql/set_var.cc:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
log tables cleanup
2007-07-27 08:31:06 +02:00
--disable_ps_protocol
2005-08-16 11:18:35 +02:00
FLUSH TABLES;
2008-02-28 13:35:25 +01:00
--echo
SELECT 1 FROM t1;
SELECT 1 FROM t2;
--echo
SHOW OPEN TABLES FROM mysqltest1;
--echo
SHOW OPEN TABLES FROM mysqltest1 LIKE 'z%';
--echo
SHOW OPEN TABLES FROM mysqltest1 LIKE 't1%';
--echo
SHOW OPEN TABLES FROM mysqltest1 LIKE '%1%';
--echo
2005-08-16 11:18:35 +02:00
FLUSH TABLES;
WL#3984 (Revise locking of mysql.general_log and mysql.slow_log)
Bug#25422 (Hang with log tables)
Bug 17876 (Truncating mysql.slow_log in a SP after using cursor locks the
thread)
Bug 23044 (Warnings on flush of a log table)
Bug 29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
a deadlock)
Prior to this fix, the server would hang when performing concurrent
ALTER TABLE or TRUNCATE TABLE statements against the LOG TABLES,
which are mysql.general_log and mysql.slow_log.
The root cause traces to the following code:
in sql_base.cc, open_table()
if (table->in_use != thd)
{
/* wait_for_condition will unlock LOCK_open for us */
wait_for_condition(thd, &LOCK_open, &COND_refresh);
}
The problem with this code is that the current implementation of the
LOGGER creates 'fake' THD objects, like
- Log_to_csv_event_handler::general_log_thd
- Log_to_csv_event_handler::slow_log_thd
which are not associated to a real thread running in the server,
so that waiting for these non-existing threads to release table locks
cause the dead lock.
In general, the design of Log_to_csv_event_handler does not fit into the
general architecture of the server, so that the concept of general_log_thd
and slow_log_thd has to be abandoned:
- this implementation does not work with table locking
- it will not work with commands like SHOW PROCESSLIST
- having the log tables always opened does not integrate well with DDL
operations / FLUSH TABLES / SET GLOBAL READ_ONLY
With this patch, the fundamental design of the LOGGER has been changed to:
- always open and close a log table when writing a log
- remove totally the usage of fake THD objects
- clarify how locking of log tables is implemented in general.
See WL#3984 for details related to the new locking design.
Additional changes (misc bugs exposed and fixed):
1)
mysqldump which would ignore some tables in dump_all_tables_in_db(),
but forget to ignore the same in dump_all_views_in_db().
2)
mysqldump would also issue an empty "LOCK TABLE" command when all the tables
to lock are to be ignored (numrows == 0), instead of not issuing the query.
3)
Internal errors handlers could intercept errors but not warnings
(see sql_error.cc).
4)
Implementing a nested call to open tables, for the performance schema tables,
exposed an existing bug in remove_table_from_cache(), which would perform:
in_use->some_tables_deleted=1;
against another thread, without any consideration about thread locking.
This call inside remove_table_from_cache() was not required anyway,
since calling mysql_lock_abort() takes care of aborting -- cleanly -- threads
that might hold a lock on a table.
This line (in_use->some_tables_deleted=1) has been removed.
sql/handler.cc:
Moved logic for system / log tables in the SQL layer.
sql/handler.h:
Moved logic for system / log tables in the SQL layer.
sql/lock.cc:
Revised locking of log tables
sql/log.cc:
Major cleanup: changed how log tables are locked / written to.
sql/log.h:
Major cleanup: changed how log tables are locked / written to.
sql/mysql_priv.h:
performance schema helpers
sql/slave.cc:
open_ltable() lock flags
sql/sp.cc:
open_ltable() lock flags
sql/sql_acl.cc:
open_ltable() lock flags
sql/sql_class.h:
performance schema helpers
sql/sql_delete.cc:
log tables cleanup in TRUNCATE
sql/sql_error.cc:
Internal handlers can also intercept warnings
sql/sql_insert.cc:
open_ltable() lock flags
sql/sql_parse.cc:
performance schema helpers
sql/sql_plugin.cc:
open_ltable() lock flags
sql/sql_rename.cc:
log tables cleanup in RENAME
sql/sql_servers.cc:
open_ltable() lock flags
sql/sql_show.cc:
Move INFORMATION_SCHEMA_NAME to table.cc
sql/sql_table.cc:
log tables cleanup (admin operations, ALTER TABLE)
sql/sql_udf.cc:
open_ltable() lock flags
sql/table.cc:
Implemented TABLE_CATEGORY.
sql/share/errmsg.txt:
Changed the wording and name of ER_CANT_READ_LOCK_LOG_TABLE
sql/table.h:
Implemented TABLE_CATEGORY.
storage/csv/ha_tina.cc:
Moved logic for system / log tables in the SQL layer.
storage/csv/ha_tina.h:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.cc:
Moved logic for system / log tables in the SQL layer.
storage/myisam/ha_myisam.h:
Moved logic for system / log tables in the SQL layer.
client/mysqldump.c:
Don't lock tables in the ignore list.
Don't issue empty LOCK TABLES queries.
sql/sql_base.cc:
log tables cleanup
performance schema helpers
mysql-test/r/ps.result:
Adjust test results
mysql-test/r/show_check.result:
Adjust test results
mysql-test/r/status.result:
Adjust test results
mysql-test/t/log_state.test:
Added tests for Bug#29129
mysql-test/t/ps.test:
Make the test output deterministic
mysql-test/t/show_check.test:
Make the test output deterministic
mysql-test/r/log_state.result:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
Adjust test results
mysql-test/r/log_tables.result:
cleanup for -ps-protocol
mysql-test/t/log_tables.test:
cleanup for -ps-protocol
sql/set_var.cc:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
---
log tables cleanup
2007-07-27 08:31:06 +02:00
--enable_ps_protocol
2008-02-28 13:35:25 +01:00
--echo
DROP DATABASE mysqltest1;
use test;
--echo
2005-08-17 17:51:10 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#12591 SHOW TABLES FROM dbname produces wrong error message
2005-08-17 17:51:10 +02:00
#
2009-03-03 21:34:18 +01:00
--error ER_BAD_DB_ERROR
2005-08-17 17:51:10 +02:00
SHOW TABLES FROM non_existing_database;
2005-11-10 18:43:17 +01:00
2006-07-13 09:43:52 +02:00
--echo End of 4.1 tests
2006-06-27 19:28:32 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#17203 "sql_no_cache sql_cache" in views created from prepared
2006-06-27 19:28:32 +02:00
# statement
#
# The problem was that initial user setting was forgotten, and current
# runtime-determined values of the flags were shown instead.
#
--disable_warnings
DROP VIEW IF EXISTS v1;
DROP PROCEDURE IF EXISTS p1;
--enable_warnings
# Check that SHOW CREATE VIEW shows SQL_CACHE flag exaclty as
# specified by the user.
CREATE VIEW v1 AS SELECT 1;
SHOW CREATE VIEW v1;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT SQL_CACHE 1;
SHOW CREATE VIEW v1;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT SQL_NO_CACHE 1;
SHOW CREATE VIEW v1;
DROP VIEW v1;
# Usage of NOW() disables caching, but we still have show what the
# user have specified.
CREATE VIEW v1 AS SELECT NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT SQL_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT SQL_NO_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
2009-12-17 13:38:27 +01:00
--error ER_WRONG_USAGE
2006-06-27 19:28:32 +02:00
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
2009-12-17 13:38:27 +01:00
--error ER_WRONG_USAGE
2006-06-27 19:28:32 +02:00
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
2009-12-17 13:38:27 +01:00
--error ER_WRONG_USAGE
2006-06-27 19:28:32 +02:00
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
# Check CREATE VIEW in a prepared statement in a procedure.
delimiter |;
CREATE PROCEDURE p1()
BEGIN
SET @s= 'CREATE VIEW v1 AS SELECT SQL_CACHE 1';
PREPARE stmt FROM @s;
EXECUTE stmt;
DROP PREPARE stmt;
END |
delimiter ;|
CALL p1();
SHOW CREATE VIEW v1;
DROP PROCEDURE p1;
DROP VIEW v1;
Bug#16581: deadlock: server and client both read from connection in
'conc_sys' test
Concurrent execution of SELECT involing at least two INFORMATION_SCHEMA
tables, DROP DATABASE statement and DROP TABLE statement could have
resulted in stalled connection for this SELECT statement.
The problem was that for the first query of a join there was a race
between select from I_S.TABLES and DROP DATABASE, and the error (no
such database) was prepared to be send to the client, but the join
processing was continued. On second query to I_S.COLUMNS there was a
race with DROP TABLE, but this error (no such table) was downgraded to
warning, and thd->net.report_error was reset. And so neither result
nor error was sent to the client.
The solution is to stop join processing once it is clear we are going
to report a error, and also to downgrade to warnings file system errors
like 'no such database' (unless we are in the 'SHOW' command), because
I_S is designed not to use locks and the query to I_S should not abort
if something is dropped in the middle.
No test case is provided since this bug is a result of a race, and is
timing dependant. But we test that plain SHOW TABLES and SHOW COLUMNS
give a error if there is no such database or a table respectively.
mysql-test/r/show_check.result:
Add result for the test that SHOW TABLES and SHOW COLUMNS give a error
if there is no such database or a table respectively.
mysql-test/t/show_check.test:
Add test case that SHOW TABLES and SHOW COLUMNS give a error
if there is no such database or a table respectively.
sql/mysql_priv.h:
Remove prototype of mysql_find_files(), which is made static under
find_files() name.
sql/sql_show.cc:
Rename mysql_find_files() to find_files() and make it static.
Return FIND_FILES_OK for success, FIND_FILES_OOM for out of memory,
and FIND_FILES_DIR for directory reading error.
Downgrade error to warning in get_all_tables() if it is a
FIND_FILES_DIR error, and we are not in the 'SHOW' command.
Once 'result' is set to 1 in get_schema_tables_result(), there's no
need in continuing iterations, as we are about to return a error.
2006-07-28 13:06:23 +02:00
#
# Check that SHOW TABLES and SHOW COLUMNS give a error if there is no
# referenced database and table respectively.
#
--error ER_BAD_DB_ERROR
SHOW TABLES FROM no_such_database;
--error ER_NO_SUCH_TABLE
SHOW COLUMNS FROM no_such_table;
2006-10-13 01:10:34 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#19764 SHOW commands end up in the slow log as table scans
2006-10-13 01:10:34 +02:00
#
flush status;
show status like 'slow_queries';
show tables;
show status like 'slow_queries';
# Table scan query, to ensure that slow_queries does still get incremented
# (mysqld is started with --log-queries-not-using-indexes)
select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
2007-07-27 16:55:39 +02:00
create table t1 (a int);
2009-03-06 15:56:17 +01:00
create trigger tr1 before insert on t1 for each row
2007-07-27 16:55:39 +02:00
begin
end;
create view v1 as select a from t1;
create procedure p1()
begin
end;
create function f1()
returns int
return 0;
create event e1 on schedule every 1 year starts now()
ends date_add(now(), interval 5 hour) do
begin
end;
--disable_result_log
flush status;
show databases;
show tables;
show events;
show table status;
show open tables;
show plugins;
show columns in t1;
show slave hosts;
show keys in t1;
show storage engines;
show authors;
show contributors;
show privileges;
show count(*) warnings;
show count(*) errors;
show warnings;
show status;
show processlist;
show variables;
show charset;
show collation;
show grants;
show create database test;
show create table t1;
show create view v1;
show master status;
show slave status;
show create procedure p1;
show create function f1;
show create trigger tr1;
show procedure status;
show create event e1;
--enable_result_log
show status like 'slow_queries';
drop view v1;
drop table t1;
drop procedure p1;
drop function f1;
drop event e1;
2009-03-06 15:56:17 +01:00
2007-06-28 11:24:52 +02:00
#
2009-03-06 15:56:17 +01:00
# Bug#10491 Server returns data as charset binary SHOW CREATE TABLE or SELECT
2009-03-03 21:34:18 +01:00
# FROM I_S.
2007-06-28 11:24:52 +02:00
#
2007-07-25 17:46:50 +02:00
#
# Part 1: check that meta-data specifies not-binary character set.
#
2007-06-28 11:24:52 +02:00
# Ensure that all needed objects are dropped.
--disable_warnings
DROP DATABASE IF EXISTS mysqltest1;
DROP TABLE IF EXISTS t1;
DROP VIEW IF EXISTS v1;
DROP PROCEDURE IF EXISTS p1;
DROP FUNCTION IF EXISTS f1;
--enable_warnings
# Create objects.
CREATE DATABASE mysqltest1;
CREATE TABLE t1(c INT NOT NULL PRIMARY KEY);
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a = 1;
CREATE VIEW v1 AS SELECT 1;
CREATE PROCEDURE p1() SELECT 1;
CREATE FUNCTION f1() RETURNS INT RETURN 1;
# Test.
set names utf8;
--echo -- Here we enable metadata just to check that the collation of the
--echo -- resultset is non-binary for string type. This should be changed
--echo -- after Bug#29394 is implemented.
--enable_metadata
--echo ----------------------------------------------------------------
SHOW CHARACTER SET LIKE 'utf8';
--echo ----------------------------------------------------------------
SHOW COLLATION LIKE 'latin1_bin';
--echo ----------------------------------------------------------------
SHOW CREATE DATABASE mysqltest1;
--echo ----------------------------------------------------------------
SHOW DATABASES LIKE 'mysqltest1';
--echo ----------------------------------------------------------------
SHOW CREATE TABLE t1;
--echo ----------------------------------------------------------------
SHOW INDEX FROM t1;
--echo ----------------------------------------------------------------
SELECT
TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME,
TABLE_TYPE,
ENGINE,
ROW_FORMAT,
TABLE_COLLATION,
CREATE_OPTIONS,
TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 't1';
--echo ----------------------------------------------------------------
SELECT
TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
COLUMN_DEFAULT,
IS_NULLABLE,
DATA_TYPE,
CHARACTER_SET_NAME,
COLLATION_NAME,
COLUMN_TYPE,
COLUMN_KEY,
EXTRA,
PRIVILEGES,
COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 't1';
--echo ----------------------------------------------------------------
SHOW TABLES LIKE 't1';
--echo ----------------------------------------------------------------
SHOW COLUMNS FROM t1;
--echo ----------------------------------------------------------------
SHOW TRIGGERS LIKE 't1';
--echo ----------------------------------------------------------------
2009-03-03 21:34:18 +01:00
SELECT
2007-06-28 11:24:52 +02:00
TRIGGER_CATALOG,
TRIGGER_SCHEMA,
TRIGGER_NAME,
EVENT_MANIPULATION,
EVENT_OBJECT_CATALOG,
EVENT_OBJECT_SCHEMA,
EVENT_OBJECT_TABLE,
ACTION_CONDITION,
ACTION_STATEMENT,
ACTION_ORIENTATION,
ACTION_TIMING,
ACTION_REFERENCE_OLD_TABLE,
ACTION_REFERENCE_NEW_TABLE,
ACTION_REFERENCE_OLD_ROW,
ACTION_REFERENCE_NEW_ROW,
SQL_MODE,
DEFINER
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE trigger_name = 't1_bi';
--echo ----------------------------------------------------------------
SHOW CREATE VIEW v1;
--echo ----------------------------------------------------------------
SELECT *
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'v1';
--echo ----------------------------------------------------------------
SHOW CREATE PROCEDURE p1;
--echo ----------------------------------------------------------------
SELECT
SPECIFIC_NAME,
ROUTINE_CATALOG,
ROUTINE_SCHEMA,
ROUTINE_NAME,
ROUTINE_TYPE,
DTD_IDENTIFIER,
ROUTINE_BODY,
ROUTINE_DEFINITION,
EXTERNAL_NAME,
EXTERNAL_LANGUAGE,
PARAMETER_STYLE,
IS_DETERMINISTIC,
SQL_DATA_ACCESS,
SQL_PATH,
SECURITY_TYPE,
SQL_MODE,
ROUTINE_COMMENT,
DEFINER
FROM INFORMATION_SCHEMA.ROUTINES
WHERE routine_name = 'p1';
--echo ----------------------------------------------------------------
SHOW CREATE FUNCTION f1;
--echo ----------------------------------------------------------------
SELECT
SPECIFIC_NAME,
ROUTINE_CATALOG,
ROUTINE_SCHEMA,
ROUTINE_NAME,
ROUTINE_TYPE,
DTD_IDENTIFIER,
ROUTINE_BODY,
ROUTINE_DEFINITION,
EXTERNAL_NAME,
EXTERNAL_LANGUAGE,
PARAMETER_STYLE,
IS_DETERMINISTIC,
SQL_DATA_ACCESS,
SQL_PATH,
SECURITY_TYPE,
SQL_MODE,
ROUTINE_COMMENT,
DEFINER
FROM INFORMATION_SCHEMA.ROUTINES
WHERE routine_name = 'f1';
--echo ----------------------------------------------------------------
--disable_metadata
# Cleanup.
DROP DATABASE mysqltest1;
DROP TABLE t1;
DROP VIEW v1;
DROP PROCEDURE p1;
DROP FUNCTION f1;
2006-10-13 01:10:34 +02:00
2007-07-25 17:46:50 +02:00
#
# Part 2: check that table with non-latin1 characters are dumped/restored
# correctly.
#
# Ensure that all needed objects are dropped.
set names koi8r;
--disable_warnings
DROP DATABASE IF EXISTS mysqltest1;
--enable_warnings
# Create objects.
CREATE DATABASE mysqltest1;
use mysqltest1;
CREATE TABLE t1(<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 INT);
# Check:
# - Dump mysqltest1;
2009-03-02 11:03:13 +01:00
--let $outfile1=$MYSQLTEST_VARDIR/tmp/show_check.mysqltest1.sql
2011-01-07 14:37:46 +01:00
--source include/count_sessions.inc
2007-07-25 17:46:50 +02:00
--echo
2009-03-02 11:03:13 +01:00
--echo ---> Dumping mysqltest1 to outfile1
2009-12-22 10:35:56 +01:00
--exec $MYSQL_DUMP --default-character-set=latin1 --character-sets-dir=$MYSQL_SHAREDIR/charsets --databases mysqltest1 > $outfile1
2011-01-07 14:37:46 +01:00
# Take care that the additional session caused by MYSQL_DUMP has disappeared.
--source include/wait_until_count_sessions.inc
2007-07-25 17:46:50 +02:00
# - Clean mysqltest1;
--echo
--echo
DROP DATABASE mysqltest1;
# - Restore mysqltest1;
--echo
--echo
2011-01-07 14:37:46 +01:00
--source include/count_sessions.inc
2007-07-25 17:46:50 +02:00
--echo ---> Restoring mysqltest1...
2009-03-02 11:03:13 +01:00
--exec $MYSQL test < $outfile1
--remove_file $outfile1
2011-01-07 14:37:46 +01:00
# Take care that the additional session caused by MYSQL has disappeared.
--source include/wait_until_count_sessions.inc
2007-07-25 17:46:50 +02:00
# - Check definition of the table.
SHOW CREATE TABLE mysqltest1.t1;
# Cleanup.
DROP DATABASE mysqltest1;
use test;
2007-07-05 12:34:12 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#28808 log_queries_not_using_indexes variable dynamic change is ignored
2007-07-05 12:34:12 +02:00
#
flush status;
show variables like "log_queries_not_using_indexes";
select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
set global log_queries_not_using_indexes=OFF;
show variables like "log_queries_not_using_indexes";
select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
set global log_queries_not_using_indexes=ON;
show variables like "log_queries_not_using_indexes";
select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
2007-08-01 08:41:13 +02:00
#
2009-03-03 21:34:18 +01:00
# Bug#30088 Can't disable myisam-recover by a value of ""
2007-08-01 08:41:13 +02:00
#
show variables like 'myisam_recover_options';
2008-08-15 22:13:27 +02:00
#
# Bug#37301 Length and Max_length differ with no obvious reason
#
CREATE TABLE t1 (
Codigo int(10) unsigned NOT NULL auto_increment,
Nombre varchar(255) default NULL,
Telefono varchar(255) default NULL,
Observaciones longtext,
Direccion varchar(255) default NULL,
Dni varchar(255) default NULL,
CP int(11) default NULL,
Provincia varchar(255) default NULL,
Poblacion varchar(255) default NULL,
PRIMARY KEY (Codigo)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
--enable_metadata
show create table t1;
--disable_metadata
drop table t1;
2006-10-12 07:35:52 +02:00
--echo End of 5.0 tests
2005-11-29 00:32:26 +01:00
--disable_result_log
2005-11-10 18:43:17 +01:00
SHOW AUTHORS;
2005-11-29 00:32:26 +01:00
--enable_result_log
2005-12-01 10:04:19 +01:00
#
2009-03-06 15:56:17 +01:00
# Bug#9785 SELECT privilege for the whole database is needed to do
# SHOW CREATE DATABASE
2005-12-01 10:04:19 +01:00
#
create database mysqltest;
show create database mysqltest;
create table mysqltest.t1(a int);
insert into mysqltest.t1 values(1);
grant select on `mysqltest`.`t1` to mysqltest_4@localhost;
connect (con4,localhost,mysqltest_4,,mysqltest);
connection con4;
show create database mysqltest;
2011-01-07 14:37:46 +01:00
disconnect con4;
--source include/wait_until_disconnected.inc
2005-12-01 10:04:19 +01:00
connection default;
delete from mysql.user where user='mysqltest_4';
delete from mysql.db where user='mysqltest_4';
delete from mysql.tables_priv where user='mysqltest_4';
flush privileges;
drop database mysqltest;
2006-06-28 13:03:08 +02:00
#
# Ensure that show plugin code is tested
#
--disable_result_log
show plugins;
--enable_result_log
2006-09-01 19:39:48 +02:00
#
2009-03-06 15:56:17 +01:00
# Bug#19874 SHOW COLUMNS and SHOW KEYS handle identifiers containing
# \ incorrectly
2006-09-01 19:39:48 +02:00
#
create database `mysqlttest\1`;
create table `mysqlttest\1`.`a\b` (a int);
show tables from `mysqlttest\1`;
show fields from `mysqlttest\1`.`a\b`;
show columns from `a\b` from `mysqlttest\1`;
show keys from `mysqlttest\1`.`a\b`;
drop table `mysqlttest\1`.`a\b`;
drop database `mysqlttest\1`;
Bug#24392 (SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS)
Before this fix, the command SHOW ENGINE <name> STATUS would:
- print a warning if the engine name is unknown,
- proceed and implement the same behavior as SHOW ENGINE ALL STATUS,
and list the status of all the storage engines registered.
In particular, this behavior caused confusion about the command :
SHOW ENGINE MUTEX STATUS, which as a side effect would print the status
of the innodb engine when that engine is registered.
Also, before this fix, every time an unknown engine name was substituted by
the default engine (which happen unless SQL_MODE NO_ENGINE_SUBSTITUTION is
set), a malformed warning was raised.
For example, the command ALTER TABLE T1 ENGINE = X would print :
Warnings:
Error 1286 Unknown table engine 'X'
With this fix:
SHOW ENGINE <name> STATUS|LOGS|MUTEX
always fails with an error when the engine <name> is unknown.
For other commands, warnings about unknown engines are raised as:
Warnings:
Warning 1286 Unknown table engine 'X'
In other words, engine substitution never affect the SHOW ENGINE command,
since this would lead to very confusing results.
mysql-test/r/ndb_dd_basic.result:
Warnings for unknown engines.
mysql-test/r/partition_innodb.result:
Warnings for unknown engines.
mysql-test/r/ps_1general.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/r/show_check.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/ps_1general.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/show_check.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
sql/sql_yacc.yy:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
2007-01-23 23:14:08 +01:00
#
2009-03-06 15:56:17 +01:00
# Bug#24392 SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS
Bug#24392 (SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS)
Before this fix, the command SHOW ENGINE <name> STATUS would:
- print a warning if the engine name is unknown,
- proceed and implement the same behavior as SHOW ENGINE ALL STATUS,
and list the status of all the storage engines registered.
In particular, this behavior caused confusion about the command :
SHOW ENGINE MUTEX STATUS, which as a side effect would print the status
of the innodb engine when that engine is registered.
Also, before this fix, every time an unknown engine name was substituted by
the default engine (which happen unless SQL_MODE NO_ENGINE_SUBSTITUTION is
set), a malformed warning was raised.
For example, the command ALTER TABLE T1 ENGINE = X would print :
Warnings:
Error 1286 Unknown table engine 'X'
With this fix:
SHOW ENGINE <name> STATUS|LOGS|MUTEX
always fails with an error when the engine <name> is unknown.
For other commands, warnings about unknown engines are raised as:
Warnings:
Warning 1286 Unknown table engine 'X'
In other words, engine substitution never affect the SHOW ENGINE command,
since this would lead to very confusing results.
mysql-test/r/ndb_dd_basic.result:
Warnings for unknown engines.
mysql-test/r/partition_innodb.result:
Warnings for unknown engines.
mysql-test/r/ps_1general.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/r/show_check.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/ps_1general.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/show_check.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
sql/sql_yacc.yy:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
2007-01-23 23:14:08 +01:00
#
--error ER_UNKNOWN_STORAGE_ENGINE
show engine foobar status;
--error ER_UNKNOWN_STORAGE_ENGINE
show engine foobar logs;
--error ER_UNKNOWN_STORAGE_ENGINE
show engine foobar mutex;
--error ER_UNKNOWN_STORAGE_ENGINE
show engine mutex status;
show engine csv status;
show engine csv logs;
show engine csv mutex;
2007-01-23 11:32:10 +01:00
#
# Bug#25081 SHOW FULL TABLES on table with latin chars in name fails
#
set names utf8;
--disable_warnings
drop table if exists `été`;
--enable_warnings
create table `été` (field1 int);
show full tables;
drop table `été`;
set names latin1;
Bug#24392 (SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS)
Before this fix, the command SHOW ENGINE <name> STATUS would:
- print a warning if the engine name is unknown,
- proceed and implement the same behavior as SHOW ENGINE ALL STATUS,
and list the status of all the storage engines registered.
In particular, this behavior caused confusion about the command :
SHOW ENGINE MUTEX STATUS, which as a side effect would print the status
of the innodb engine when that engine is registered.
Also, before this fix, every time an unknown engine name was substituted by
the default engine (which happen unless SQL_MODE NO_ENGINE_SUBSTITUTION is
set), a malformed warning was raised.
For example, the command ALTER TABLE T1 ENGINE = X would print :
Warnings:
Error 1286 Unknown table engine 'X'
With this fix:
SHOW ENGINE <name> STATUS|LOGS|MUTEX
always fails with an error when the engine <name> is unknown.
For other commands, warnings about unknown engines are raised as:
Warnings:
Warning 1286 Unknown table engine 'X'
In other words, engine substitution never affect the SHOW ENGINE command,
since this would lead to very confusing results.
mysql-test/r/ndb_dd_basic.result:
Warnings for unknown engines.
mysql-test/r/partition_innodb.result:
Warnings for unknown engines.
mysql-test/r/ps_1general.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/r/show_check.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/ps_1general.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/show_check.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
sql/sql_yacc.yy:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
2007-01-23 23:14:08 +01:00
2011-01-17 08:12:38 +01:00
--echo #
--echo # Bug#4374 SHOW TABLE STATUS FROM ignores collation_connection
--echo # Character set: Latin-1 (ISO-8859-1)
--echo #
SET NAMES latin1;
CREATE DATABASE `<60> `;
CREATE TABLE `<60> `.`<60> ` (a int) ENGINE=Memory;
2011-09-27 14:14:31 +02:00
--replace_column 6 # 7 # 8 # 9 # 12 #
2011-01-17 08:12:38 +01:00
SHOW TABLE STATUS FROM `<60> ` LIKE '<27> ';
DROP DATABASE `<60> `;
2007-06-14 13:28:33 +02:00
#
# Bug#26402 Server crashes with old-style named table
#
2007-06-15 08:53:46 +02:00
--error ER_NO_SUCH_TABLE,ER_FILE_NOT_FOUND
2007-06-14 13:28:33 +02:00
show columns from `#mysql50#????????`;
2011-03-30 14:33:53 +02:00
call mtr.add_suppression("Can.t find file: '.\\\\test\\\\\\?{8}.frm'");
2007-06-14 13:28:33 +02:00
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
#
# SHOW CREATE TRIGGER test.
#
# Prepare.
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP PROCEDURE IF EXISTS p1;
--enable_warnings
CREATE TABLE t1(c1 INT);
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a = 1;
# Test.
SHOW CREATE TRIGGER t1_bi;
CREATE PROCEDURE p1() SHOW CREATE TRIGGER t1_bi;
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
CALL p1();
PREPARE stmt1 FROM 'SHOW CREATE TRIGGER t1_bi';
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
EXECUTE stmt1;
# Cleanup.
DROP TABLE t1;
DROP PROCEDURE p1;
DEALLOCATE PREPARE stmt1;
2007-07-12 10:49:39 +02:00
#
2009-03-06 15:56:17 +01:00
# Bug#10491 Server returns data as charset binary SHOW CREATE TABLE or SELECT
# FROM INFORMATION_SCHEMA.
2007-07-12 10:49:39 +02:00
#
# Before the change performed to fix the bug, the metadata of the output of
# SHOW CREATE statements would always describe the result as 'binary'. That
# would ensure that the result is never converted to character_set_client
# (which was essential to mysqldump). Now we return to the client the actual
# character set of the object -- which is character_set_client of the
# connection that issues the CREATE statement, and this triggers an automatic
# conversion to character_set_results of the connection that issues SHOW CREATE
# statement.
#
# This test demonstrates that this conversion indeed is taking place.
#
# Prepare: create objects in a one character set.
set names koi8r;
--disable_warnings
DROP VIEW IF EXISTS v1;
DROP PROCEDURE IF EXISTS p1;
DROP FUNCTION IF EXISTS f1;
DROP TABLE IF EXISTS t1;
DROP EVENT IF EXISTS ev1;
--enable_warnings
CREATE VIEW v1 AS SELECT '<27> <> <EFBFBD> <EFBFBD> ' AS test;
CREATE PROCEDURE p1() SELECT '<27> <> <EFBFBD> <EFBFBD> ' AS test;
CREATE FUNCTION f1() RETURNS CHAR(10) RETURN '<27> <> <EFBFBD> <EFBFBD> ';
CREATE TABLE t1(c1 CHAR(10));
CREATE TRIGGER t1_bi BEFORE INSERT ON t1
FOR EACH ROW
SET NEW.c1 = '<27> <> <EFBFBD> <EFBFBD> ';
CREATE EVENT ev1 ON SCHEDULE AT '2030-01-01 00:00:00' DO SELECT '<27> <> <EFBFBD> <EFBFBD> ' AS test;
# Test: switch the character set and show that SHOW CREATE output is
# automatically converted to the new character_set_client.
set names utf8;
SHOW CREATE VIEW v1;
SHOW CREATE PROCEDURE p1;
SHOW CREATE FUNCTION f1;
SHOW CREATE TRIGGER t1_bi;
SHOW CREATE EVENT ev1;
# Cleanup.
DROP VIEW v1;
DROP PROCEDURE p1;
DROP FUNCTION f1;
DROP TABLE t1;
DROP EVENT ev1;
2010-05-21 15:36:59 +02:00
#
# Bug#30036 SHOW TABLE TYPES causes the debug client to crash
#
--disable_result_log
SHOW STORAGE ENGINES;
--enable_result_log
2008-02-06 14:20:15 +01:00
#
2009-03-06 15:56:17 +01:00
# Bug#32710 SHOW INNODB STATUS requires SUPER
2008-02-06 14:20:15 +01:00
#
CREATE USER test_u@localhost;
GRANT PROCESS ON *.* TO test_u@localhost;
connect (conn1, localhost, test_u,,);
--disable_result_log
SHOW ENGINE MYISAM MUTEX;
SHOW ENGINE MYISAM STATUS;
--enable_result_log
disconnect conn1;
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
2008-02-06 14:20:15 +01:00
connection default;
DROP USER test_u@localhost;
2007-07-26 17:33:05 +02:00
2009-12-03 13:07:46 +01:00
--echo #
--echo # Bug #48985: show create table crashes if previous access to the table
--echo # was killed
--echo #
connect(con1,localhost,root,,);
CONNECTION con1;
LET $ID= `SELECT connection_id()`;
CONNECTION default;
--disable_query_log
eval KILL QUERY $ID;
--enable_query_log
CONNECTION con1;
--error ER_QUERY_INTERRUPTED
SHOW CREATE TABLE non_existent;
DISCONNECT con1;
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
CONNECTION default;
2009-12-03 13:07:46 +01:00
2005-11-29 00:32:26 +01:00
--echo End of 5.1 tests
2009-03-06 15:56:17 +01:00
2010-04-14 09:40:45 +02:00
--echo #
--echo # Bug#52593 SHOW CREATE TABLE is blocked if table is locked
--echo # for write by another connection
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
connect(con1, localhost,root);
connection default;
CREATE TABLE t1 (i INT PRIMARY KEY);
LOCK TABLE t1 WRITE;
--echo # Switching to connection 'con1'.
connection con1;
--echo # This statement used to be blocked.
SHOW CREATE TABLE t1;
2011-01-07 14:37:46 +01:00
disconnect con1;
--source include/wait_until_disconnected.inc
2010-04-14 09:40:45 +02:00
--echo # Switching to connection 'default'.
connection default;
UNLOCK TABLES;
DROP TABLE t1;
2010-07-22 11:10:35 +02:00
--echo #
--echo # Bug#54905 Connection with WRITE lock cannot ALTER table due to
--echo # concurrent SHOW CREATE
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1(a INT);
--echo # Connection con1
connect (con1,localhost,root);
LOCK TABLE t1 WRITE;
--echo # Connection default
connection default;
START TRANSACTION;
SHOW CREATE TABLE t1;
--echo # Connection con1
connection con1;
# Used to block
ALTER TABLE t1 CHARACTER SET = utf8;
UNLOCK TABLES;
--echo # Connection default
connection default;
COMMIT;
disconnect con1;
DROP TABLE t1;
2010-07-23 10:44:55 +02:00
--echo #
--echo # Bug#55498 SHOW CREATE TRIGGER takes wrong type of metadata lock.
--echo #
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1 (a INT);
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET new.a = 1;
--echo # Test 1: SHOW CREATE TRIGGER with WRITE locked table.
--echo # Connection con1
connect (con1, localhost, root);
LOCK TABLE t1 WRITE;
--echo # Connection default
connection default;
# Should not block.
SHOW CREATE TRIGGER t1_bi;
--echo # Connection con1
connection con1;
UNLOCK TABLES;
--echo # Test 2: ALTER TABLE with SHOW CREATE TRIGGER in transaction
--echo # Connection default
connection default;
START TRANSACTION;
SHOW CREATE TRIGGER t1_bi;
--echo # Connection con1
connection con1;
# Should not block.
ALTER TABLE t1 CHARACTER SET = utf8;
2011-01-07 14:37:46 +01:00
disconnect con1;
--source include/wait_until_disconnected.inc
2010-07-23 10:44:55 +02:00
--echo # Connection default
connection default;
COMMIT;
DROP TRIGGER t1_bi;
DROP TABLE t1;
2010-11-18 15:08:32 +01:00
--echo #
--echo # Bug#57306 SHOW PROCESSLIST does not display string literals well.
--echo #
SET NAMES latin1;
SELECT GET_LOCK('t', 1000);
--connect (con1,localhost,root,,)
--connection con1
SET NAMES latin1;
--send SELECT GET_LOCK('t',1000) AS 'óóóó';
--connection default
# Make sure con1 has switched from "SET NAMES" to "SELECT GET_LOCK"
let $wait_timeout= 10;
let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE '%GET_LOCK%' AND ID != CONNECTION_ID();
--source include/wait_condition.inc
2010-11-19 06:33:34 +01:00
--replace_column 1 ### 3 ### 6 ### 7 ###
2010-11-18 15:08:32 +01:00
SHOW PROCESSLIST;
SET NAMES utf8;
2010-11-19 06:33:34 +01:00
--replace_column 1 ### 3 ### 6 ### 7 ###
2010-11-18 15:08:32 +01:00
SHOW PROCESSLIST;
SELECT RELEASE_LOCK('t');
--connection con1
--reap
--disconnect con1
2011-01-07 14:37:46 +01:00
--source include/wait_until_disconnected.inc
2010-11-18 15:08:32 +01:00
--connection default
SET NAMES latin1;
2012-09-11 16:29:51 +02:00
--echo #
--echo # WL#6454: Deprecate SHOW AUTHORS and SHOW CONTRIBUTORS
--echo #
--disable_result_log
SHOW AUTHORS;
--enable_result_log
SHOW WARNINGS;
--disable_result_log
SHOW CONTRIBUTORS;
--enable_result_log
SHOW WARNINGS;