From: Jon Olav Hauglid Date: August 18 2010 11:55am Subject: bzr commit into mysql-5.5-bugfixing branch (jon.hauglid:3112) List-Archive: http://lists.mysql.com/commits/116091 Message-Id: <201008181155.o7IAwJ8q001773@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3336138141806282857==" --===============3336138141806282857== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-test/ based on revid:jon.hauglid@stripped 3112 Jon Olav Hauglid 2010-08-18 [merge] Merge from mysql-5.5-bugfixing to mysql-5.5-runtime 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 09:35:41 +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 09:35:41 +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 09:35:41 +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-08-06 11:29:37 +0000 +++ b/mysql-test/include/mix1.inc 2010-08-18 11:55:37 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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-08-17 06:17:04 +0000 +++ b/mysql-test/suite/innodb/r/innodb_mysql.result 2010-08-18 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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 09:35:41 +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-08-09 18:33:47 +0000 +++ b/sql/handler.h 2010-08-18 11:55:37 +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-18 11:29:04 +0000 +++ b/sql/sql_base.cc 2010-08-18 11:55:37 +0000 @@ -2594,10 +2594,6 @@ tdc_wait_for_old_version(THD *thd, const 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. @@ -3041,15 +3037,6 @@ retry_share: 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-08-18 11:29:04 +0000 +++ b/sql/sql_insert.cc 2010-08-18 11:55:37 +0000 @@ -3581,17 +3581,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)) @@ -3707,15 +3696,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; @@ -3738,34 +3725,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) { @@ -3885,10 +3853,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. @@ -3977,8 +3941,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-18 11:29:04 +0000 +++ b/sql/sql_parse.cc 2010-08-18 11:55:37 +0000 @@ -2457,13 +2457,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 @@ -2523,44 +2517,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; } /* @@ -2593,7 +2568,7 @@ case SQLCOM_PREPARE: res= handle_select(thd, lex, result, 0); delete result; } - + lex->link_first_table_back(create_table, link_to_local); } } @@ -6938,7 +6913,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-08-04 08:18:32 +0000 +++ b/sql/sql_prepare.cc 2010-08-18 09:35:41 +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-18 11:29:04 +0000 +++ b/sql/sql_table.cc 2010-08-18 11:55:37 +0000 @@ -4031,7 +4031,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); @@ -4105,7 +4104,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 { @@ -4197,7 +4195,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 err; } @@ -4461,11 +4458,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-08-09 18:33:47 +0000 +++ b/sql/sql_view.cc 2010-08-18 11:55:37 +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-18 11:29:04 +0000 +++ b/sql/sql_yacc.yy 2010-08-18 11:55:37 +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; @@ -14034,6 +14040,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-18 11:29:04 +0000 +++ b/sql/table.h 2010-08-18 11:55:37 +0000 @@ -1634,23 +1634,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. */ --===============3336138141806282857== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-test/ # testament_sha1: e8d30358aa0cb6f7e50f2f63119dc196b02de4ba # timestamp: 2010-08-18 13:55:44 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # xgaorntdpgk9twld # # Begin bundle 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 --===============3336138141806282857==--