mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
bug#22027: CREATE TABLE IF NOT EXISTS SELECT logged improperly with rbr binlog,
and #22762: create talbe if not exists like a-temp-table binlogged w/o "if not exists" These are rbr bugs. store_create_info, which generates the create statement e.g for binlogging, did not account a lex option HA_LEX_CREATE_IF_NOT_EXISTS. The fix makes the generated query to include the parent's statement option if that was supplied.
This commit is contained in:

parent
a8c9d45dfc
commit
5962886dce
@ -59,4 +59,17 @@ insert into t1 values(null);
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
# bug#22027
|
||||||
|
create table t1 (a int);
|
||||||
|
create table if not exists t2 select * from t1;
|
||||||
|
|
||||||
|
# bug#22762
|
||||||
|
create temporary table tt1 (a int);
|
||||||
|
create table if not exists t3 like tt1;
|
||||||
|
|
||||||
|
--replace_column 2 # 5 #
|
||||||
|
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
|
||||||
|
show binlog events;
|
||||||
|
drop table t1,t2,t3,tt1;
|
||||||
|
|
||||||
-- source extra/binlog_tests/binlog_insert_delayed.test
|
-- source extra/binlog_tests/binlog_insert_delayed.test
|
||||||
|
@ -245,6 +245,25 @@ select * from t1;
|
|||||||
id
|
id
|
||||||
127
|
127
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
create table if not exists t2 select * from t1;
|
||||||
|
create temporary table tt1 (a int);
|
||||||
|
create table if not exists t3 like tt1;
|
||||||
|
show binlog events;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Format_desc 1 # Server ver: 5.1.12-beta-debug-log, Binlog ver: 4
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||||
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE IF NOT EXISTS `t2` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
)
|
||||||
|
drop table t1,t2,t3,tt1;
|
||||||
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
||||||
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||||
insert delayed into t1 values (207);
|
insert delayed into t1 values (207);
|
||||||
@ -256,6 +275,14 @@ master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_incre
|
|||||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE IF NOT EXISTS `t2` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; DROP TABLE `t1`,`t2`,`t3` /* generated by server */
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
@ -376,7 +376,7 @@ master-bin.000001 # Query 1 # use `test`; CREATE TABLE t2 (a int, b int, primary
|
|||||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query 1 # use `test`; BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test`; CREATE TABLE `t2` (
|
master-bin.000001 # Query 1 # use `test`; CREATE TABLE IF NOT EXISTS `t2` (
|
||||||
`a` int(11) NOT NULL DEFAULT '0',
|
`a` int(11) NOT NULL DEFAULT '0',
|
||||||
`b` int(11) DEFAULT NULL,
|
`b` int(11) DEFAULT NULL,
|
||||||
PRIMARY KEY (`a`)
|
PRIMARY KEY (`a`)
|
||||||
|
@ -155,6 +155,22 @@ select * from t1;
|
|||||||
id
|
id
|
||||||
127
|
127
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
create table if not exists t2 select * from t1;
|
||||||
|
create temporary table tt1 (a int);
|
||||||
|
create table if not exists t3 like tt1;
|
||||||
|
show binlog events;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Format_desc 1 # Server ver: 5.1.12-beta-debug-log, Binlog ver: 4
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||||
|
master-bin.000001 # Intvar 1 # INSERT_ID=127
|
||||||
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values(null)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table if not exists t2 select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create temporary table tt1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table if not exists t3 like tt1
|
||||||
|
drop table t1,t2,t3,tt1;
|
||||||
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
||||||
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||||
insert delayed into t1 values (207);
|
insert delayed into t1 values (207);
|
||||||
@ -166,6 +182,11 @@ master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_incre
|
|||||||
master-bin.000001 # Intvar 1 # INSERT_ID=127
|
master-bin.000001 # Intvar 1 # INSERT_ID=127
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(null)
|
master-bin.000001 # Query 1 # use `test`; insert into t1 values(null)
|
||||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table if not exists t2 select * from t1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create temporary table tt1 (a int)
|
||||||
|
master-bin.000001 # Query 1 # use `test`; create table if not exists t3 like tt1
|
||||||
|
master-bin.000001 # Query 1 # use `test`; drop table t1,t2,t3,tt1
|
||||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||||
|
@ -1042,6 +1042,9 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
|||||||
packet->append(STRING_WITH_LEN("CREATE TEMPORARY TABLE "));
|
packet->append(STRING_WITH_LEN("CREATE TEMPORARY TABLE "));
|
||||||
else
|
else
|
||||||
packet->append(STRING_WITH_LEN("CREATE TABLE "));
|
packet->append(STRING_WITH_LEN("CREATE TABLE "));
|
||||||
|
if (create_info_arg &&
|
||||||
|
(create_info_arg->options & HA_LEX_CREATE_IF_NOT_EXISTS))
|
||||||
|
packet->append(STRING_WITH_LEN("IF NOT EXISTS "));
|
||||||
if (table_list->schema_table)
|
if (table_list->schema_table)
|
||||||
alias= table_list->schema_table->table_name;
|
alias= table_list->schema_table->table_name;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user