From: Li-Bing.Song Date: August 18 2010 9:24am Subject: bzr commit into mysql-5.5-bugfixing branch (Li-Bing.Song:3184) Bug#23992 Bug#47132 Bug#47442 Bug#48814 Bug#55617 WL#5370 List-Archive: http://lists.mysql.com/commits/116060 X-Bug: 23992,47132,47442,48814,55617 Message-Id: <201008180925.o7I9PTDX027856@anders-server> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7427009417678159164==" --===============7427009417678159164== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/anders/work/bzrwork1/wt3/mysql-5.5-bugfixing/ based on revid:joerg@stripped 3184 Li-Bing.Song@stripped 2010-08-18 WL#5370 Keep forward-compatibility when changing 'CREATE TABLE IF NOT EXISTS ... SELECT' behaviour BUG#47132, BUG#47442, BUG49494, BUG#23992 and BUG#48814 will disappear automatically after the this patch. BUG#55617 is fixed by this patch too. This is the 5.5 part. It implements: - 'CREATE TABLE IF NOT EXISTS ... SELECT' statement will not insert anything and binlog anything if the table already exists. It only generate a warning that table already exists. - A couple of test cases for the behavior changing. modified: mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test mysql-test/include/commit.inc mysql-test/include/deadlock.inc mysql-test/include/mix1.inc mysql-test/r/auto_increment.result mysql-test/r/commit_1innodb.result mysql-test/r/create.result mysql-test/r/merge.result mysql-test/r/ps_ddl.result mysql-test/r/trigger.result mysql-test/r/union.result mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result mysql-test/suite/innodb/r/innodb_mysql.result mysql-test/suite/rpl/r/rpl_create_if_not_exists.result mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result mysql-test/suite/rpl/t/rpl_create_if_not_exists.test mysql-test/t/auto_increment.test mysql-test/t/create.test mysql-test/t/merge.test mysql-test/t/trigger.test mysql-test/t/union.test sql/handler.h sql/sql_base.cc sql/sql_insert.cc sql/sql_parse.cc sql/sql_prepare.cc sql/sql_table.cc sql/sql_view.cc sql/sql_yacc.yy sql/table.h === modified file 'mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test' --- a/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test 2010-07-16 18:25:38 +0000 +++ b/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test 2010-08-18 08:45:39 +0000 @@ -262,7 +262,6 @@ DROP TABLE IF EXISTS t2; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb; INSERT INTO t1 VALUES (4,4); ---error ER_DUP_ENTRY CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; SELECT * from t2; TRUNCATE table t2; @@ -277,11 +276,9 @@ CREATE TEMPORARY TABLE t2 (a int, b int, INSERT INTO t1 values (7,7); ROLLBACK; INSERT INTO t1 values (8,8); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; COMMIT; INSERT INTO t1 values (9,9); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; ROLLBACK; SELECT * from t2; @@ -291,11 +288,9 @@ INSERT INTO t1 values (10,10); INSERT INTO t2 select * from t1; SELECT * from t1; INSERT INTO t2 values (100,100); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; COMMIT; INSERT INTO t2 values (101,101); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; ROLLBACK; SELECT * from t2; === modified file 'mysql-test/include/commit.inc' --- a/mysql-test/include/commit.inc 2010-07-20 17:45:44 +0000 +++ b/mysql-test/include/commit.inc 2010-08-18 08:45:39 +0000 @@ -723,7 +723,7 @@ call p_verify_status_increment(4, 4, 4, --echo # Sic: no table is created. create table if not exists t2 (a int) select 6 union select 7; --echo # Sic: first commits the statement, and then the transaction. -call p_verify_status_increment(2, 0, 4, 4); +call p_verify_status_increment(2, 0, 2, 0); create table t3 select a from t2; call p_verify_status_increment(2, 0, 4, 4); alter table t3 add column (b int); === modified file 'mysql-test/include/deadlock.inc' --- a/mysql-test/include/deadlock.inc 2007-08-27 13:19:58 +0000 +++ b/mysql-test/include/deadlock.inc 2010-08-18 08:45:39 +0000 @@ -159,7 +159,7 @@ drop table if exists A; create table A (c int); insert into A (c) values (0); ---error 0,ER_LOCK_DEADLOCK,ER_UPDATE_TABLE_USED +--error 0,ER_LOCK_DEADLOCK,ER_TABLE_EXISTS_ERROR create table a as select * from A; drop table A; === modified file 'mysql-test/include/mix1.inc' --- a/mysql-test/include/mix1.inc 2010-05-25 20:01:38 +0000 +++ b/mysql-test/include/mix1.inc 2010-08-18 08:45:39 +0000 @@ -742,7 +742,6 @@ drop table if exists t2; CREATE TABLE t2 (a int, b int, primary key (a)); BEGIN; INSERT INTO t2 values(100,100); ---error ER_DUP_ENTRY CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; SELECT * from t2; ROLLBACK; @@ -756,13 +755,11 @@ drop table t2; CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)); BEGIN; INSERT INTO t2 values(100,100); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; SELECT * from t2; COMMIT; BEGIN; INSERT INTO t2 values(101,101); ---error ER_DUP_ENTRY CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; SELECT * from t2; ROLLBACK; === modified file 'mysql-test/r/auto_increment.result' --- a/mysql-test/r/auto_increment.result 2009-08-20 12:30:59 +0000 +++ b/mysql-test/r/auto_increment.result 2010-08-18 08:45:39 +0000 @@ -469,7 +469,7 @@ drop table t1; CREATE TABLE t1 ( a INT ); INSERT INTO t1 VALUES (1), (1); CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY ); -CREATE TABLE IF NOT EXISTS t2 AS SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' UPDATE t2 SET a = 2; SELECT a FROM t2; === modified file 'mysql-test/r/commit_1innodb.result' --- a/mysql-test/r/commit_1innodb.result 2010-07-20 17:45:44 +0000 +++ b/mysql-test/r/commit_1innodb.result 2010-08-18 08:45:39 +0000 @@ -830,7 +830,7 @@ create table if not exists t2 (a int) se Warnings: Note 1050 Table 't2' already exists # Sic: first commits the statement, and then the transaction. -call p_verify_status_increment(2, 0, 4, 4); +call p_verify_status_increment(2, 0, 2, 0); SUCCESS create table t3 select a from t2; === modified file 'mysql-test/r/create.result' --- a/mysql-test/r/create.result 2010-06-11 08:14:38 +0000 +++ b/mysql-test/r/create.result 2010-08-18 08:45:39 +0000 @@ -1,5 +1,6 @@ drop table if exists t1,t2,t3,t4,t5; drop database if exists mysqltest; +drop view if exists v1; create table t1 (b char(0)); insert into t1 values (""),(null); select * from t1; @@ -264,15 +265,14 @@ create table if not exists t1 select 1,2 Warnings: Note 1050 Table 't1' already exists create table if not exists t1 select 1,2,3,4; -ERROR 21S01: Column count doesn't match value count at row 1 +Warnings: +Note 1050 Table 't1' already exists create table if not exists t1 select 1; Warnings: Note 1050 Table 't1' already exists select * from t1; 1 2 3 1 2 3 -0 1 2 -0 0 1 drop table t1; flush status; create table t1 (a int not null, b int, primary key (a)); @@ -280,28 +280,21 @@ insert into t1 values (1,1); create table if not exists t1 select 2; Warnings: Note 1050 Table 't1' already exists -Warning 1364 Field 'a' doesn't have a default value select * from t1; a b 1 1 -0 2 create table if not exists t1 select 3 as 'a',4 as 'b'; Warnings: Note 1050 Table 't1' already exists -create table if not exists t1 select 3 as 'a',3 as 'b'; -ERROR 23000: Duplicate entry '3' for key 'PRIMARY' show warnings; Level Code Message Note 1050 Table 't1' already exists -Error 1062 Duplicate entry '3' for key 'PRIMARY' show status like "Opened_tables"; Variable_name Value Opened_tables 2 select * from t1; a b 1 1 -0 2 -3 4 drop table t1; create table `t1 `(a int); ERROR 42000: Incorrect table name 't1 ' @@ -611,7 +604,7 @@ b drop table t1,t2; create table t1 (a int); create table t1 select * from t1; -ERROR HY000: You can't specify target table 't1' for update in FROM clause +ERROR 42S01: Table 't1' already exists create table t2 union = (t1) select * from t1; ERROR HY000: 'test.t2' is not BASE TABLE flush tables with read lock; @@ -811,7 +804,8 @@ create table t1 (primary key(a)) select ERROR 42000: Key column 'a' doesn't exist in table create table t1 (a int); create table if not exists t1 select 1 as a, 2 as b; -ERROR 21S01: Column count doesn't match value count at row 1 +Warnings: +Note 1050 Table 't1' already exists drop table t1; create table t1 (primary key (a)) (select 1 as a) union all (select 1 as a); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' @@ -823,25 +817,14 @@ Warnings: Note 1050 Table 't1' already exists select * from t1; i -1 create table if not exists t1 select * from t1; -ERROR HY000: You can't specify target table 't1' for update in FROM clause +Warnings: +Note 1050 Table 't1' already exists select * from t1; i -1 +drop table t1; create table t1 select coalesce('a' collate latin1_swedish_ci,'b' collate latin1_bin); ERROR HY000: Illegal mix of collations (latin1_swedish_ci,EXPLICIT) and (latin1_bin,EXPLICIT) for operation 'coalesce' -select * from t1; -i -1 -alter table t1 add primary key (i); -create table if not exists t1 (select 2 as i) union all (select 2 as i); -ERROR 23000: Duplicate entry '2' for key 'PRIMARY' -select * from t1; -i -1 -2 -drop table t1; create temporary table t1 (j int); create table if not exists t1 select 1; select * from t1; @@ -893,8 +876,6 @@ select * from t2; i 1 2 -1 -2 unlock tables; drop table t1, t2; create table t1 (upgrade int); @@ -1586,11 +1567,9 @@ CREATE TABLE t1 (a INTEGER AUTO_INCREMEN INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; -CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) -SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' -CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) -SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' DROP TABLE t1, t2; # @@ -1620,7 +1599,7 @@ drop table if exists t2; Warnings: Note 1051 Unknown table 't2' CREATE TABLE t2 (a int, b int, primary key (a)); -CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; +INSERT INTO t2 select * from t1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' SELECT * from t2; a b @@ -1633,13 +1612,7 @@ a b 1 1 drop table t2; CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)); -CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' -SELECT * from t2; -a b -1 1 -TRUNCATE table t2; -INSERT INTO t2 select * from t1; +INSERT INTO t2 SELECT * FROM t1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' SELECT * from t2; a b @@ -1964,11 +1937,7 @@ CREATE TRIGGER f BEFORE INSERT ON t1 FOR BEGIN INSERT INTO t1 ( `int` ) VALUES (4 ),( 8 ),( 2 ) ; END ; | -CREATE TABLE IF NOT EXISTS t1 ( -`pk` INTEGER NOT NULL AUTO_INCREMENT , -`int` INTEGER , -PRIMARY KEY ( `pk` ) -) SELECT `pk` , `int_key` FROM B ; +INSERT INTO t1 (pk, int_key) SELECT `pk` , `int_key` FROM B ; ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. CREATE TRIGGER f BEFORE INSERT ON t1 FOR EACH ROW BEGIN @@ -2088,3 +2057,347 @@ t2 CREATE TABLE `t2` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 set @@sql_mode= @old_mode; drop tables t1, t2; +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int); +INSERT INTO t1 VALUES (1), (1); +INSERT INTO t2 VALUES (2), (2); +CREATE VIEW v1 AS SELECT id FROM t2; +CREATE TABLE IF NOT EXISTS v1(a int, b int) SELECT id, id FROM t1; +Warnings: +Note 1050 Table 'v1' already exists +SHOW CREATE TABLE v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t2`.`id` AS `id` from `t2` latin1 latin1_swedish_ci +SELECT * FROM t2; +id +2 +2 +SELECT * FROM v1; +id +2 +2 +DROP VIEW v1; +CREATE TEMPORARY TABLE tt1 AS SELECT id FROM t2; +CREATE TEMPORARY TABLE IF NOT EXISTS tt1(a int, b int) SELECT id, id FROM t1; +Warnings: +Note 1050 Table 'tt1' already exists +SELECT * FROM t2; +id +2 +2 +SELECT * FROM tt1; +id +2 +2 +DROP TEMPORARY TABLE tt1; +DROP TABLE t1, t2; +# +# WL#5370 "Changing 'CREATE TABLE IF NOT EXISTS ... SELECT' +# behaviour. +# +# +# 1. Basic case: a base table. +# +create table if not exists t1 (a int) select 1 as a; +select * from t1; +a +1 +create table t1 (a int) select 2 as a; +ERROR 42S01: Table 't1' already exists +select * from t1; +a +1 +# Produces an essential warning ER_TABLE_EXISTS. +create table if not exists t1 (a int) select 2 as a; +Warnings: +Note 1050 Table 't1' already exists +# No new data in t1. +select * from t1; +a +1 +drop table t1; +# +# 2. A temporary table. +# +create temporary table if not exists t1 (a int) select 1 as a; +select * from t1; +a +1 +create temporary table t1 (a int) select 2 as a; +ERROR 42S01: Table 't1' already exists +select * from t1; +a +1 +# An essential warning. +create temporary table if not exists t1 (a int) select 2 as a; +Warnings: +Note 1050 Table 't1' already exists +# No new data in t1. +select * from t1; +a +1 +drop temporary table t1; +# +# 3. Creating a base table in presence of a temporary table. +# +create table t1 (a int); +# Create a view for convenience of querying t1 shadowed by a temp. +create view v1 as select a from t1; +drop table t1; +create temporary table t1 (a int) select 1 as a; +create table if not exists t1 (a int) select 2 as a; +select * from t1; +a +1 +select * from v1; +a +2 +# Note: an essential warning. +create table if not exists t1 (a int) select 3 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +1 +select * from v1; +a +2 +drop temporary table t1; +select * from t1; +a +2 +drop view v1; +drop table t1; +# +# 4. Creating a temporary table in presence of a base table. +# +create table t1 (a int) select 1 as a; +create temporary table if not exists t1 select 2 as a; +select * from t1; +a +2 +# Note: an essential warning. +create temporary table if not exists t1 select 3 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +2 +drop temporary table t1; +select * from t1; +a +1 +drop table t1; +# +# 5. Creating a base table in presence of an updatable view. +# +create table t2 (a int unique); +create view t1 as select a from t2; +insert into t1 (a) values (1); +create table t1 (a int); +ERROR 42S01: Table 't1' already exists +# Note: an essential warning. +create table if not exists t1 (a int); +Warnings: +Note 1050 Table 't1' already exists +create table t1 (a int) select 2 as a; +ERROR 42S01: Table 't1' already exists +select * from t1; +a +1 +# Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +1 +select * from t2; +a +1 +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +a +3 +select * from t2; +a +1 +# Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +3 +select * from t2; +a +1 +drop temporary table t1; +# +# Repeating the test with a non-updatable view. +# +drop view t1; +create view t1 as select a + 5 as a from t2; +insert into t1 (a) values (1); +ERROR HY000: The target table t1 of the INSERT is not insertable-into +update t1 set a=3 where a=2; +ERROR HY000: Column 'a' is not updatable +create table t1 (a int); +ERROR 42S01: Table 't1' already exists +# Note: an essential warning. +create table if not exists t1 (a int); +Warnings: +Note 1050 Table 't1' already exists +create table t1 (a int) select 2 as a; +ERROR 42S01: Table 't1' already exists +select * from t1; +a +6 +# Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +6 +select * from t2; +a +1 +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +a +3 +select * from t2; +a +1 +# Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +3 +select * from t2; +a +1 +drop temporary table t1; +drop view t1; +drop table t2; +# +# Repeating the test with a view select a constant number +# +create view t1 as select 1 as a; +insert into t1 (a) values (1); +ERROR HY000: The target table t1 of the INSERT is not insertable-into +update t1 set a=3 where a=2; +ERROR HY000: The target table t1 of the UPDATE is not updatable +create table t1 (a int); +ERROR 42S01: Table 't1' already exists +# Note: an essential warning. +create table if not exists t1 (a int); +Warnings: +Note 1050 Table 't1' already exists +create table t1 (a int) select 2 as a; +ERROR 42S01: Table 't1' already exists +select * from t1; +a +1 +# Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +1 +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +a +3 +# Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +3 +drop temporary table t1; +drop view t1; +# +# 6. Test of unique_table(). +# +create table t1 (a int) select 1 as a; +create temporary table if not exists t1 (a int) select * from t1; +create temporary table if not exists t1 (a int) select * from t1; +ERROR HY000: Can't reopen table: 't1' +select * from t1; +a +1 +drop temporary table t1; +select * from t1; +a +1 +drop table t1; +create temporary table t1 (a int) select 1 as a; +create table if not exists t1 (a int) select * from t1; +create table if not exists t1 (a int) select * from t1; +Warnings: +Note 1050 Table 't1' already exists +select * from t1; +a +1 +drop temporary table t1; +select * from t1; +a +1 +drop table t1; +create table if not exists t1 (a int) select * from t1; +ERROR 42S02: Table 'test.t1' doesn't exist +# +# 7. Test of non-matching columns, REPLACE and IGNORE. +# +create table t1 (a int) select 1 as b, 2 as c; +select * from t1; +a b c +NULL 1 2 +drop table t1; +create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c; +Warnings: +Warning 1264 Out of range value for column 'b' at row 1 +Warning 1264 Out of range value for column 'c' at row 1 +select * from t1; +a b c +NULL 0000-00-00 0000-00-00 +drop table t1; +set @@session.sql_mode='STRICT_ALL_TABLES'; +create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c; +ERROR 22007: Incorrect date value: '1' for column 'b' at row 1 +select * from t1; +ERROR 42S02: Table 'test.t1' doesn't exist +create table if not exists t1 (a int, b date, c date) +replace select 1 as b, 2 as c; +ERROR 22007: Incorrect date value: '1' for column 'b' at row 1 +select * from t1; +ERROR 42S02: Table 'test.t1' doesn't exist +create table if not exists t1 (a int, b date, c date) +ignore select 1 as b, 2 as c; +Warnings: +Warning 1264 Out of range value for column 'b' at row 1 +Warning 1264 Out of range value for column 'c' at row 1 +select * from t1; +a b c +NULL 0000-00-00 0000-00-00 +set @@session.sql_mode=default; +drop table t1; +create table if not exists t1 (a int unique, b int) +replace select 1 as a, 1 as b union select 1 as a, 2 as b; +select * from t1; +a b +1 2 +drop table t1; +create table if not exists t1 (a int unique, b int) +ignore select 1 as a, 1 as b union select 1 as a, 2 as b; +select * from t1; +a b +1 1 +drop table t1; +# === modified file 'mysql-test/r/merge.result' --- a/mysql-test/r/merge.result 2010-07-02 16:07:57 +0000 +++ b/mysql-test/r/merge.result 2010-08-18 08:45:39 +0000 @@ -933,7 +933,8 @@ DROP TABLE tm1, t1, t2; CREATE TABLE t1(c1 INT); CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST; CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2; -ERROR HY000: You can't specify target table 't1' for update in FROM clause +Warnings: +Note 1050 Table 't1' already exists DROP TABLE t1, t2; CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM; CREATE TABLE t2 LIKE t1; === modified file 'mysql-test/r/ps_ddl.result' --- a/mysql-test/r/ps_ddl.result 2010-02-20 10:07:32 +0000 +++ b/mysql-test/r/ps_ddl.result 2010-08-18 08:45:39 +0000 @@ -1833,7 +1833,6 @@ SUCCESS select * from t2; a 1 -1 execute stmt; Warnings: Note 1050 Table 't2' already exists @@ -1843,8 +1842,6 @@ SUCCESS select * from t2; a 1 -1 -1 drop table t2; create temporary table t2 (a varchar(10)); execute stmt; @@ -1852,7 +1849,6 @@ Warnings: Note 1050 Table 't2' already exists select * from t2; a -1 call p_verify_reprepare_count(1); SUCCESS === modified file 'mysql-test/r/trigger.result' --- a/mysql-test/r/trigger.result 2010-08-05 12:53:09 +0000 +++ b/mysql-test/r/trigger.result 2010-08-18 08:45:39 +0000 @@ -1420,9 +1420,7 @@ create trigger t1_ai after insert on t1 create table t2 (j int); insert into t2 values (1), (2); set @a:=""; -create table if not exists t1 select * from t2; -Warnings: -Note 1050 Table 't1' already exists +insert into t1 select * from t2; select * from t1; i 7 @@ -1434,9 +1432,7 @@ drop trigger t1_bi; drop trigger t1_ai; create table t3 (isave int); create trigger t1_bi before insert on t1 for each row insert into t3 values (new.i); -create table if not exists t1 select * from t2; -Warnings: -Note 1050 Table 't1' already exists +insert into t1 select * from t2; select * from t1; i 7 @@ -1622,10 +1618,8 @@ After DELETE, old=REPLACE, inserting a n After INSERT, new=REPLACE, deleting the duplicate truncate t1; truncate t1_op_log; -create table if not exists t1 +insert into t1 select NULL, "CREATE TABLE ... SELECT, inserting a new key"; -Warnings: -Note 1050 Table 't1' already exists set @id=last_insert_id(); select * from t1; id operation @@ -1635,10 +1629,8 @@ operation Before INSERT, new=CREATE TABLE ... SELECT, inserting a new key After INSERT, new=CREATE TABLE ... SELECT, inserting a new key truncate t1_op_log; -create table if not exists t1 replace +replace into t1 select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key"; -Warnings: -Note 1050 Table 't1' already exists select * from t1; id operation 1 CREATE TABLE ... REPLACE SELECT, deleting a duplicate key @@ -1817,10 +1809,8 @@ After DELETE, old=REPLACE, inserting a n After INSERT, new=REPLACE, deleting the duplicate truncate t1; truncate t1_op_log; -create table if not exists v1 +insert into v1 select NULL, "CREATE TABLE ... SELECT, inserting a new key"; -Warnings: -Note 1050 Table 'v1' already exists set @id=last_insert_id(); select * from t1; id operation @@ -1830,10 +1820,8 @@ operation Before INSERT, new=CREATE TABLE ... SELECT, inserting a new key After INSERT, new=CREATE TABLE ... SELECT, inserting a new key truncate t1_op_log; -create table if not exists v1 replace +replace into v1 select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key"; -Warnings: -Note 1050 Table 'v1' already exists select * from t1; id operation 1 CREATE TABLE ... REPLACE SELECT, deleting a duplicate key @@ -2083,7 +2071,8 @@ BEGIN UPDATE a_nonextisting_table SET a = 1; END// CREATE TABLE IF NOT EXISTS t2 ( a INT, b INT ) SELECT a, b FROM t1; -ERROR 42S02: Table 'test.a_nonextisting_table' doesn't exist +Warnings: +Note 1050 Table 't2' already exists SELECT * FROM t2; a b DROP TABLE t1, t2; === modified file 'mysql-test/r/union.result' --- a/mysql-test/r/union.result 2010-03-24 15:03:44 +0000 +++ b/mysql-test/r/union.result 2010-08-18 08:45:39 +0000 @@ -428,7 +428,7 @@ ERROR 42000: Incorrect usage/placement o create temporary table t1 select a from t1 union select a from t2; drop temporary table t1; create table t1 select a from t1 union select a from t2; -ERROR HY000: You can't specify target table 't1' for update in FROM clause +ERROR 42S01: Table 't1' already exists select a from t1 union select a from t2 order by t2.a; ERROR 42S22: Unknown column 't2.a' in 'order clause' drop table t1,t2; === modified file 'mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result' --- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-07-17 11:07:36 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-08-18 08:45:39 +0000 @@ -321,7 +321,8 @@ Note 1051 Unknown table 't2' CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb; INSERT INTO t1 VALUES (4,4); CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists SELECT * from t2; a b TRUNCATE table t2; @@ -339,11 +340,13 @@ Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back INSERT INTO t1 values (8,8); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists COMMIT; INSERT INTO t1 values (9,9); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists ROLLBACK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back @@ -367,11 +370,13 @@ a b 10 10 INSERT INTO t2 values (100,100); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists COMMIT; INSERT INTO t2 values (101,101); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists ROLLBACK; SELECT * from t2; a b @@ -413,41 +418,13 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS `t2` ( - `a` int(11) NOT NULL DEFAULT '0', - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=InnoDB -master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS `t2` ( - `a` int(11) NOT NULL DEFAULT '0', - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=InnoDB -master-bin.000001 # Query # # ROLLBACK -master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS `t2` ( - `a` int(11) NOT NULL DEFAULT '0', - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=InnoDB -master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS `t2` ( - `a` int(11) NOT NULL DEFAULT '0', - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=InnoDB -master-bin.000001 # Query # # ROLLBACK master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t2` /* generated by server */ reset master; === modified file 'mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result' --- a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2010-07-15 13:47:50 +0000 +++ b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2010-08-18 08:45:39 +0000 @@ -315,7 +315,8 @@ Note 1051 Unknown table 't2' CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb; INSERT INTO t1 VALUES (4,4); CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists SELECT * from t2; a b TRUNCATE table t2; @@ -335,11 +336,13 @@ Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back INSERT INTO t1 values (8,8); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists COMMIT; INSERT INTO t1 values (9,9); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists ROLLBACK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back @@ -363,11 +366,13 @@ a b 10 10 INSERT INTO t2 values (100,100); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists COMMIT; INSERT INTO t2 values (101,101); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists ROLLBACK; SELECT * from t2; a b @@ -412,9 +417,6 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # use `test`; INSERT INTO t2 values (100,100) master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; INSERT INTO t2 values (101,101) -master-bin.000001 # Query # # ROLLBACK master-bin.000001 # Query # # use `test`; DROP TABLE t1,t2 reset master; create table t1 (a int) engine=innodb; === modified file 'mysql-test/suite/innodb/r/innodb_mysql.result' --- a/mysql-test/suite/innodb/r/innodb_mysql.result 2010-07-07 12:18:20 +0000 +++ b/mysql-test/suite/innodb/r/innodb_mysql.result 2010-08-18 08:45:39 +0000 @@ -720,7 +720,8 @@ CREATE TABLE t2 (a int, b int, primary k BEGIN; INSERT INTO t2 values(100,100); CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists SELECT * from t2; a b 100 100 @@ -738,7 +739,8 @@ CREATE TEMPORARY TABLE t2 (a int, b int, BEGIN; INSERT INTO t2 values(100,100); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists SELECT * from t2; a b 100 100 @@ -746,7 +748,8 @@ COMMIT; BEGIN; INSERT INTO t2 values(101,101); CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +Warnings: +Note 1050 Table 't2' already exists SELECT * from t2; a b 100 100 === modified file 'mysql-test/suite/rpl/r/rpl_create_if_not_exists.result' --- a/mysql-test/suite/rpl/r/rpl_create_if_not_exists.result 2010-01-16 07:44:24 +0000 +++ b/mysql-test/suite/rpl/r/rpl_create_if_not_exists.result 2010-08-18 08:45:39 +0000 @@ -26,7 +26,6 @@ SHOW TABLES in mysqltest; Tables_in_mysqltest t t1 -t2 SHOW EVENTS in mysqltest; Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation mysqltest e root@localhost SYSTEM ONE TIME # NULL NULL NULL NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci @@ -65,3 +64,65 @@ c1 DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; +# WL#5370 +# The behavior of statement 'CREATE TABLE SELECT IF NOT EXISTS' is changed. +# After the worklog, it will insert nothing and the statement will not be +# binlogged if the table already exists. +# After the worklog, some bugs will disappear automotically. +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; + +# Case 1: BUG#47132 +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.*"); +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int); +INSERT INTO t1 VALUES (1), (1); +INSERT INTO t2 VALUES (2), (2); +CREATE VIEW v1 AS SELECT id FROM t2; +CREATE TABLE IF NOT EXISTS v1(a int, b int) SELECT id, id FROM t1; +Warnings: +Note 1050 Table 'v1' already exists +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +SHOW CREATE TABLE v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t2`.`id` AS `id` from `t2` latin1 latin1_swedish_ci +SELECT * FROM t2; +id +2 +2 +SELECT * FROM v1; +id +2 +2 +DROP VIEW v1; +CREATE TEMPORARY TABLE tt1 AS SELECT id FROM t2; +CREATE TEMPORARY TABLE IF NOT EXISTS tt1(a int, b int) SELECT id, id FROM t1; +Warnings: +Note 1050 Table 'tt1' already exists +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +SELECT * FROM t2; +id +2 +2 +SELECT * FROM tt1; +id +2 +2 +DROP TEMPORARY TABLE tt1; + +# Case 1: BUG#47132 +# RBR breaks on CREATE TABLE IF EXISTS AS SELECT +CREATE VIEW v1 AS SELECT 1 as a; +CREATE TABLE IF NOT EXISTS v1 SELECT 2 as a; +Warnings: +Note 1050 Table 'v1' already exists +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +DROP VIEW v1; +DROP TABLE t1, t2; === modified file 'mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result' --- a/mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result 2009-08-13 02:48:57 +0000 +++ b/mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result 2010-08-18 08:45:39 +0000 @@ -19,4 +19,3 @@ master-bin.000001 # Query # # use `test` master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS tmp1 LIKE tmp master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS tmp1 LIKE tmp master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS tmp2 SELECT * FROM tmp -master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE IF NOT EXISTS tmp2 SELECT * FROM tmp === modified file 'mysql-test/suite/rpl/t/rpl_create_if_not_exists.test' --- a/mysql-test/suite/rpl/t/rpl_create_if_not_exists.test 2010-01-16 07:44:24 +0000 +++ b/mysql-test/suite/rpl/t/rpl_create_if_not_exists.test 2010-08-18 08:45:39 +0000 @@ -120,4 +120,57 @@ DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; +--echo # WL#5370 +--echo # The behavior of statement 'CREATE TABLE SELECT IF NOT EXISTS' is changed. +--echo # After the worklog, it will insert nothing and the statement will not be +--echo # binlogged if the table already exists. +--echo # After the worklog, some bugs will disappear automotically. +source include/master-slave-reset.inc; + +--echo +--echo # Case 1: BUG#47132 +connection master; +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.*"); + +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int); +INSERT INTO t1 VALUES (1), (1); +INSERT INTO t2 VALUES (2), (2); + +CREATE VIEW v1 AS SELECT id FROM t2; +--let binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1) +CREATE TABLE IF NOT EXISTS v1(a int, b int) SELECT id, id FROM t1; +--source include/show_binlog_events.inc + +SHOW CREATE TABLE v1; +SELECT * FROM t2; +SELECT * FROM v1; +DROP VIEW v1; + +# the warning only happens on SBR, so we disable it. +--disable_warnings +CREATE TEMPORARY TABLE tt1 AS SELECT id FROM t2; +--enable_warnings + +--let binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1) +CREATE TEMPORARY TABLE IF NOT EXISTS tt1(a int, b int) SELECT id, id FROM t1; +--source include/show_binlog_events.inc +SELECT * FROM t2; +SELECT * FROM tt1; +DROP TEMPORARY TABLE tt1; + +--echo +--echo # Case 1: BUG#47132 +--echo # RBR breaks on CREATE TABLE IF EXISTS AS SELECT +CREATE VIEW v1 AS SELECT 1 as a; +--let binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1) +CREATE TABLE IF NOT EXISTS v1 SELECT 2 as a; +--source include/show_binlog_events.inc +sync_slave_with_master; + +connection master; +DROP VIEW v1; + +DROP TABLE t1, t2; + source include/master-slave-end.inc; === modified file 'mysql-test/t/auto_increment.test' --- a/mysql-test/t/auto_increment.test 2009-08-20 12:30:59 +0000 +++ b/mysql-test/t/auto_increment.test 2010-08-18 08:45:39 +0000 @@ -334,7 +334,7 @@ INSERT INTO t1 VALUES (1), (1); CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY ); --error ER_DUP_ENTRY -CREATE TABLE IF NOT EXISTS t2 AS SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; UPDATE t2 SET a = 2; === modified file 'mysql-test/t/create.test' --- a/mysql-test/t/create.test 2010-06-11 08:14:38 +0000 +++ b/mysql-test/t/create.test 2010-08-18 08:45:39 +0000 @@ -5,6 +5,7 @@ --disable_warnings drop table if exists t1,t2,t3,t4,t5; drop database if exists mysqltest; +drop view if exists v1; --enable_warnings create table t1 (b char(0)); @@ -232,7 +233,6 @@ drop table t1; create table t1 select 1,2,3; create table if not exists t1 select 1,2; ---error 1136 create table if not exists t1 select 1,2,3,4; create table if not exists t1 select 1; select * from t1; @@ -248,8 +248,6 @@ insert into t1 values (1,1); create table if not exists t1 select 2; select * from t1; create table if not exists t1 select 3 as 'a',4 as 'b'; ---error ER_DUP_ENTRY -create table if not exists t1 select 3 as 'a',3 as 'b'; show warnings; show status like "Opened_tables"; select * from t1; @@ -517,7 +515,7 @@ drop table t1,t2; # an improper fix is present. # create table t1 (a int); ---error 1093 +--error ER_TABLE_EXISTS_ERROR create table t1 select * from t1; --error ER_WRONG_OBJECT create table t2 union = (t1) select * from t1; @@ -730,7 +728,6 @@ create table t1 select coalesce('a' coll create table t1 (primary key(a)) select "b" as b; # Error in select_create::prepare() which is not related to table creation create table t1 (a int); ---error ER_WRONG_VALUE_COUNT_ON_ROW create table if not exists t1 select 1 as a, 2 as b; drop table t1; # Finally error which happens during insert @@ -742,20 +739,13 @@ create table t1 (i int); create table t1 select 1 as i; create table if not exists t1 select 1 as i; select * from t1; -# Error which is detected after successfull table open. ---error ER_UPDATE_TABLE_USED +# After WL#5370, it just generates a warning that the table already exists create table if not exists t1 select * from t1; select * from t1; +drop table t1; # Error before select_create::prepare() --error ER_CANT_AGGREGATE_2COLLATIONS create table t1 select coalesce('a' collate latin1_swedish_ci,'b' collate latin1_bin); -select * from t1; -# Error which happens during insertion of rows -alter table t1 add primary key (i); ---error ER_DUP_ENTRY -create table if not exists t1 (select 2 as i) union all (select 2 as i); -select * from t1; -drop table t1; # Base vs temporary tables dillema (a.k.a. bug#24508 "Inconsistent @@ -1229,11 +1219,9 @@ INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT a FROM t1; --error 1062 -CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) - SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; --error 1062 -CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) - SELECT a FROM t1; +INSERT INTO t2 SELECT a FROM t1; DROP TABLE t1, t2; @@ -1273,7 +1261,7 @@ CREATE TEMPORARY TABLE t2 (primary key ( drop table if exists t2; CREATE TABLE t2 (a int, b int, primary key (a)); --error ER_DUP_ENTRY -CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; +INSERT INTO t2 select * from t1; SELECT * from t2; TRUNCATE table t2; --error ER_DUP_ENTRY @@ -1283,11 +1271,7 @@ drop table t2; CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)); --error ER_DUP_ENTRY -CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1; -SELECT * from t2; -TRUNCATE table t2; ---error ER_DUP_ENTRY -INSERT INTO t2 select * from t1; +INSERT INTO t2 SELECT * FROM t1; SELECT * from t2; drop table t1,t2; @@ -1657,11 +1641,7 @@ END ; | --delimiter ; --error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG -CREATE TABLE IF NOT EXISTS t1 ( - `pk` INTEGER NOT NULL AUTO_INCREMENT , - `int` INTEGER , - PRIMARY KEY ( `pk` ) -) SELECT `pk` , `int_key` FROM B ; +INSERT INTO t1 (pk, int_key) SELECT `pk` , `int_key` FROM B ; --delimiter | --error ER_NOT_SUPPORTED_YET @@ -1675,7 +1655,6 @@ END ;| DROP TABLE t1; DROP TABLE B; - --echo # --echo # Bug #47107 assert in notify_shared_lock on incorrect --echo # CREATE TABLE , HANDLER @@ -1798,3 +1777,243 @@ show create table t1; show create table t2; set @@sql_mode= @old_mode; drop tables t1, t2; +# +# Bug#47132 CREATE TABLE.. SELECT.. data not inserted if table +# is view over multiple tables +# + +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int); +INSERT INTO t1 VALUES (1), (1); +INSERT INTO t2 VALUES (2), (2); + +CREATE VIEW v1 AS SELECT id FROM t2; +CREATE TABLE IF NOT EXISTS v1(a int, b int) SELECT id, id FROM t1; +SHOW CREATE TABLE v1; +SELECT * FROM t2; +SELECT * FROM v1; +DROP VIEW v1; + +CREATE TEMPORARY TABLE tt1 AS SELECT id FROM t2; +CREATE TEMPORARY TABLE IF NOT EXISTS tt1(a int, b int) SELECT id, id FROM t1; +SELECT * FROM t2; +SELECT * FROM tt1; +DROP TEMPORARY TABLE tt1; + +DROP TABLE t1, t2; + + +--echo # +--echo # WL#5370 "Changing 'CREATE TABLE IF NOT EXISTS ... SELECT' +--echo # behaviour. +--echo # + +--echo # +--echo # 1. Basic case: a base table. +--echo # + +create table if not exists t1 (a int) select 1 as a; +select * from t1; +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int) select 2 as a; +select * from t1; +--echo # Produces an essential warning ER_TABLE_EXISTS. +create table if not exists t1 (a int) select 2 as a; +--echo # No new data in t1. +select * from t1; +drop table t1; + +--echo # +--echo # 2. A temporary table. +--echo # + +create temporary table if not exists t1 (a int) select 1 as a; +select * from t1; +--error ER_TABLE_EXISTS_ERROR +create temporary table t1 (a int) select 2 as a; +select * from t1; +--echo # An essential warning. +create temporary table if not exists t1 (a int) select 2 as a; +--echo # No new data in t1. +select * from t1; +drop temporary table t1; + +--echo # +--echo # 3. Creating a base table in presence of a temporary table. +--echo # + +create table t1 (a int); +--echo # Create a view for convenience of querying t1 shadowed by a temp. +create view v1 as select a from t1; +drop table t1; +create temporary table t1 (a int) select 1 as a; +create table if not exists t1 (a int) select 2 as a; +select * from t1; +select * from v1; +--echo # Note: an essential warning. +create table if not exists t1 (a int) select 3 as a; +select * from t1; +select * from v1; +drop temporary table t1; +select * from t1; +drop view v1; +drop table t1; + +--echo # +--echo # 4. Creating a temporary table in presence of a base table. +--echo # + +create table t1 (a int) select 1 as a; +create temporary table if not exists t1 select 2 as a; +select * from t1; +--echo # Note: an essential warning. +create temporary table if not exists t1 select 3 as a; +select * from t1; +drop temporary table t1; +select * from t1; +drop table t1; + +--echo # +--echo # 5. Creating a base table in presence of an updatable view. +--echo # +create table t2 (a int unique); +create view t1 as select a from t2; +insert into t1 (a) values (1); +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int); +--echo # Note: an essential warning. +create table if not exists t1 (a int); +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int) select 2 as a; +select * from t1; +--echo # Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +select * from t1; +select * from t2; +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +select * from t2; +--echo # Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +select * from t1; +select * from t2; +drop temporary table t1; + +--echo # +--echo # Repeating the test with a non-updatable view. +--echo # +drop view t1; +create view t1 as select a + 5 as a from t2; +--error ER_NON_INSERTABLE_TABLE +insert into t1 (a) values (1); +--error ER_NONUPDATEABLE_COLUMN +update t1 set a=3 where a=2; + +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int); +--echo # Note: an essential warning. +create table if not exists t1 (a int); +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int) select 2 as a; +select * from t1; +--echo # Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +select * from t1; +select * from t2; +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +select * from t2; +--echo # Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +select * from t1; +select * from t2; +drop temporary table t1; +drop view t1; +drop table t2; + +--echo # +--echo # Repeating the test with a view select a constant number +--echo # +create view t1 as select 1 as a; +--error ER_NON_INSERTABLE_TABLE +insert into t1 (a) values (1); +--error ER_NON_UPDATABLE_TABLE +update t1 set a=3 where a=2; + +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int); +--echo # Note: an essential warning. +create table if not exists t1 (a int); +--error ER_TABLE_EXISTS_ERROR +create table t1 (a int) select 2 as a; +select * from t1; +--echo # Note: an essential warning. +create table if not exists t1 (a int) select 2 as a; +select * from t1; +create temporary table if not exists t1 (a int) select 3 as a; +select * from t1; +--echo # Note: an essential warning. +create temporary table if not exists t1 (a int) select 4 as a; +select * from t1; +drop temporary table t1; +drop view t1; + + +--echo # +--echo # 6. Test of unique_table(). +--echo # + +create table t1 (a int) select 1 as a; +create temporary table if not exists t1 (a int) select * from t1; +--error ER_CANT_REOPEN_TABLE +create temporary table if not exists t1 (a int) select * from t1; +select * from t1; +drop temporary table t1; +select * from t1; +drop table t1; +create temporary table t1 (a int) select 1 as a; +create table if not exists t1 (a int) select * from t1; +create table if not exists t1 (a int) select * from t1; +select * from t1; +drop temporary table t1; +select * from t1; +drop table t1; +--error ER_NO_SUCH_TABLE +create table if not exists t1 (a int) select * from t1; + +--echo # +--echo # 7. Test of non-matching columns, REPLACE and IGNORE. +--echo # + +create table t1 (a int) select 1 as b, 2 as c; +select * from t1; +drop table t1; +create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c; +select * from t1; +drop table t1; +set @@session.sql_mode='STRICT_ALL_TABLES'; +--error ER_TRUNCATED_WRONG_VALUE +create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c; +--error ER_NO_SUCH_TABLE +select * from t1; +--error ER_TRUNCATED_WRONG_VALUE +create table if not exists t1 (a int, b date, c date) + replace select 1 as b, 2 as c; +--error ER_NO_SUCH_TABLE +select * from t1; + +create table if not exists t1 (a int, b date, c date) + ignore select 1 as b, 2 as c; +select * from t1; +set @@session.sql_mode=default; +drop table t1; + +create table if not exists t1 (a int unique, b int) + replace select 1 as a, 1 as b union select 1 as a, 2 as b; +select * from t1; +drop table t1; +create table if not exists t1 (a int unique, b int) + ignore select 1 as a, 1 as b union select 1 as a, 2 as b; +select * from t1; +drop table t1; +--echo # === modified file 'mysql-test/t/merge.test' --- a/mysql-test/t/merge.test 2010-07-02 16:07:57 +0000 +++ b/mysql-test/t/merge.test 2010-08-18 08:45:39 +0000 @@ -579,7 +579,7 @@ DROP TABLE tm1, t1, t2; # CREATE TABLE t1(c1 INT); CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST; ---error ER_UPDATE_TABLE_USED +# After WL#5370, it just generates a warning that the table already exists CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2; DROP TABLE t1, t2; === modified file 'mysql-test/t/trigger.test' --- a/mysql-test/t/trigger.test 2010-08-05 12:53:09 +0000 +++ b/mysql-test/t/trigger.test 2010-08-18 08:45:39 +0000 @@ -1751,7 +1751,7 @@ create trigger t1_ai after insert on t1 create table t2 (j int); insert into t2 values (1), (2); set @a:=""; -create table if not exists t1 select * from t2; +insert into t1 select * from t2; select * from t1; select @a; # Let us check that trigger that involves table also works ok. @@ -1759,7 +1759,7 @@ drop trigger t1_bi; drop trigger t1_ai; create table t3 (isave int); create trigger t1_bi before insert on t1 for each row insert into t3 values (new.i); -create table if not exists t1 select * from t2; +insert into t1 select * from t2; select * from t1; select * from t3; drop table t1, t2, t3; @@ -1975,7 +1975,7 @@ select * from t1_op_log; truncate t1; truncate t1_op_log; -create table if not exists t1 +insert into t1 select NULL, "CREATE TABLE ... SELECT, inserting a new key"; set @id=last_insert_id(); @@ -1984,7 +1984,7 @@ select * from t1; select * from t1_op_log; truncate t1_op_log; -create table if not exists t1 replace +replace into t1 select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key"; select * from t1; @@ -2114,7 +2114,7 @@ select * from t1_op_log; truncate t1; truncate t1_op_log; -create table if not exists v1 +insert into v1 select NULL, "CREATE TABLE ... SELECT, inserting a new key"; set @id=last_insert_id(); @@ -2123,7 +2123,7 @@ select * from t1; select * from t1_op_log; truncate t1_op_log; -create table if not exists v1 replace +replace into v1 select @id, "CREATE TABLE ... REPLACE SELECT, deleting a duplicate key"; select * from t1; === modified file 'mysql-test/t/union.test' --- a/mysql-test/t/union.test 2010-01-19 16:36:14 +0000 +++ b/mysql-test/t/union.test 2010-08-18 08:45:39 +0000 @@ -253,7 +253,7 @@ SELECT * FROM t1 UNION SELECT * FROM t2 create temporary table t1 select a from t1 union select a from t2; drop temporary table t1; ---error 1093 +--error ER_TABLE_EXISTS_ERROR create table t1 select a from t1 union select a from t2; --error 1054 select a from t1 union select a from t2 order by t2.a; === modified file 'sql/handler.h' --- a/sql/handler.h 2010-07-27 14:32:42 +0000 +++ b/sql/handler.h 2010-08-18 08:45:39 +0000 @@ -1001,7 +1001,6 @@ typedef struct st_ha_create_information uint merge_insert_method; uint extra_size; /* length of extra data segment */ enum enum_ha_unused unused1; - bool table_existed; /* 1 in create if table existed */ bool frm_only; /* 1 if no ha_create_table() */ bool varchar; /* 1 if table has a VARCHAR */ enum ha_storage_media storage_media; /* DEFAULT, DISK or MEMORY */ === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2010-08-13 07:50:25 +0000 +++ b/sql/sql_base.cc 2010-08-18 08:45:39 +0000 @@ -2540,10 +2540,6 @@ open_table_get_mdl_lock(THD *thd, Open_t is never opened. In both cases, metadata locks are always taken according to the lock strategy. - If the lock strategy is OTLS_DOWNGRADE_IF_EXISTS and opening the table - is successful, the exclusive metadata lock acquired by the caller - is downgraded to a shared lock. - RETURN TRUE Open failed. "action" parameter may contain type of action needed to remedy problem before retrying again. @@ -2952,15 +2948,6 @@ bool open_table(THD *thd, TABLE_LIST *ta mysql_mutex_unlock(&LOCK_open); - /* - In CREATE TABLE .. If NOT EXISTS .. SELECT we have found that - table exists now we should downgrade our exclusive metadata - lock on this table to SW metadata lock. - */ - if (table_list->lock_strategy == TABLE_LIST::OTLS_DOWNGRADE_IF_EXISTS && - !(flags & MYSQL_OPEN_HAS_MDL_LOCK)) - mdl_ticket->downgrade_exclusive_lock(MDL_SHARED_WRITE); - table->mdl_ticket= mdl_ticket; table->next= thd->open_tables; /* Link into simple list */ === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2010-07-30 15:13:38 +0000 +++ b/sql/sql_insert.cc 2010-08-18 08:45:39 +0000 @@ -3578,17 +3578,6 @@ static TABLE *create_table_from_items(TH create_info, alter_info, 0, select_field_count)) { - if (create_info->table_existed) - { - /* - This means that someone created table underneath server - or it was created via different mysqld front-end to the - cluster. We don't have much options but throw an error. - */ - my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->table_name); - DBUG_RETURN(0); - } - DBUG_EXECUTE_IF("sleep_create_select_before_open", my_sleep(6000000);); if (!(create_info->options & HA_LEX_CREATE_TMP_TABLE)) @@ -3706,15 +3695,13 @@ select_create::prepare(List &value TABLE const *const table = *tables; if (thd->is_current_stmt_binlog_format_row() && - !table->s->tmp_table && - !ptr->get_create_info()->table_existed) + !table->s->tmp_table) { if (int error= ptr->binlog_show_create_table(tables, count)) return error; } return 0; } - select_create *ptr; TABLE_LIST *create_table; TABLE_LIST *select_tables; @@ -3737,34 +3724,15 @@ select_create::prepare(List &value thd->binlog_start_trans_and_stmt(); } + DBUG_ASSERT(create_table->table == NULL); + DBUG_EXECUTE_IF("sleep_create_select_before_check_if_exists", my_sleep(6000000);); - if (create_table->table) - { - /* Table already exists and was open at open_and_lock_tables() stage. */ - if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) - { - /* Mark that table existed */ - create_info->table_existed= 1; - push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, - ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR), - create_table->table_name); - if (thd->is_current_stmt_binlog_format_row()) - binlog_show_create_table(&(create_table->table), 1); - table= create_table->table; - } - else - { - my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->table_name); - DBUG_RETURN(-1); - } - } - else - if (!(table= create_table_from_items(thd, create_info, create_table, - alter_info, &values, - &extra_lock, hook_ptr))) - /* abort() deletes table */ - DBUG_RETURN(-1); + if (!(table= create_table_from_items(thd, create_info, create_table, + alter_info, &values, + &extra_lock, hook_ptr))) + /* abort() deletes table */ + DBUG_RETURN(-1); if (extra_lock) { @@ -3884,10 +3852,6 @@ void select_create::send_error(uint errc ("Current table (at 0x%lu) %s a temporary (or non-existant) table", (ulong) table, table && !table->s->tmp_table ? "is NOT" : "is")); - DBUG_PRINT("info", - ("Table %s prior to executing this statement", - get_create_info()->table_existed ? "existed" : "did not exist")); - /* This will execute any rollbacks that are necessary before writing the transcation cache. @@ -3976,8 +3940,7 @@ void select_create::abort_result_set() table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE); table->auto_increment_field_not_null= FALSE; - if (!create_info->table_existed) - drop_open_table(thd, table, create_table->db, create_table->table_name); + drop_open_table(thd, table, create_table->db, create_table->table_name); table=0; // Safety } DBUG_VOID_RETURN; === modified file 'sql/sql_parse.cc' --- a/sql/sql_parse.cc 2010-08-16 14:27:25 +0000 +++ b/sql/sql_parse.cc 2010-08-18 08:45:39 +0000 @@ -2590,13 +2590,7 @@ case SQLCOM_PREPARE: } #endif - /* Set strategies: reset default or 'prepared' values. */ - create_table->open_strategy= TABLE_LIST::OPEN_IF_EXISTS; - create_table->lock_strategy= TABLE_LIST::OTLS_DOWNGRADE_IF_EXISTS; - - /* - Close any open handlers for the table - */ + /* Close any open handlers for the table. */ mysql_ha_rm_tables(thd, create_table); if (select_lex->item_list.elements) // With select @@ -2656,44 +2650,25 @@ case SQLCOM_PREPARE: goto end_with_restore_list; } - if (!(create_info.options & HA_LEX_CREATE_TMP_TABLE)) - { - /* Base table and temporary table are not in the same name space. */ - create_table->open_type= OT_BASE_ONLY; - } - if (!(res= open_and_lock_tables(thd, lex->query_tables, TRUE, 0))) { - /* - Is table which we are changing used somewhere in other parts - of query - */ - if (!(create_info.options & HA_LEX_CREATE_TMP_TABLE)) + /* The table already exists */ + if (create_table->table) { - TABLE_LIST *duplicate; - if ((duplicate= unique_table(thd, create_table, select_tables, 0))) + if (create_info.options & HA_LEX_CREATE_IF_NOT_EXISTS) { - update_non_unique_table_error(create_table, "CREATE", duplicate); - res= 1; - goto end_with_restore_list; + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, + ER_TABLE_EXISTS_ERROR, + ER(ER_TABLE_EXISTS_ERROR), + create_info.alias); + my_ok(thd); } - } - /* If we create merge table, we have to test tables in merge, too */ - if (create_info.used_fields & HA_CREATE_USED_UNION) - { - TABLE_LIST *tab; - for (tab= create_info.merge_list.first; - tab; - tab= tab->next_local) + else { - TABLE_LIST *duplicate; - if ((duplicate= unique_table(thd, tab, select_tables, 0))) - { - update_non_unique_table_error(tab, "CREATE", duplicate); - res= 1; - goto end_with_restore_list; - } + my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_info.alias); + res= 1; } + goto end_with_restore_list; } /* @@ -2726,7 +2701,7 @@ case SQLCOM_PREPARE: res= handle_select(thd, lex, result, 0); delete result; } - + lex->link_first_table_back(create_table, link_to_local); } } @@ -7319,7 +7294,7 @@ void create_table_set_open_action_and_ad if (lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) create_table->open_type= OT_TEMPORARY_ONLY; - else if (!lex->select_lex.item_list.elements) + else create_table->open_type= OT_BASE_ONLY; if (!lex->select_lex.item_list.elements) === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2010-07-29 12:32:11 +0000 +++ b/sql/sql_prepare.cc 2010-08-18 08:45:39 +0000 @@ -1717,14 +1717,6 @@ static bool mysql_test_create_table(Prep if (create_table_precheck(thd, tables, create_table)) DBUG_RETURN(TRUE); - /* - The open and lock strategies will be set again once the - statement is executed. These values are only meaningful - for the prepare phase. - */ - create_table->open_strategy= TABLE_LIST::OPEN_IF_EXISTS; - create_table->lock_strategy= TABLE_LIST::OTLS_NONE; - if (select_lex->item_list.elements) { /* Base table and temporary table are not in the same name space. */ === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2010-08-16 12:58:38 +0000 +++ b/sql/sql_table.cc 2010-08-18 08:45:39 +0000 @@ -4038,7 +4038,6 @@ bool mysql_create_table_no_lock(THD *thd { if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) { - create_info->table_existed= 1; // Mark that table existed push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR), alias); @@ -4110,7 +4109,6 @@ bool mysql_create_table_no_lock(THD *thd } thd_proc_info(thd, "creating table"); - create_info->table_existed= 0; // Mark that table is created #ifdef HAVE_READLINK { @@ -4205,7 +4203,6 @@ warn: push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR), alias); - create_info->table_existed= 1; // Mark that table existed goto unlock_and_end; } @@ -4469,11 +4466,9 @@ bool mysql_create_like_table(THD* thd, T non-temporary table. */ DBUG_ASSERT((create_info->options & HA_LEX_CREATE_TMP_TABLE) || - local_create_info.table_existed || thd->mdl_context.is_lock_owner(MDL_key::TABLE, table->db, table->table_name, MDL_EXCLUSIVE)); - /* We have to write the query before we unlock the tables. */ === modified file 'sql/sql_view.cc' --- a/sql/sql_view.cc 2010-07-01 13:53:46 +0000 +++ b/sql/sql_view.cc 2010-08-18 08:45:39 +0000 @@ -433,8 +433,6 @@ bool mysql_create_view(THD *thd, TABLE_L goto err; lex->link_first_table_back(view, link_to_local); - view->open_strategy= TABLE_LIST::OPEN_STUB; - view->lock_strategy= TABLE_LIST::OTLS_NONE; view->open_type= OT_BASE_ONLY; if (open_and_lock_tables(thd, lex->query_tables, TRUE, 0)) === modified file 'sql/sql_yacc.yy' --- a/sql/sql_yacc.yy 2010-08-16 14:27:25 +0000 +++ b/sql/sql_yacc.yy 2010-08-18 08:45:39 +0000 @@ -2031,6 +2031,12 @@ create: TL_OPTION_UPDATING, TL_WRITE, MDL_EXCLUSIVE)) MYSQL_YYABORT; + /* + For CREATE TABLE, an non-existing table is not an error. + Instruct open_tables() to just take an MDL lock if the + table does not exist. + */ + lex->query_tables->open_strategy= TABLE_LIST::OPEN_IF_EXISTS; lex->alter_info.reset(); lex->col_list.empty(); lex->change=NullS; @@ -14035,6 +14041,7 @@ view_tail: TL_IGNORE, MDL_EXCLUSIVE)) MYSQL_YYABORT; + lex->query_tables->open_strategy= TABLE_LIST::OPEN_STUB; } view_list_opt AS view_select ; === modified file 'sql/table.h' --- a/sql/table.h 2010-08-13 07:50:25 +0000 +++ b/sql/table.h 2010-08-18 08:45:39 +0000 @@ -1587,23 +1587,6 @@ struct TABLE_LIST /* Don't associate a table share. */ OPEN_STUB } open_strategy; - /** - Indicates the locking strategy for the object being opened. - */ - enum - { - /* - Take metadata lock specified by 'mdl_request' member before - the object is opened. Do nothing after that. - */ - OTLS_NONE= 0, - /* - Take (exclusive) metadata lock specified by 'mdl_request' member - before object is opened. If opening is successful, downgrade to - a shared lock. - */ - OTLS_DOWNGRADE_IF_EXISTS - } lock_strategy; /* For transactional locking. */ int lock_timeout; /* NOWAIT or WAIT [X] */ bool lock_transactional; /* If transactional lock requested. */ --===============7427009417678159164== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/li-bing.song@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: li-bing.song@stripped # target_branch: file:///home/anders/work/bzrwork1/wt3/mysql-5.5-\ # bugfixing/ # testament_sha1: 42fc9bcf4e5c07755d668d2e2d787d63b2b92184 # timestamp: 2010-08-18 17:24:29 +0800 # source_branch: file:///home/anders/work/bzrwork1/wt3/mysql-5.1-\ # bugteam/ # base_revision_id: joerg@stripped # # Begin bundle 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 --===============7427009417678159164==--