mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql-5.5-bugfixing -> mysql-5.5-innodb
This commit is contained in:
@ -1128,3 +1128,19 @@ INSERT INTO t1 VALUES (1), (2);
|
||||
ALTER TABLE t1 ADD COLUMN (f1 INT), ADD COLUMN (f2 INT), ADD KEY f2k(f2);
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test for bug #53820 "ALTER a MEDIUMINT column table causes full
|
||||
--echo # table copy".
|
||||
--echo #
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1 (a INT, b MEDIUMINT);
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2);
|
||||
--echo # The below ALTER should not copy table and so no rows should
|
||||
--echo # be shown as affected.
|
||||
--enable_info
|
||||
ALTER TABLE t1 CHANGE a id INT;
|
||||
--disable_info
|
||||
DROP TABLE t1;
|
||||
|
@ -1553,26 +1553,25 @@ drop table t1;
|
||||
# whole alter table code is being tested all around the test suite already.
|
||||
#
|
||||
|
||||
create table t1 (v varchar(32) not null);
|
||||
create table t1 (v varchar(32) not null) engine=csv;
|
||||
insert into t1 values ('def'),('abc'),('hij'),('3r4f');
|
||||
select * from t1;
|
||||
# Fast alter, no copy performed
|
||||
alter table t1 change v v2 varchar(32);
|
||||
alter table t1 change v v2 varchar(32) not null;
|
||||
select * from t1;
|
||||
# Fast alter, no copy performed
|
||||
alter table t1 change v2 v varchar(64);
|
||||
alter table t1 change v2 v varchar(64) not null;
|
||||
select * from t1;
|
||||
update t1 set v = 'lmn' where v = 'hij';
|
||||
select * from t1;
|
||||
# Regular alter table
|
||||
alter table t1 add i int auto_increment not null primary key first;
|
||||
alter table t1 add i int not null first;
|
||||
select * from t1;
|
||||
update t1 set i=5 where i=3;
|
||||
update t1 set i=3 where v = 'abc';
|
||||
select * from t1;
|
||||
alter table t1 change i i bigint;
|
||||
alter table t1 change i i bigint not null;
|
||||
select * from t1;
|
||||
alter table t1 add unique key (i, v);
|
||||
select * from t1 where i between 2 and 4 and v in ('def','3r4f','lmn');
|
||||
select * from t1 where i between 2 and 4 and v in ('def','3r4f','abc');
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
|
@ -1085,3 +1085,13 @@ drop table t1;
|
||||
--echo #
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug#55648: Server crash on MIX/MAX on maximum time value
|
||||
--echo #
|
||||
CREATE TABLE t1(c1 TIME NOT NULL);
|
||||
INSERT INTO t1 VALUES('837:59:59');
|
||||
INSERT INTO t1 VALUES('838:59:59');
|
||||
SELECT MAX(c1) FROM t1;
|
||||
DROP TABLE t1;
|
||||
--echo # End of the bug#55648
|
||||
|
||||
|
@ -209,6 +209,74 @@ disconnect con1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#49891 View DDL breaks REPEATABLE READ
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 ( f1 INTEGER ) ENGINE = innodb;
|
||||
CREATE TABLE t2 ( f1 INTEGER );
|
||||
CREATE VIEW v1 AS SELECT 1 FROM t1;
|
||||
|
||||
connect (con2, localhost, root);
|
||||
connect (con3, localhost, root);
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
LOCK TABLE t1 WRITE;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
START TRANSACTION;
|
||||
# This should block due to t1 being locked.
|
||||
--echo # Sending:
|
||||
--send SELECT * FROM v1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Waiting for 'SELECT * FROM v1' to sync in.
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||
WHERE state = "Waiting for table" AND info = "SELECT * FROM v1";
|
||||
--source include/wait_condition.inc
|
||||
# This should block due to v1 being locked.
|
||||
--echo # Sending:
|
||||
--send ALTER VIEW v1 AS SELECT 2 FROM t2
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
--echo # Waiting for 'ALTER VIEW v1 AS SELECT 2 FROM t2' to sync in.
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||
WHERE state = "Waiting for table" AND info = "ALTER VIEW v1 AS SELECT 2 FROM t2";
|
||||
--source include/wait_condition.inc
|
||||
# Unlock t1 allowing SELECT * FROM v1 to proceed.
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Connection default;
|
||||
connection default;
|
||||
--echo # Reaping: SELECT * FROM v1
|
||||
--reap
|
||||
SELECT * FROM v1;
|
||||
COMMIT;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: ALTER VIEW v1 AS SELECT 2 FROM t2
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
@ -80,6 +80,32 @@ disconnect con1;
|
||||
SET DEBUG_SYNC= "RESET";
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#53757 assert in mysql_truncate_by_delete
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1(a INT) Engine=InnoDB;
|
||||
CREATE TABLE t2(id INT);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
|
||||
connect (con1, localhost, root);
|
||||
INSERT INTO t2 VALUES(connection_id());
|
||||
SET DEBUG_SYNC= "open_and_process_table SIGNAL opening WAIT_FOR killed";
|
||||
--echo # Sending: (not reaped since connection is killed later)
|
||||
--send TRUNCATE t1
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC= "now WAIT_FOR opening";
|
||||
SELECT ((@id := id) - id) FROM t2;
|
||||
KILL @id;
|
||||
SET DEBUG_SYNC= "now SIGNAL killed";
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
@ -3705,6 +3705,481 @@ DROP TABLE t1;
|
||||
disconnect con1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Tests for schema-scope locks
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
DROP DATABASE IF EXISTS db2;
|
||||
--enable_warnings
|
||||
|
||||
connect (con2, localhost, root);
|
||||
connect (con3, localhost, root);
|
||||
|
||||
--echo # Test 1:
|
||||
--echo # CREATE DATABASE blocks database DDL on the same database, but
|
||||
--echo # not database DDL on different databases. Tests X vs X lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send CREATE DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send CREATE DATABASE db1
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='CREATE DATABASE db1';
|
||||
--source include/wait_condition.inc
|
||||
# This should not block.
|
||||
CREATE DATABASE db2;
|
||||
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
||||
DROP DATABASE db2;
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: CREATE DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: CREATE DATABASE db1
|
||||
--error ER_DB_CREATE_EXISTS
|
||||
--reap
|
||||
|
||||
--echo # Test 2:
|
||||
--echo # ALTER DATABASE blocks database DDL on the same database, but
|
||||
--echo # not database DDL on different databases. Tests X vs X lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table'
|
||||
AND info='ALTER DATABASE db1 DEFAULT CHARACTER SET utf8';
|
||||
--source include/wait_condition.inc
|
||||
# This should not block.
|
||||
CREATE DATABASE db2;
|
||||
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
||||
DROP DATABASE db2;
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should also block.
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='DROP DATABASE db1';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
# Recreate the database
|
||||
CREATE DATABASE db1;
|
||||
|
||||
--echo # Test 3:
|
||||
--echo # Two ALTER..UPGRADE of the same database are mutually exclusive, but
|
||||
--echo # two ALTER..UPGRADE of different databases are not. Tests X vs X lock.
|
||||
--echo #
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
# Manually make a 5.0 database from the template
|
||||
--mkdir $MYSQLD_DATADIR/a-b-c
|
||||
--copy_file $MYSQLD_DATADIR/db1/db.opt $MYSQLD_DATADIR/a-b-c/db.opt
|
||||
--mkdir $MYSQLD_DATADIR/a-b-c-d
|
||||
--copy_file $MYSQLD_DATADIR/db1/db.opt $MYSQLD_DATADIR/a-b-c-d/db.opt
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table'
|
||||
AND info='ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME';
|
||||
--source include/wait_condition.inc
|
||||
# This should not block.
|
||||
ALTER DATABASE `#mysql50#a-b-c-d` UPGRADE DATA DIRECTORY NAME;
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: ALTER DATABASE '#mysql50#a-b-c' UPGRADE DATA DIRECTORY NAME
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: ALTER DATABASE '#mysql50#a-b-c' UPGRADE DATA DIRECTORY NAME
|
||||
--error ER_BAD_DB_ERROR
|
||||
--reap
|
||||
DROP DATABASE `a-b-c`;
|
||||
DROP DATABASE `a-b-c-d`;
|
||||
|
||||
--echo # Test 4:
|
||||
--echo # DROP DATABASE blocks database DDL on the same database, but
|
||||
--echo # not database DDL on different databases. Tests X vs X lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='DROP DATABASE db1';
|
||||
--source include/wait_condition.inc
|
||||
# This should not block.
|
||||
CREATE DATABASE db2;
|
||||
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
||||
DROP DATABASE db2;
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--error ER_DB_DROP_EXISTS
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should also block.
|
||||
--send ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table'
|
||||
AND info='ALTER DATABASE db1 DEFAULT CHARACTER SET utf8';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
--error 1,1 # Wrong error pending followup patch for bug#54360
|
||||
--reap
|
||||
|
||||
|
||||
--echo # Test 5:
|
||||
--echo # Locked database name prevents CREATE of tables in that database.
|
||||
--echo # Tests X vs IX lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send CREATE TABLE db1.t1 (a INT)
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='CREATE TABLE db1.t1 (a INT)';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: CREATE TABLE db1.t1 (a INT)
|
||||
--error ER_BAD_DB_ERROR
|
||||
--reap
|
||||
|
||||
--echo # Test 6:
|
||||
--echo # Locked database name prevents RENAME of tables to/from that database.
|
||||
--echo # Tests X vs IX lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1 (a INT);
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send RENAME TABLE db1.t1 TO test.t1
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='RENAME TABLE db1.t1 TO test.t1';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: RENAME TABLE db1.t1 TO test.t1
|
||||
--error ER_FILE_NOT_FOUND, ER_FILE_NOT_FOUND
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE test.t2 (a INT);
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send RENAME TABLE test.t2 TO db1.t2
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='RENAME TABLE test.t2 TO db1.t2';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: RENAME TABLE test.t2 TO db1.t2
|
||||
--error 7, 7 # Wrong error pending followup patch for bug#54360
|
||||
--reap
|
||||
DROP TABLE test.t2;
|
||||
|
||||
|
||||
--echo # Test 7:
|
||||
--echo # Locked database name prevents DROP of tables in that database.
|
||||
--echo # Tests X vs IX lock.
|
||||
--echo #
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1 (a INT);
|
||||
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR locked';
|
||||
--echo # Sending:
|
||||
# This should block.
|
||||
--send DROP TABLE db1.t1
|
||||
|
||||
--echo # Connection con3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='DROP TABLE db1.t1';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now SIGNAL blocked';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping: DROP TABLE db1.t1
|
||||
--error ER_BAD_TABLE_ERROR
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
||||
--echo #
|
||||
--echo # End of tests for schema-scope locks
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Tests of granted global S lock (FLUSH TABLE WITH READ LOCK)
|
||||
--echo #
|
||||
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1(a INT);
|
||||
connect(con2, localhost, root);
|
||||
connect(con3, localhost, root);
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
FLUSH TABLE WITH READ LOCK;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
# IX global lock should block
|
||||
--send CREATE TABLE db1.t2(a INT)
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for release of readlock'
|
||||
AND info='CREATE TABLE db1.t2(a INT)';
|
||||
--source include/wait_condition.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping CREATE TABLE db1.t2(a INT)
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
FLUSH TABLE WITH READ LOCK;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
# X global lock should block
|
||||
--send ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for release of readlock'
|
||||
AND info='ALTER DATABASE db1 DEFAULT CHARACTER SET utf8';
|
||||
--source include/wait_condition.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
--echo # Reaping ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
|
||||
--reap
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
FLUSH TABLE WITH READ LOCK;
|
||||
|
||||
--echo # Connection con2
|
||||
connection con2;
|
||||
# S global lock should not block
|
||||
FLUSH TABLE WITH READ LOCK;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
UNLOCK TABLES;
|
||||
DROP DATABASE db1;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
@ -51,7 +51,7 @@ connection default;
|
||||
#--sleep 8
|
||||
#SELECT ID,STATE,INFO FROM INFORMATION_SCHEMA.PROCESSLIST;
|
||||
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||
WHERE ID = $con1_id AND STATE = 'Table lock';
|
||||
WHERE ID = $con1_id AND STATE = 'Waiting for table';
|
||||
--source include/wait_condition.inc
|
||||
#SELECT NOW();
|
||||
--echo # Kick INSERT out of thr_multi_lock().
|
||||
@ -61,7 +61,7 @@ FLUSH TABLES;
|
||||
#--sleep 8
|
||||
#SELECT ID,STATE,INFO FROM INFORMATION_SCHEMA.PROCESSLIST;
|
||||
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||
WHERE ID = $con1_id AND STATE = 'Table lock';
|
||||
WHERE ID = $con1_id AND STATE = 'Waiting for table';
|
||||
--source include/wait_condition.inc
|
||||
#SELECT NOW();
|
||||
--echo # Unlock and close table and wait for con1 to close too.
|
||||
|
@ -2,6 +2,12 @@
|
||||
# Test of MERGE TABLES
|
||||
#
|
||||
|
||||
# MERGE tables require MyISAM tables
|
||||
let $default=`select @@global.storage_engine`;
|
||||
set global storage_engine=myisam;
|
||||
set session storage_engine=myisam;
|
||||
|
||||
# Clean up resources used in this test case.
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2,t3,t4,t5,t6;
|
||||
drop database if exists mysqltest;
|
||||
@ -222,7 +228,6 @@ CREATE TABLE t2 (c1 INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
CREATE TEMPORARY TABLE t3 (c1 INT NOT NULL) ENGINE=MRG_MYISAM UNION=(t1,t2);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM t3;
|
||||
CREATE TEMPORARY TABLE t4 (c1 INT NOT NULL);
|
||||
CREATE TEMPORARY TABLE t5 (c1 INT NOT NULL);
|
||||
@ -254,7 +259,6 @@ create table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
create temporary table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
select * from t3;
|
||||
drop table t3, t2, t1;
|
||||
--echo # CREATE...SELECT is not implemented for MERGE tables.
|
||||
@ -891,12 +895,9 @@ INSERT INTO t4 VALUES (4);
|
||||
--echo # If the temporary MERGE table uses the locked children only,
|
||||
--echo # it can even be used.
|
||||
CREATE TEMPORARY TABLE t4 LIKE t3;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SHOW CREATE TABLE t4;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO t4 VALUES (4);
|
||||
UNLOCK TABLES;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO t4 VALUES (4);
|
||||
DROP TABLE t4;
|
||||
#
|
||||
@ -2116,6 +2117,325 @@ ALTER TABLE t1 ENGINE=MERGE UNION(t_not_exists,t1);
|
||||
OPTIMIZE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#36171 - CREATE TEMPORARY TABLE and MERGE engine
|
||||
--echo # More tests with TEMPORARY MERGE table and permanent children.
|
||||
--echo # First without locked tables.
|
||||
--echo #
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2, t3, t4, m1, m2;
|
||||
--enable_warnings
|
||||
#
|
||||
--echo #
|
||||
CREATE TABLE t1 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE m1;
|
||||
SELECT * FROM m1;
|
||||
INSERT INTO t1 VALUES (111, 121);
|
||||
INSERT INTO m1 VALUES (211, 221);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 RENAME m2;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
ALTER TABLE m2 RENAME m1;
|
||||
DROP TABLE m1;
|
||||
ALTER TABLE m2 RENAME m1;
|
||||
SHOW CREATE TABLE m1;
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ADD COLUMN c3 INT;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO m1 VALUES (212, 222, 232);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM m1;
|
||||
ALTER TABLE t1 ADD COLUMN c3 INT;
|
||||
ALTER TABLE t2 ADD COLUMN c3 INT;
|
||||
INSERT INTO m1 VALUES (212, 222, 232);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 DROP COLUMN c3;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO m1 VALUES (213, 223);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM m1;
|
||||
ALTER TABLE t1 DROP COLUMN c3;
|
||||
ALTER TABLE t2 DROP COLUMN c3;
|
||||
INSERT INTO m1 VALUES (213, 223);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
CREATE TABLE t3 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
ALTER TABLE m1 UNION=(t1,t2,t3);
|
||||
INSERT INTO m1 VALUES (311, 321);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE t4 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
ALTER TABLE m1 UNION=(t1,t2,t3,t4);
|
||||
INSERT INTO m1 VALUES (411, 421);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
SELECT * FROM t4;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ENGINE=MyISAM;
|
||||
SHOW CREATE TABLE m1;
|
||||
INSERT INTO m1 VALUES (511, 521);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE t1 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (611, 621);
|
||||
SELECT * FROM m1;
|
||||
DROP TABLE t1;
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
#
|
||||
--echo #
|
||||
--echo #
|
||||
SHOW CREATE TABLE m1;
|
||||
#
|
||||
--echo #
|
||||
CREATE TABLE m2 SELECT * FROM m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 SELECT * FROM m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
--error ER_WRONG_OBJECT
|
||||
CREATE TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
--error ER_WRONG_OBJECT
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
CREATE TABLE m2 LIKE m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 LIKE m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST;
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
#
|
||||
#
|
||||
--echo #
|
||||
--echo #
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
SELECT * FROM m1,m2 WHERE m1.c1=m2.c1;
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
DROP TABLE t1, t2, t3, t4, m1, m2;
|
||||
#
|
||||
#
|
||||
#
|
||||
--echo #
|
||||
--echo # Bug#36171 - CREATE TEMPORARY TABLE and MERGE engine
|
||||
--echo # More tests with TEMPORARY MERGE table and permanent children.
|
||||
--echo # (continued) Now the same with locked table.
|
||||
--echo #
|
||||
CREATE TABLE t1 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE m1;
|
||||
SELECT * FROM m1;
|
||||
INSERT INTO t1 VALUES (111, 121);
|
||||
INSERT INTO m1 VALUES (211, 221);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
#
|
||||
--echo #
|
||||
LOCK TABLE m1 WRITE, t1 WRITE, t2 WRITE;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 RENAME m2;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
ALTER TABLE m2 RENAME m1;
|
||||
DROP TABLE m1;
|
||||
ALTER TABLE m2 RENAME m1;
|
||||
SHOW CREATE TABLE m1;
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ADD COLUMN c3 INT;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO m1 VALUES (212, 222, 232);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM m1;
|
||||
ALTER TABLE t1 ADD COLUMN c3 INT;
|
||||
ALTER TABLE t2 ADD COLUMN c3 INT;
|
||||
INSERT INTO m1 VALUES (212, 222, 232);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 DROP COLUMN c3;
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
INSERT INTO m1 VALUES (213, 223);
|
||||
--error ER_WRONG_MRG_TABLE
|
||||
SELECT * FROM m1;
|
||||
ALTER TABLE t1 DROP COLUMN c3;
|
||||
ALTER TABLE t2 DROP COLUMN c3;
|
||||
INSERT INTO m1 VALUES (213, 223);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
UNLOCK TABLES;
|
||||
CREATE TABLE t3 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
ALTER TABLE m1 UNION=(t1,t2,t3);
|
||||
LOCK TABLE m1 WRITE;
|
||||
INSERT INTO m1 VALUES (311, 321);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE t4 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
ALTER TABLE m1 UNION=(t1,t2,t3,t4);
|
||||
INSERT INTO m1 VALUES (411, 421);
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
SELECT * FROM t4;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ENGINE=MyISAM;
|
||||
SHOW CREATE TABLE m1;
|
||||
INSERT INTO m1 VALUES (511, 521);
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
ALTER TABLE m1 ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
SELECT * FROM m1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE t1 (c1 INT, c2 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (611, 621);
|
||||
SELECT * FROM m1;
|
||||
DROP TABLE t1;
|
||||
SELECT * FROM m1;
|
||||
#
|
||||
#
|
||||
--echo #
|
||||
--echo #
|
||||
SHOW CREATE TABLE m1;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
CREATE TABLE m2 SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 SELECT * FROM m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST;
|
||||
SELECT * FROM m2;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE m2;
|
||||
LOCK TABLE m1 WRITE;
|
||||
#
|
||||
--echo #
|
||||
--echo # ER_TABLE_NOT_LOCKED is returned in ps-protocol
|
||||
--error ER_WRONG_OBJECT, ER_TABLE_NOT_LOCKED
|
||||
CREATE TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
--error ER_WRONG_OBJECT
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST SELECT * FROM m1;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 LIKE m1;
|
||||
SHOW CREATE TABLE m2;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
SHOW CREATE TABLE m2;
|
||||
SELECT * FROM m2;
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2;
|
||||
#
|
||||
--echo #
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT, c2 INT) ENGINE=MRG_MyISAM UNION=(t3,t4)
|
||||
INSERT_METHOD=LAST;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
#
|
||||
--echo #
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2, t3, t4, m1, m2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug47098 assert in MDL_context::destroy on HANDLER
|
||||
--echo # <damaged merge table> OPEN
|
||||
@ -2225,6 +2545,130 @@ show create table m1;
|
||||
show create table m2;
|
||||
drop tables m1, m2, t1;
|
||||
|
||||
--echo #
|
||||
--echo # Test case for Bug#54811 "Assert in mysql_lock_have_duplicate()"
|
||||
--echo # Check that unique_table() works correctly for merge tables.
|
||||
--echo #
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2, t3, m1, m2;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
create table t2 (a int);
|
||||
create table t3 (b int);
|
||||
create view v1 as select * from t3,t1;
|
||||
create table m1 (a int) engine=merge union (t1, t2) insert_method=last;
|
||||
create table m2 (a int) engine=merge union (t1, t2) insert_method=first;
|
||||
create temporary table tmp (b int);
|
||||
insert into tmp (b) values (1);
|
||||
|
||||
insert into t1 (a) values (1);
|
||||
insert into t3 (b) values (1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t2));
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t3, m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t3, m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t3, t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from t3, t2));
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from tmp, m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from tmp, m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from tmp, t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
insert into m1 (a) values ((select max(a) from tmp, t2));
|
||||
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
insert into m1 (a) values ((select max(a) from v1));
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
insert into m1 (a) values ((select max(a) from tmp, v1));
|
||||
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t2));
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t3, m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t3, m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t3, t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from t3, t2));
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from tmp, m1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from tmp, m2));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from tmp, t1));
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
update m1 set a = ((select max(a) from tmp, t2));
|
||||
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
update m1 set a = ((select max(a) from v1));
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
update m1 set a = ((select max(a) from tmp, v1));
|
||||
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from m1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from m2);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t2);
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t3, m1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t3, m2);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t3, t1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from t3, t2);
|
||||
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from tmp, m1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from tmp, m2);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from tmp, t1);
|
||||
--error ER_UPDATE_TABLE_USED
|
||||
delete from m1 where a = (select max(a) from tmp, t2);
|
||||
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
delete from m1 where a = (select max(a) from v1);
|
||||
--error ER_VIEW_PREVENT_UPDATE
|
||||
delete from m1 where a = (select max(a) from tmp, v1);
|
||||
|
||||
drop view v1;
|
||||
drop temporary table tmp;
|
||||
drop table t1, t2, t3, m1, m2;
|
||||
|
||||
--echo End of 6.0 tests
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
eval set global storage_engine=$default;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
1
mysql-test/t/merge_mmap-master.opt
Normal file
1
mysql-test/t/merge_mmap-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--myisam-use-mmap
|
151
mysql-test/t/merge_mmap.test
Normal file
151
mysql-test/t/merge_mmap.test
Normal file
@ -0,0 +1,151 @@
|
||||
#
|
||||
# Test of MERGE TABLES with MyISAM memory mapping enabled (--myisam-use-mmap)
|
||||
#
|
||||
|
||||
# MERGE tables require MyISAM tables
|
||||
--let $default=`SELECT @@global.storage_engine`
|
||||
SET GLOBAL storage_engine = MyISAM;
|
||||
SET SESSION storage_engine = MyISAM;
|
||||
|
||||
# Clean up resources used in this test case.
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2, m1, m2;
|
||||
--enable_warnings
|
||||
|
||||
####################
|
||||
## No locked tables.
|
||||
####################
|
||||
#
|
||||
# INSERT-SELECT with no TEMPORARY table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY select table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY insert table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY both tables.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
|
||||
####################
|
||||
## With LOCK TABLES.
|
||||
####################
|
||||
#
|
||||
# INSERT-SELECT with no TEMPORARY table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
SELECT * FROM t2;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY select table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY insert table.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
#
|
||||
# INSERT-SELECT with TEMPORARY both tables.
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TEMPORARY TABLE m1 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
CREATE TEMPORARY TABLE m2 (c1 INT) ENGINE=MRG_MyISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=LAST;
|
||||
LOCK TABLE m1 WRITE, m2 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2), (3), (4);
|
||||
INSERT INTO m2 SELECT * FROM m1;
|
||||
SELECT * FROM m2;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE m2, m1, t2, t1;
|
||||
|
||||
--echo End of 6.0 tests
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
eval SET GLOBAL storage_engine = $default;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
@ -1,31 +1,4 @@
|
||||
# Can't run test of external client with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# Only run test if "mysql_upgrade" is found
|
||||
--require r/have_mysql_upgrade.result
|
||||
--disable_query_log
|
||||
select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
|
||||
--enable_query_log
|
||||
|
||||
#
|
||||
# Hack:
|
||||
#
|
||||
# If running with Valgrind ($VALGRIND_TEST <> 0) then the resource
|
||||
# consumption (CPU) for upgrading a large log table will be intense.
|
||||
# Therefore, truncate the log table in advance and issue a statement
|
||||
# that should be logged.
|
||||
#
|
||||
if (`SELECT $VALGRIND_TEST`)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--disable_abort_on_error
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT 1;
|
||||
--enable_abort_on_error
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
}
|
||||
-- source include/mysql_upgrade_preparation.inc
|
||||
|
||||
#
|
||||
# Basic test that we can run mysql_upgrde and that it finds the
|
||||
|
10
mysql-test/t/mysql_upgrade_ssl.test
Normal file
10
mysql-test/t/mysql_upgrade_ssl.test
Normal file
@ -0,0 +1,10 @@
|
||||
# mysql_upgrade tests requiring SSL support
|
||||
|
||||
-- source include/have_ssl_communication.inc
|
||||
-- source include/mysql_upgrade_preparation.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#55672 mysql_upgrade dies with internal error
|
||||
--echo #
|
||||
--exec $MYSQL_UPGRADE --skip-verbose --ssl --force 2>&1
|
||||
--exit
|
@ -325,6 +325,15 @@ eval select $mysql_errno as "after_!errno_masked_error" ;
|
||||
--error 1
|
||||
--exec echo "disable_abort_on_error; error 1000; select 3 from t1; error 1000; select 3 from t1;" | $MYSQL_TEST 2>&1
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Check some non-query statements that would fail
|
||||
# ----------------------------------------------------------------------------
|
||||
--exec illegal_command
|
||||
--cat_file does_not_exist
|
||||
--perl
|
||||
exit(1);
|
||||
EOF
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Switch the abort on error on and check the effect on $mysql_errno
|
||||
# ----------------------------------------------------------------------------
|
||||
@ -863,7 +872,7 @@ while ($outer)
|
||||
}
|
||||
|
||||
# Test source in an if in a while which is false on 1st iteration
|
||||
# Also test --error in same context
|
||||
# Also test --error and --disable_abort_on_error in same context
|
||||
let $outer= 2; # Number of outer loops
|
||||
let $ifval= 0; # false 1st time
|
||||
while ($outer)
|
||||
@ -874,6 +883,10 @@ while ($outer)
|
||||
--source $MYSQLTEST_VARDIR/tmp/sourced.inc
|
||||
--error ER_NO_SUCH_TABLE
|
||||
SELECT * from nowhere;
|
||||
--disable_abort_on_error
|
||||
# Statement giving a different error, to make sure we don't mask it
|
||||
SELECT * FROM nowhere else;
|
||||
--enable_abort_on_error
|
||||
}
|
||||
dec $outer;
|
||||
inc $ifval;
|
||||
@ -1092,6 +1105,36 @@ if (!$counter)
|
||||
echo Counter is not 0, (counter=0);
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test if with some non-numerics
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
let $counter=alpha;
|
||||
if ($counter)
|
||||
{
|
||||
echo Counter is true, (counter=alpha);
|
||||
}
|
||||
let $counter= ;
|
||||
if ($counter)
|
||||
{
|
||||
echo oops, space is true;
|
||||
}
|
||||
let $counter=-0;
|
||||
if ($counter)
|
||||
{
|
||||
echo oops, -0 is true;
|
||||
}
|
||||
if (beta)
|
||||
{
|
||||
echo Beta is true;
|
||||
}
|
||||
let $counter=gamma;
|
||||
while ($counter)
|
||||
{
|
||||
echo while with string, only once;
|
||||
let $counter=000;
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test while, { and }
|
||||
# ----------------------------------------------------------------------------
|
||||
@ -1437,7 +1480,6 @@ EOF
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
|
||||
# connect when "disable_abort_on_error" caused "connection not found"
|
||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||
--disable_abort_on_error
|
||||
connect (con1,localhost,root,,);
|
||||
connection default;
|
||||
@ -1724,7 +1766,16 @@ select 1;
|
||||
--reap
|
||||
EOF
|
||||
--error 1
|
||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.in 2>&1
|
||||
# Must filter unpredictable extra warning from output
|
||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.in > $MYSQL_TMP_DIR/mysqltest.out 2>&1
|
||||
--perl
|
||||
my $dir= $ENV{'MYSQL_TMP_DIR'};
|
||||
open (FILE, "$dir/mysqltest.out");
|
||||
while (<FILE>) {
|
||||
print unless /Note: net_clear/; # This shows up on rare occations
|
||||
}
|
||||
EOF
|
||||
remove_file $MYSQL_TMP_DIR/mysqltest.out;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.in;
|
||||
|
||||
drop table t1;
|
||||
|
@ -27,6 +27,7 @@ ALTER TABLE t1 CHECK PARTITION ALL;
|
||||
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
ALTER TABLE t1 REBUILD PARTITION ALL;
|
||||
ALTER TABLE t1 TRUNCATE PARTITION ALL;
|
||||
ALTER TABLE t1 ENGINE Memory;
|
||||
ALTER TABLE t1 ADD (new INT);
|
||||
DROP TABLE t1;
|
||||
|
@ -65,7 +65,7 @@ ENGINE = MYISAM
|
||||
PARTITION p1 VALUES LESS THAN (20),
|
||||
PARTITION p2 VALUES LESS THAN (100),
|
||||
PARTITION p3 VALUES LESS THAN MAXVALUE ) */;
|
||||
SET DEBUG_SYNC= 'open_tables_acquire_upgradable_mdl SIGNAL removing_partitions WAIT_FOR waiting_for_alter';
|
||||
SET DEBUG_SYNC= 'alter_table_before_open_tables SIGNAL removing_partitions WAIT_FOR waiting_for_alter';
|
||||
SET DEBUG_SYNC= 'alter_table_before_rename_result_table WAIT_FOR delete_done';
|
||||
--send ALTER TABLE t2 REMOVE PARTITIONING
|
||||
connection default;
|
||||
|
@ -8,6 +8,50 @@ drop table if exists t1, t2;
|
||||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#50418: DROP PARTITION does not interact with transactions
|
||||
--echo #
|
||||
CREATE TABLE t1 (
|
||||
id INT AUTO_INCREMENT NOT NULL,
|
||||
name CHAR(50) NOT NULL,
|
||||
myDate DATE NOT NULL,
|
||||
PRIMARY KEY (id, myDate),
|
||||
INDEX idx_date (myDate)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE ( TO_DAYS(myDate) ) (
|
||||
PARTITION p0 VALUES LESS THAN (734028),
|
||||
PARTITION p1 VALUES LESS THAN (734029),
|
||||
PARTITION p2 VALUES LESS THAN (734030),
|
||||
PARTITION p3 VALUES LESS THAN MAXVALUE
|
||||
) ;
|
||||
INSERT INTO t1 VALUES
|
||||
(NULL, 'Lachlan', '2009-09-13'),
|
||||
(NULL, 'Clint', '2009-09-13'),
|
||||
(NULL, 'John', '2009-09-14'),
|
||||
(NULL, 'Dave', '2009-09-14'),
|
||||
(NULL, 'Jeremy', '2009-09-15'),
|
||||
(NULL, 'Scott', '2009-09-15'),
|
||||
(NULL, 'Jeff', '2009-09-16'),
|
||||
(NULL, 'Joe', '2009-09-16');
|
||||
SET AUTOCOMMIT=0;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
UPDATE t1 SET name = 'Mattias' WHERE id = 7;
|
||||
SELECT * FROM t1 WHERE id = 7;
|
||||
--connect (con1, localhost, root,,)
|
||||
--echo # Connection con1
|
||||
SET lock_wait_timeout = 1;
|
||||
--echo # After the patch it will wait and fail on timeout.
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
ALTER TABLE t1 DROP PARTITION p3;
|
||||
SHOW WARNINGS;
|
||||
--disconnect con1
|
||||
--connection default
|
||||
--echo # Connection default
|
||||
SELECT * FROM t1;
|
||||
--echo # No changes.
|
||||
COMMIT;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#51830: Incorrect partition pruning on range partition (regression)
|
||||
--echo #
|
||||
|
@ -24,3 +24,10 @@ subpartitions 1
|
||||
--error ER_WRONG_PARTITION_NAME
|
||||
alter table t1 truncate partition sp1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (3), (8);
|
||||
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||
alter table t1 truncate partition p0;
|
||||
select count(*) from t1;
|
||||
drop table t1;
|
||||
|
@ -23,6 +23,7 @@ drop schema foo;
|
||||
|
||||
--disable_warnings
|
||||
DROP SCHEMA IF EXISTS schema1;
|
||||
DROP SCHEMA IF EXISTS schema2;
|
||||
--enable_warnings
|
||||
|
||||
connect(con2, localhost, root);
|
||||
@ -31,6 +32,7 @@ connect(con2, localhost, root);
|
||||
connection default;
|
||||
|
||||
CREATE SCHEMA schema1;
|
||||
CREATE SCHEMA schema2;
|
||||
CREATE TABLE schema1.t1 (a INT);
|
||||
|
||||
SET autocommit= FALSE;
|
||||
@ -46,9 +48,7 @@ let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
|
||||
WHERE state= 'Waiting for table'
|
||||
AND info='DROP SCHEMA schema1';
|
||||
--source include/wait_condition.inc
|
||||
# Listing the error twice to prevent result diffences based on filename
|
||||
--error 1,1
|
||||
ALTER SCHEMA schema1 DEFAULT CHARACTER SET utf8;
|
||||
ALTER SCHEMA schema2 DEFAULT CHARACTER SET utf8;
|
||||
SET autocommit= TRUE;
|
||||
|
||||
--echo # Connection 2
|
||||
@ -57,6 +57,7 @@ connection con2;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
DROP SCHEMA schema2;
|
||||
disconnect con2;
|
||||
|
||||
|
||||
@ -102,6 +103,98 @@ connection con2;
|
||||
connection default;
|
||||
disconnect con2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#54360 Deadlock DROP/ALTER/CREATE DATABASE with open HANDLER
|
||||
--echo #
|
||||
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1 (a INT);
|
||||
INSERT INTO db1.t1 VALUES (1), (2);
|
||||
|
||||
--echo # Connection con1
|
||||
connect (con1, localhost, root);
|
||||
HANDLER db1.t1 OPEN;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection con2
|
||||
connect (con2, localhost, root);
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='DROP DATABASE db1';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # Connection con1
|
||||
connection con1;
|
||||
# All these statements before resulted in deadlock.
|
||||
CREATE DATABASE db2;
|
||||
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
||||
DROP DATABASE db2;
|
||||
HANDLER t1 CLOSE;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Tests for increased CREATE/ALTER/DROP DATABASE concurrency with
|
||||
--echo # database name locks.
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
DROP DATABASE IF EXISTS db2;
|
||||
--enable_warnings
|
||||
|
||||
connect (con2, localhost, root);
|
||||
connect (con3, localhost, root);
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1 (id INT);
|
||||
START TRANSACTION;
|
||||
INSERT INTO db1.t1 VALUES (1);
|
||||
|
||||
--echo # Connection 2
|
||||
connection con2;
|
||||
--echo # DROP DATABASE should block due to the active transaction
|
||||
--echo # Sending:
|
||||
--send DROP DATABASE db1
|
||||
|
||||
--echo # Connection 3
|
||||
connection con3;
|
||||
let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' and info='DROP DATABASE db1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # But it should still be possible to CREATE/ALTER/DROP other databases.
|
||||
CREATE DATABASE db2;
|
||||
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
||||
DROP DATABASE db2;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # End the transaction so DROP DATABASE db1 can continue
|
||||
COMMIT;
|
||||
|
||||
--echo # Connection 2
|
||||
connection con2;
|
||||
--echo # Reaping: DROP DATABASE db1
|
||||
--reap
|
||||
|
||||
--echo # Connection default;
|
||||
connection default;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
@ -1246,6 +1246,85 @@ UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--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;
|
||||
|
||||
|
||||
--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;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
COMMIT;
|
||||
DROP TRIGGER t1_bi;
|
||||
DROP TABLE t1;
|
||||
disconnect con1;
|
||||
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -2408,6 +2408,7 @@ BEGIN
|
||||
DECLARE EXIT HANDLER FOR x
|
||||
BEGIN
|
||||
SELECT '2';
|
||||
SHOW WARNINGS;
|
||||
RESIGNAL x SET MYSQL_ERRNO = 9999;
|
||||
END;
|
||||
|
||||
@ -2415,9 +2416,10 @@ BEGIN
|
||||
DECLARE EXIT HANDLER FOR x
|
||||
BEGIN
|
||||
SELECT '1';
|
||||
SHOW WARNINGS;
|
||||
RESIGNAL x SET
|
||||
SCHEMA_NAME = 'test',
|
||||
MYSQL_ERRNO= 1231;
|
||||
MYSQL_ERRNO= 1232;
|
||||
END;
|
||||
/* Raises ER_WRONG_VALUE_FOR_VAR : 1231, SQLSTATE 42000 */
|
||||
SET @@sql_mode=NULL;
|
||||
@ -2431,6 +2433,7 @@ BEGIN
|
||||
DECLARE EXIT HANDLER FOR x
|
||||
BEGIN
|
||||
SELECT '3';
|
||||
SHOW WARNINGS;
|
||||
RESIGNAL x SET
|
||||
MESSAGE_TEXT = 'Hi, I am a useless error message',
|
||||
MYSQL_ERRNO = 9999;
|
||||
|
@ -649,3 +649,56 @@ END//
|
||||
DELIMITER ;//
|
||||
SHOW PROCEDURE CODE p1;
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#23032: Handlers declared in a SP do not handle warnings generated in sub-SP
|
||||
--echo #
|
||||
|
||||
--echo
|
||||
--echo # - Case 4: check that "No Data trumps Warning".
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3);
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE c CURSOR FOR SELECT a FROM t1;
|
||||
|
||||
OPEN c;
|
||||
|
||||
BEGIN
|
||||
DECLARE v INT;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLWARNING
|
||||
BEGIN
|
||||
SELECT "Warning found!";
|
||||
SHOW WARNINGS;
|
||||
END;
|
||||
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SELECT "End of Result Set found!";
|
||||
SHOW WARNINGS;
|
||||
END;
|
||||
|
||||
WHILE TRUE DO
|
||||
FETCH c INTO v;
|
||||
END WHILE;
|
||||
END;
|
||||
|
||||
CLOSE c;
|
||||
|
||||
SELECT a INTO @foo FROM t1 LIMIT 1; # Clear warning stack
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
SET SESSION debug="+d,bug23032_emit_warning";
|
||||
CALL p1();
|
||||
SET SESSION debug="-d,bug23032_emit_warning";
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
|
@ -2543,3 +2543,273 @@ DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug#23032: Handlers declared in a SP do not handle warnings generated in sub-SP
|
||||
--echo #
|
||||
|
||||
--echo
|
||||
--echo # - Case 1
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP PROCEDURE IF EXISTS p3;
|
||||
DROP PROCEDURE IF EXISTS p4;
|
||||
DROP PROCEDURE IF EXISTS p5;
|
||||
DROP PROCEDURE IF EXISTS p6;
|
||||
--enable_warnings
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
SELECT 1;
|
||||
CALL p2();
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p2()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL p1();
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p2;
|
||||
|
||||
--echo
|
||||
--echo # - Case 2
|
||||
--echo
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE c INT DEFAULT 0;
|
||||
DECLARE CONTINUE HANDLER FOR SQLWARNING SET c = c + 1;
|
||||
CALL p2();
|
||||
CALL p3();
|
||||
CALL p4();
|
||||
SELECT c;
|
||||
SELECT @@warning_count;
|
||||
SHOW WARNINGS;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p2()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p3()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
SELECT 1;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p4()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
CALL p2();
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p5()
|
||||
BEGIN
|
||||
SELECT CAST('10 ' as unsigned integer);
|
||||
SHOW WARNINGS;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE P6()
|
||||
BEGIN
|
||||
DECLARE c INT DEFAULT 0;
|
||||
DECLARE CONTINUE HANDLER FOR SQLWARNING SET c = c + 1;
|
||||
CALL p5();
|
||||
SELECT c;
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL p1();
|
||||
CALL p6();
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p2;
|
||||
DROP PROCEDURE p3;
|
||||
DROP PROCEDURE p4;
|
||||
DROP PROCEDURE p5;
|
||||
DROP PROCEDURE p6;
|
||||
|
||||
--echo
|
||||
--echo # - Case 3: check that "Exception trumps No Data".
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3);
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE c CURSOR FOR SELECT a FROM t1;
|
||||
|
||||
OPEN c;
|
||||
|
||||
BEGIN
|
||||
DECLARE v1 INT;
|
||||
DECLARE v2 INT;
|
||||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
SELECT "Error caught (expected)";
|
||||
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
SELECT "End of Result Set found!";
|
||||
|
||||
WHILE TRUE DO
|
||||
FETCH c INTO v1, v2;
|
||||
END WHILE;
|
||||
END;
|
||||
|
||||
CLOSE c;
|
||||
|
||||
SELECT a INTO @foo FROM t1 LIMIT 1; # Clear warning stack
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL p1();
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#36185: Incorrect precedence for warning and exception handlers
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (a INT, b INT NOT NULL);
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLWARNING SELECT 'warning';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SELECT 'exception';
|
||||
INSERT INTO t1 VALUES (CAST('10 ' AS SIGNED), NULL);
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL p1();
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#5889: Exit handler for a warning doesn't hide the warning in trigger
|
||||
--echo #
|
||||
|
||||
--echo
|
||||
--echo # - Case 1
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1, 2);
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE TRIGGER t1_bu BEFORE UPDATE ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLWARNING
|
||||
SET NEW.a = 10;
|
||||
|
||||
SET NEW.a = 99999999999;
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
UPDATE t1 SET b = 20;
|
||||
|
||||
SHOW WARNINGS;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TRIGGER t1_bu;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo
|
||||
--echo # - Case 2
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(b CHAR(1));
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES('ab'); # Produces a warning.
|
||||
|
||||
INSERT INTO t2 VALUES('b'); # Does not produce a warning,
|
||||
# previous warning should be cleared.
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
INSERT INTO t1 VALUES(0);
|
||||
|
||||
SHOW WARNINGS;
|
||||
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
DROP TRIGGER t1_bi;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#9857: Stored procedures: handler for sqlwarning ignored
|
||||
--echo #
|
||||
|
||||
SET @sql_mode_saved = @@sql_mode;
|
||||
SET sql_mode = traditional;
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLWARNING
|
||||
SELECT 'warning caught (expected)';
|
||||
|
||||
SELECT 5 / 0;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p2()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
SELECT 'error caught (unexpected)';
|
||||
|
||||
SELECT 5 / 0;
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL p1();
|
||||
SHOW WARNINGS;
|
||||
|
||||
CALL p2();
|
||||
SHOW WARNINGS;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p2;
|
||||
SET sql_mode = @sql_mode_saved;
|
||||
|
@ -5432,6 +5432,8 @@ drop procedure if exists bug15231_1|
|
||||
drop procedure if exists bug15231_2|
|
||||
drop procedure if exists bug15231_3|
|
||||
drop procedure if exists bug15231_4|
|
||||
drop procedure if exists bug15231_5|
|
||||
drop procedure if exists bug15231_6|
|
||||
--enable_warnings
|
||||
|
||||
create table t3 (id int not null)|
|
||||
@ -5461,7 +5463,7 @@ end|
|
||||
create procedure bug15231_3()
|
||||
begin
|
||||
declare exit handler for sqlwarning
|
||||
select 'Caught it (wrong)' as 'Result';
|
||||
select 'Caught it (correct)' as 'Result';
|
||||
|
||||
call bug15231_4();
|
||||
end|
|
||||
@ -5472,16 +5474,37 @@ begin
|
||||
|
||||
set x = 'zap';
|
||||
select 'Missed it (correct)' as 'Result';
|
||||
show warnings;
|
||||
end|
|
||||
|
||||
create procedure bug15231_5()
|
||||
begin
|
||||
declare exit handler for sqlwarning
|
||||
select 'Caught it (wrong)' as 'Result';
|
||||
|
||||
call bug15231_6();
|
||||
end|
|
||||
|
||||
create procedure bug15231_6()
|
||||
begin
|
||||
declare x decimal(2,1);
|
||||
|
||||
set x = 'zap';
|
||||
select 'Missed it (correct)' as 'Result';
|
||||
select id from t3;
|
||||
end|
|
||||
|
||||
call bug15231_1()|
|
||||
call bug15231_3()|
|
||||
call bug15231_5()|
|
||||
|
||||
drop table if exists t3|
|
||||
drop procedure if exists bug15231_1|
|
||||
drop procedure if exists bug15231_2|
|
||||
drop procedure if exists bug15231_3|
|
||||
drop procedure if exists bug15231_4|
|
||||
drop table t3|
|
||||
drop procedure bug15231_1|
|
||||
drop procedure bug15231_2|
|
||||
drop procedure bug15231_3|
|
||||
drop procedure bug15231_4|
|
||||
drop procedure bug15231_5|
|
||||
drop procedure bug15231_6|
|
||||
|
||||
|
||||
#
|
||||
|
@ -235,4 +235,19 @@ INSERT INTO t2 SELECT f1();
|
||||
DROP TABLE t1,t2,t3;
|
||||
DROP FUNCTION f1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #48067: A temp table with the same name as an existing table,
|
||||
--echo # makes drop database fail.
|
||||
--echo #
|
||||
--disable_warnings
|
||||
DROP TEMPORARY TABLE IF EXISTS bug48067.t1;
|
||||
DROP DATABASE IF EXISTS bug48067;
|
||||
--enable_warnings
|
||||
CREATE DATABASE bug48067;
|
||||
CREATE TABLE bug48067.t1 (c1 int);
|
||||
INSERT INTO bug48067.t1 values (1);
|
||||
CREATE TEMPORARY TABLE bug48067.t1 (c1 int);
|
||||
DROP DATABASE bug48067;
|
||||
DROP TEMPORARY table bug48067.t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -1405,4 +1405,30 @@ SET @@sql_quote_show_create = @sql_quote_show_create_saved;
|
||||
--echo # End of Bug#34828.
|
||||
--echo
|
||||
|
||||
--echo # Make sure we can manipulate with autocommit in the
|
||||
--echo # along with other variables.
|
||||
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop function if exists t1_max;
|
||||
drop function if exists t1_min;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a int) engine=innodb;
|
||||
insert into t1(a) values (0), (1);
|
||||
create function t1_max() returns int return (select max(a) from t1);
|
||||
create function t1_min() returns int return (select min(a) from t1);
|
||||
select t1_min();
|
||||
select t1_max();
|
||||
set @@session.autocommit=t1_min(), @@session.autocommit=t1_max(),
|
||||
@@session.autocommit=t1_min(), @@session.autocommit=t1_max(),
|
||||
@@session.autocommit=t1_min(), @@session.autocommit=t1_max();
|
||||
|
||||
--echo # Cleanup.
|
||||
drop table t1;
|
||||
drop function t1_min;
|
||||
drop function t1_max;
|
||||
|
||||
|
||||
###########################################################################
|
||||
|
Reference in New Issue
Block a user