stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
**** Resetting master and slave ****
include/stop_slave.inc
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
CREATE TABLE t1 (a INT, b INT);
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
SHOW BINLOG EVENTS FROM 106;
Log_name	#
Pos	106
Event_type	Query
Server_id	#
End_log_pos	199
Info	use `test`; CREATE TABLE t1 (a INT, b INT)
Log_name	#
Pos	199
Event_type	Query
Server_id	#
End_log_pos	305
Info	use `test`; CREATE TABLE t2 (a INT, b INT) ENGINE=Merge
Log_name	#
Pos	305
Event_type	Query
Server_id	#
End_log_pos	411
Info	use `test`; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8
Log_name	#
Pos	411
Event_type	Query
Server_id	#
End_log_pos	530
Info	use `test`; CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8
**** On Master ****
SHOW CREATE TABLE t1;
Table	t1
Create Table	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE t2;
Table	t2
Create Table	CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE t3;
Table	t3
Create Table	CREATE TABLE `t3` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
**** On Slave ****
SHOW CREATE TABLE t1;
Table	t1
Create Table	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1
SHOW CREATE TABLE t2;
Table	t2
Create Table	CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE t3;
Table	t3
Create Table	CREATE TABLE `t3` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
CREATE TABLE t5 (b INT, c INT) SELECT * FROM t3;
CREATE TEMPORARY TABLE tt3 (a INT, b INT);
INSERT INTO tt3 VALUES (1,2), (2,4), (3,6), (4,2), (5,10), (6,12);
CREATE TABLE t6 (b INT, c INT) SELECT * FROM tt3;
**** On Master ****
SHOW CREATE TABLE t5;
Table	t5
Create Table	CREATE TABLE `t5` (
  `c` int(11) DEFAULT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t5 ORDER BY a,b,c;
c	a	b
SHOW CREATE TABLE t6;
Table	t6
Create Table	CREATE TABLE `t6` (
  `c` int(11) DEFAULT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t6 ORDER BY a,b,c;
c	a	b
NULL	1	2
NULL	2	4
NULL	3	6
NULL	4	2
NULL	5	10
NULL	6	12
**** On Slave ****
SHOW CREATE TABLE t5;
Table	t5
Create Table	CREATE TABLE `t5` (
  `c` int(11) DEFAULT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1
SELECT * FROM t5 ORDER BY a,b,c;
c	a	b
SHOW CREATE TABLE t6;
Table	t6
Create Table	CREATE TABLE `t6` (
  `c` int(11) DEFAULT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1
SELECT * FROM t6 ORDER BY a,b,c;
c	a	b
NULL	1	2
NULL	2	4
NULL	3	6
NULL	4	2
NULL	5	10
NULL	6	12
**** Resetting master and slave ****
include/stop_slave.inc
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
ERROR 23000: Duplicate entry '2' for key 'b'
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
CREATE TABLE t7 (a INT, b INT UNIQUE);
INSERT INTO t7 SELECT a,b FROM tt3;
ERROR 23000: Duplicate entry '2' for key 'b'
SELECT * FROM t7 ORDER BY a,b;
a	b
1	2
2	4
3	6
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	206	use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
#	206	Query	#	274	BEGIN
#	274	Table_map	#	316	table_id: # (test.t7)
#	316	Write_rows	#	372	table_id: # flags: STMT_END_F
#	372	Query	#	443	ROLLBACK
SELECT * FROM t7 ORDER BY a,b;
a	b
1	2
2	4
3	6
**** Resetting master and slave ****
include/stop_slave.inc
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
CREATE TEMPORARY TABLE tt4 (a INT, b INT);
INSERT INTO tt4 VALUES (4,8), (5,10), (6,12);
BEGIN;
INSERT INTO t7 SELECT a,b FROM tt4;
ROLLBACK;
Warnings:
Warning	1196	Some non-transactional changed tables couldn't be rolled back
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	174	BEGIN
#	174	Table_map	#	216	table_id: # (test.t7)
#	216	Write_rows	#	272	table_id: # flags: STMT_END_F
#	272	Query	#	343	ROLLBACK
SELECT * FROM t7 ORDER BY a,b;
a	b
1	2
2	4
3	6
4	8
5	10
6	12
SELECT * FROM t7 ORDER BY a,b;
a	b
1	2
2	4
3	6
4	8
5	10
6	12
**** Resetting master and slave ****
include/stop_slave.inc
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
CREATE TABLE t8 LIKE t4;
CREATE TABLE t9 LIKE tt4;
CREATE TEMPORARY TABLE tt5 LIKE t4;
CREATE TEMPORARY TABLE tt6 LIKE tt4;
CREATE TEMPORARY TABLE tt7 SELECT 1;
**** On Master ****
SHOW CREATE TABLE t8;
Table	t8
Create Table	CREATE TABLE `t8` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8
SHOW CREATE TABLE t9;
Table	t9
Create Table	CREATE TABLE `t9` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	192	use `test`; CREATE TABLE t8 LIKE t4
#	192	Query	#	331	use `test`; CREATE TABLE `t9` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
)
**** On Slave ****
SHOW CREATE TABLE t8;
Table	t8
Create Table	CREATE TABLE `t8` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8
SHOW CREATE TABLE t9;
Table	t9
Create Table	CREATE TABLE `t9` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
STOP SLAVE;
SET GLOBAL storage_engine=@storage_engine;
START SLAVE;
================ BUG#22864 ================
STOP SLAVE;
RESET SLAVE;
RESET MASTER;
START SLAVE;
SET AUTOCOMMIT=0;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE TABLE t2 ENGINE=INNODB SELECT * FROM t1;
ROLLBACK;
CREATE TABLE t3 ENGINE=INNODB SELECT * FROM t1;
INSERT INTO t3 VALUES (4),(5),(6);
ROLLBACK;
CREATE TABLE t4 ENGINE=INNODB SELECT * FROM t1;
INSERT INTO t1 VALUES (4),(5),(6);
ROLLBACK;
Warnings:
Warning	1196	Some non-transactional changed tables couldn't be rolled back
SHOW TABLES;
Tables_in_test
t1
t2
t3
t4
SELECT   TABLE_NAME,ENGINE
FROM   INFORMATION_SCHEMA.TABLES
WHERE   TABLE_NAME LIKE 't_'
ORDER BY TABLE_NAME;
TABLE_NAME	ENGINE
t1	MyISAM
t2	InnoDB
t3	InnoDB
t4	InnoDB
SELECT * FROM t1 ORDER BY a;
a
1
2
3
4
5
6
SELECT * FROM t2 ORDER BY a;
a
1
2
3
SELECT * FROM t3 ORDER BY a;
a
1
2
3
SELECT * FROM t4 ORDER BY a;
a
1
2
3
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	192	use `test`; CREATE TABLE t1 (a INT)
#	192	Query	#	260	BEGIN
#	260	Table_map	#	301	table_id: # (test.t1)
#	301	Write_rows	#	345	table_id: # flags: STMT_END_F
#	345	Query	#	414	COMMIT
#	414	Query	#	482	BEGIN
#	482	Query	#	607	use `test`; CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB
#	607	Table_map	#	648	table_id: # (test.t2)
#	648	Write_rows	#	692	table_id: # flags: STMT_END_F
#	692	Xid	#	719	COMMIT /* XID */
#	719	Query	#	787	BEGIN
#	787	Query	#	912	use `test`; CREATE TABLE `t3` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB
#	912	Table_map	#	953	table_id: # (test.t3)
#	953	Write_rows	#	997	table_id: # flags: STMT_END_F
#	997	Xid	#	1024	COMMIT /* XID */
#	1024	Query	#	1092	BEGIN
#	1092	Query	#	1217	use `test`; CREATE TABLE `t4` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB
#	1217	Table_map	#	1258	table_id: # (test.t4)
#	1258	Write_rows	#	1302	table_id: # flags: STMT_END_F
#	1302	Xid	#	1329	COMMIT /* XID */
#	1329	Query	#	1397	BEGIN
#	1397	Table_map	#	1438	table_id: # (test.t1)
#	1438	Write_rows	#	1482	table_id: # flags: STMT_END_F
#	1482	Query	#	1553	ROLLBACK
SHOW TABLES;
Tables_in_test
t1
t2
t3
t4
SELECT   TABLE_NAME,ENGINE
FROM   INFORMATION_SCHEMA.TABLES
WHERE   TABLE_NAME LIKE 't_'
ORDER BY TABLE_NAME;
TABLE_NAME	ENGINE
t1	MyISAM
t2	InnoDB
t3	InnoDB
t4	InnoDB
SELECT * FROM t1 ORDER BY a;
a
1
2
3
4
5
6
SELECT * FROM t2 ORDER BY a;
a
1
2
3
SELECT * FROM t3 ORDER BY a;
a
1
2
3
SELECT * FROM t4 ORDER BY a;
a
1
2
3
DROP TABLE IF EXISTS t1,t2,t3,t4;
SET AUTOCOMMIT=1;
STOP SLAVE;
RESET SLAVE;
RESET MASTER;
START SLAVE;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE TABLE t2 (a INT) ENGINE=INNODB;
BEGIN;
INSERT INTO t2 SELECT a*a FROM t1;
CREATE TEMPORARY TABLE tt1
SELECT a+1 AS a
FROM t1
WHERE a MOD 2 = 1;
INSERT INTO t2 SELECT a+2 FROM tt1;
COMMIT;
SELECT * FROM t2 ORDER BY a;
a
1
4
4
6
9
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	192	use `test`; CREATE TABLE t1 (a INT)
#	192	Query	#	260	BEGIN
#	260	Table_map	#	301	table_id: # (test.t1)
#	301	Write_rows	#	345	table_id: # flags: STMT_END_F
#	345	Query	#	414	COMMIT
#	414	Query	#	514	use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
#	514	Query	#	582	BEGIN
#	582	Table_map	#	623	table_id: # (test.t2)
#	623	Write_rows	#	667	table_id: # flags: STMT_END_F
#	667	Table_map	#	708	table_id: # (test.t2)
#	708	Write_rows	#	747	table_id: # flags: STMT_END_F
#	747	Xid	#	774	COMMIT /* XID */
SELECT * FROM t2 ORDER BY a;
a
1
4
4
6
9
TRUNCATE TABLE t2;
**** Resetting master and slave ****
include/stop_slave.inc
RESET SLAVE;
RESET MASTER;
include/start_slave.inc
BEGIN;
INSERT INTO t2 SELECT a*a FROM t1;
CREATE TEMPORARY TABLE tt2
SELECT a+1 AS a
FROM t1
WHERE a MOD 2 = 1;
INSERT INTO t2 SELECT a+2 FROM tt2;
ROLLBACK;
Warnings:
Warning	1196	Some non-transactional changed tables couldn't be rolled back
SELECT * FROM t2 ORDER BY a;
a
SHOW BINLOG EVENTS FROM 106;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
#	106	Query	#	174	BEGIN
#	174	Table_map	#	215	table_id: # (test.t2)
#	215	Write_rows	#	259	table_id: # flags: STMT_END_F
#	259	Table_map	#	300	table_id: # (test.t2)
#	300	Write_rows	#	339	table_id: # flags: STMT_END_F
#	339	Query	#	410	ROLLBACK
SELECT * FROM t2 ORDER BY a;
a
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(1);
CREATE TABLE t2 (a INT UNIQUE) ENGINE=INNODB SELECT * FROM t1;
ERROR 23000: Duplicate entry '1' for key 'a'
INSERT INTO t1 VALUES (2);
*** the proof of the fix:
select must show that the last insert performed on the slave ***
SELECT * FROM t1;
a
1
1
2
DROP TABLE t1;
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
DROP DATABASE IF EXISTS mysqltest1;
CREATE DATABASE mysqltest1;
CREATE TABLE mysqltest1.without_select (f1 BIGINT);
CREATE TABLE mysqltest1.with_select AS SELECT 1 AS f1;
show binlog events from <binlog_start>;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
master-bin.000001	#	Query	#	#	DROP DATABASE IF EXISTS mysqltest1
master-bin.000001	#	Query	#	#	CREATE DATABASE mysqltest1
master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE mysqltest1.without_select (f1 BIGINT)
master-bin.000001	#	Query	#	#	BEGIN
master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE `mysqltest1`.`with_select` (
  `f1` int(1) NOT NULL DEFAULT '0'
)
master-bin.000001	#	Table_map	#	#	table_id: # (mysqltest1.with_select)
master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
master-bin.000001	#	Query	#	#	COMMIT
DROP DATABASE mysqltest1;
end of the tests
