Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.1-new-rpl
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test: Auto merged mysql-test/suite/ndb/r/ndb_dd_basic.result: Auto merged sql/field.cc: Auto merged sql/log_event.cc: Auto merged sql/log_event.h: Auto merged sql/rpl_record.cc: Auto merged sql/rpl_utility.cc: Auto merged sql/rpl_utility.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_update.cc: Auto merged sql/sql_yacc.yy: Auto merged
This commit is contained in:
commit
a99cad1a3d
@ -0,0 +1,234 @@
|
|||||||
|
# the file to be sourced from binlog.binlog_mix_innodb_myisam
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||||
|
# bug #28960 non-trans temp table changes with insert .. select
|
||||||
|
# not binlogged after rollback
|
||||||
|
#
|
||||||
|
# testing appearence of insert into temp_table in binlog.
|
||||||
|
# There are two branches of execution that require different setup.
|
||||||
|
|
||||||
|
# checking binlog content filled with row-based events due to
|
||||||
|
# a used stored function modifies non-transactional table
|
||||||
|
|
||||||
|
## send_eof() branch
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
|
||||||
|
create temporary table tt (a int unique);
|
||||||
|
create table ti (a int) engine=innodb;
|
||||||
|
reset master;
|
||||||
|
show master status;
|
||||||
|
|
||||||
|
# action
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into ti values (1);
|
||||||
|
insert into ti values (2) ;
|
||||||
|
insert into tt select * from ti;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
# check
|
||||||
|
|
||||||
|
select count(*) from tt /* 2 */;
|
||||||
|
show master status;
|
||||||
|
source include/show_binlog_events.inc;
|
||||||
|
select count(*) from ti /* zero */;
|
||||||
|
insert into ti select * from tt;
|
||||||
|
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||||
|
|
||||||
|
|
||||||
|
## send_error() branch
|
||||||
|
delete from ti;
|
||||||
|
delete from tt where a=1;
|
||||||
|
reset master;
|
||||||
|
show master status;
|
||||||
|
|
||||||
|
# action
|
||||||
|
|
||||||
|
begin;
|
||||||
|
insert into ti values (1);
|
||||||
|
insert into ti values (2) /* to make the dup error in the following */;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into tt select * from ti /* one affected and error */;
|
||||||
|
rollback;
|
||||||
|
|
||||||
|
# check
|
||||||
|
|
||||||
|
show master status;
|
||||||
|
source include/show_binlog_events.inc; # nothing in binlog with row bilog format
|
||||||
|
select count(*) from ti /* zero */;
|
||||||
|
insert into ti select * from tt;
|
||||||
|
select * from tt /* that is what otherwise slave missed - the bug */;
|
||||||
|
|
||||||
|
drop table ti;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||||
|
#
|
||||||
|
# Testing asserts: if there is a side effect of modifying non-transactional
|
||||||
|
# table thd->no_trans_update.stmt must be TRUE;
|
||||||
|
# the assert is active with debug build
|
||||||
|
#
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop function if exists bug27417;
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
--enable_warnings
|
||||||
|
# side effect table
|
||||||
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
|
# target tables
|
||||||
|
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
||||||
|
|
||||||
|
delimiter |;
|
||||||
|
create function bug27417(n int)
|
||||||
|
RETURNS int(11)
|
||||||
|
begin
|
||||||
|
insert into t1 values (null);
|
||||||
|
return n;
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
|
||||||
|
insert into t2 values (bug27417(1));
|
||||||
|
insert into t2 select bug27417(2);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t2 values (bug27417(2));
|
||||||
|
source include/show_binlog_events.inc; #only (!) with fixes for #23333 will show there is the query
|
||||||
|
select count(*) from t1 /* must be 3 */;
|
||||||
|
|
||||||
|
reset master;
|
||||||
|
select count(*) from t2;
|
||||||
|
delete from t2 where a=bug27417(3);
|
||||||
|
select count(*) from t2 /* nothing got deleted */;
|
||||||
|
source include/show_binlog_events.inc; # the query must be in regardless of #23333
|
||||||
|
select count(*) from t1 /* must be 5 */;
|
||||||
|
|
||||||
|
--enable_info
|
||||||
|
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
||||||
|
--disable_info
|
||||||
|
select count(*) from t1 /* must be 7 */;
|
||||||
|
|
||||||
|
# function bug27417 remains for the following testing of bug#23333
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#23333 using the patch (and the test) for bug#27471
|
||||||
|
# throughout the bug tests
|
||||||
|
# t1 - non-trans side effects gatherer;
|
||||||
|
# t2 - transactional table;
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# INSERT
|
||||||
|
#
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
|
||||||
|
insert into t2 values (1);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t2 values (bug27417(1));
|
||||||
|
|
||||||
|
# check
|
||||||
|
|
||||||
|
source include/show_binlog_events.inc; # must be event of the query
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
|
||||||
|
#
|
||||||
|
# INSERT SELECT
|
||||||
|
#
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
insert into t2 values (2);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into t2 select bug27417(1) union select bug27417(2);
|
||||||
|
|
||||||
|
# check
|
||||||
|
|
||||||
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
|
||||||
|
#
|
||||||
|
# UPDATE (multi-update see bug#27716)
|
||||||
|
#
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
delete from t1;
|
||||||
|
insert into t3 values (1,1),(2,3),(3,4);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
update t3 set b=b+bug27417(1);
|
||||||
|
|
||||||
|
# check
|
||||||
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# DELETE (for multi-delete see Bug #29136)
|
||||||
|
#
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
delete from t3;
|
||||||
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1,1);
|
||||||
|
create trigger trg_del before delete on t2 for each row
|
||||||
|
insert into t3 values (bug27417(1), 2);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
delete from t2;
|
||||||
|
# check
|
||||||
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LOAD DATA
|
||||||
|
#
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
delete from t1;
|
||||||
|
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||||
|
insert into t4 values (0, 17);
|
||||||
|
reset master;
|
||||||
|
|
||||||
|
# execute
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||||
|
# check
|
||||||
|
select * from t4;
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
source include/show_binlog_events.inc; # must be events of the query
|
||||||
|
|
||||||
|
#
|
||||||
|
# bug#23333 cleanup
|
||||||
|
#
|
||||||
|
drop trigger trg_del;
|
||||||
|
drop table t1,t2,t3,t4;
|
||||||
|
drop function bug27417;
|
@ -413,3 +413,189 @@ select
|
|||||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||||
1 1
|
1 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create temporary table tt (a int unique);
|
||||||
|
create table ti (a int) engine=innodb;
|
||||||
|
reset master;
|
||||||
|
show master status;
|
||||||
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
master-bin.000001 106
|
||||||
|
begin;
|
||||||
|
insert into ti values (1);
|
||||||
|
insert into ti values (2) ;
|
||||||
|
insert into tt select * from ti;
|
||||||
|
rollback;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
select count(*) from tt /* 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
show master status;
|
||||||
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
master-bin.000001 395
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.ti)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.ti)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from ti /* zero */;
|
||||||
|
count(*)
|
||||||
|
0
|
||||||
|
insert into ti select * from tt;
|
||||||
|
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
delete from ti;
|
||||||
|
delete from tt where a=1;
|
||||||
|
reset master;
|
||||||
|
show master status;
|
||||||
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
master-bin.000001 106
|
||||||
|
begin;
|
||||||
|
insert into ti values (1);
|
||||||
|
insert into ti values (2) /* to make the dup error in the following */;
|
||||||
|
insert into tt select * from ti /* one affected and error */;
|
||||||
|
ERROR 23000: Duplicate entry '2' for key 'a'
|
||||||
|
rollback;
|
||||||
|
show master status;
|
||||||
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
|
master-bin.000001 106
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
select count(*) from ti /* zero */;
|
||||||
|
count(*)
|
||||||
|
0
|
||||||
|
insert into ti select * from tt;
|
||||||
|
select * from tt /* that is what otherwise slave missed - the bug */;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
drop table ti;
|
||||||
|
drop function if exists bug27417;
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
||||||
|
create function bug27417(n int)
|
||||||
|
RETURNS int(11)
|
||||||
|
begin
|
||||||
|
insert into t1 values (null);
|
||||||
|
return n;
|
||||||
|
end|
|
||||||
|
reset master;
|
||||||
|
insert into t2 values (bug27417(1));
|
||||||
|
insert into t2 select bug27417(2);
|
||||||
|
reset master;
|
||||||
|
insert into t2 values (bug27417(2));
|
||||||
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
|
||||||
|
select count(*) from t1 /* must be 3 */;
|
||||||
|
count(*)
|
||||||
|
3
|
||||||
|
reset master;
|
||||||
|
select count(*) from t2;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
delete from t2 where a=bug27417(3);
|
||||||
|
select count(*) from t2 /* nothing got deleted */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
|
||||||
|
select count(*) from t1 /* must be 5 */;
|
||||||
|
count(*)
|
||||||
|
5
|
||||||
|
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
||||||
|
affected rows: 0
|
||||||
|
select count(*) from t1 /* must be 7 */;
|
||||||
|
count(*)
|
||||||
|
7
|
||||||
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
||||||
|
insert into t2 values (1);
|
||||||
|
reset master;
|
||||||
|
insert into t2 values (bug27417(1));
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
insert into t2 values (2);
|
||||||
|
reset master;
|
||||||
|
insert into t2 select bug27417(1) union select bug27417(2);
|
||||||
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
delete from t1;
|
||||||
|
insert into t3 values (1,1),(2,3),(3,4);
|
||||||
|
reset master;
|
||||||
|
update t3 set b=b+bug27417(1);
|
||||||
|
ERROR 23000: Duplicate entry '4' for key 'b'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
delete from t3;
|
||||||
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1,1);
|
||||||
|
create trigger trg_del before delete on t2 for each row
|
||||||
|
insert into t3 values (bug27417(1), 2);
|
||||||
|
reset master;
|
||||||
|
delete from t2;
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
|
master-bin.000001 # Query # # use `test`; delete from t2
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||||
|
insert into t4 values (0, 17);
|
||||||
|
reset master;
|
||||||
|
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||||
|
ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
|
||||||
|
select * from t4;
|
||||||
|
a b
|
||||||
|
0 17
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||||
|
master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||||
|
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=1
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
drop trigger trg_del;
|
||||||
|
drop table t1,t2,t3,t4;
|
||||||
|
drop function bug27417;
|
||||||
|
@ -380,7 +380,8 @@ select
|
|||||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||||
1 1
|
1 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
create table tt (a int unique);
|
set @@session.binlog_format=statement;
|
||||||
|
create temporary table tt (a int unique);
|
||||||
create table ti (a int) engine=innodb;
|
create table ti (a int) engine=innodb;
|
||||||
reset master;
|
reset master;
|
||||||
show master status;
|
show master status;
|
||||||
@ -399,18 +400,18 @@ count(*)
|
|||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 515
|
master-bin.000001 515
|
||||||
show binlog events from 106;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
|
master-bin.000001 # Query # # use `test`; insert into ti values (1)
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (2)
|
master-bin.000001 # Query # # use `test`; insert into ti values (2)
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti
|
master-bin.000001 # Query # # use `test`; insert into tt select * from ti
|
||||||
master-bin.000001 # Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from ti /* zero */;
|
select count(*) from ti /* zero */;
|
||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
insert into ti select * from tt;
|
insert into ti select * from tt;
|
||||||
select * from ti /* that is what slave would miss - a bug */;
|
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
@ -431,13 +432,13 @@ Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 589
|
master-bin.000001 589
|
||||||
show binlog events from 106;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
|
master-bin.000001 # Query # # use `test`; insert into ti values (1)
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (2) /* to make the dup error in the following */
|
master-bin.000001 # Query # # use `test`; insert into ti values (2) /* to make the dup error in the following */
|
||||||
master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti /* one affected and error */
|
master-bin.000001 # Query # # use `test`; insert into tt select * from ti /* one affected and error */
|
||||||
master-bin.000001 # Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
select count(*) from ti /* zero */;
|
select count(*) from ti /* zero */;
|
||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
@ -446,7 +447,7 @@ select * from tt /* that is what otherwise slave missed - the bug */;
|
|||||||
a
|
a
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
drop table ti,tt;
|
drop table ti;
|
||||||
drop function if exists bug27417;
|
drop function if exists bug27417;
|
||||||
drop table if exists t1,t2;
|
drop table if exists t1,t2;
|
||||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
@ -463,6 +464,10 @@ insert into t2 select bug27417(2);
|
|||||||
reset master;
|
reset master;
|
||||||
insert into t2 values (bug27417(2));
|
insert into t2 values (bug27417(2));
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
|
||||||
select count(*) from t1 /* must be 3 */;
|
select count(*) from t1 /* must be 3 */;
|
||||||
count(*)
|
count(*)
|
||||||
3
|
3
|
||||||
@ -474,6 +479,10 @@ delete from t2 where a=bug27417(3);
|
|||||||
select count(*) from t2 /* nothing got deleted */;
|
select count(*) from t2 /* nothing got deleted */;
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
|
||||||
select count(*) from t1 /* must be 5 */;
|
select count(*) from t1 /* must be 5 */;
|
||||||
count(*)
|
count(*)
|
||||||
5
|
5
|
||||||
@ -482,6 +491,87 @@ affected rows: 0
|
|||||||
select count(*) from t1 /* must be 7 */;
|
select count(*) from t1 /* must be 7 */;
|
||||||
count(*)
|
count(*)
|
||||||
7
|
7
|
||||||
drop function bug27417;
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique);
|
||||||
|
insert into t2 values (1);
|
||||||
|
reset master;
|
||||||
|
insert into t2 values (bug27417(1));
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
insert into t2 values (2);
|
||||||
|
reset master;
|
||||||
|
insert into t2 select bug27417(1) union select bug27417(2);
|
||||||
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||||
|
master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
delete from t1;
|
||||||
|
insert into t3 values (1,1),(2,3),(3,4);
|
||||||
|
reset master;
|
||||||
|
update t3 set b=b+bug27417(1);
|
||||||
|
ERROR 23000: Duplicate entry '4' for key 'b'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||||
|
master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
delete from t1;
|
||||||
|
delete from t2;
|
||||||
|
delete from t3;
|
||||||
|
insert into t2 values (1);
|
||||||
|
insert into t3 values (1,1);
|
||||||
|
create trigger trg_del before delete on t2 for each row
|
||||||
|
insert into t3 values (bug27417(1), 2);
|
||||||
|
reset master;
|
||||||
|
delete from t2;
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
|
master-bin.000001 # Query # # use `test`; delete from t2
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
select count(*) from t1 /* must be 1 */;
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
delete from t1;
|
||||||
|
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||||
|
insert into t4 values (0, 17);
|
||||||
|
reset master;
|
||||||
|
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||||
|
ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
|
||||||
|
select * from t4;
|
||||||
|
a b
|
||||||
|
0 17
|
||||||
|
select count(*) from t1 /* must be 2 */;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||||
|
master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12
|
||||||
|
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||||
|
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=1
|
||||||
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
|
drop trigger trg_del;
|
||||||
|
drop table t1,t2,t3,t4;
|
||||||
|
drop function bug27417;
|
||||||
|
set @@session.binlog_format=@@global.binlog_format;
|
||||||
end of tests
|
end of tests
|
||||||
|
@ -31,3 +31,5 @@ eval select
|
|||||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||||
@a not like "%#%error_code=%error_code=%";
|
@a not like "%#%error_code=%error_code=%";
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
|
||||||
|
@ -24,123 +24,9 @@ eval select
|
|||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
#
|
set @@session.binlog_format=statement;
|
||||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
|
||||||
# bug #28960 non-trans temp table changes with insert .. select
|
set @@session.binlog_format=@@global.binlog_format;
|
||||||
# not binlogged after rollback
|
|
||||||
#
|
|
||||||
# testing appearence of insert into temp_table in binlog.
|
|
||||||
# There are two branches of execution that require different setup.
|
|
||||||
|
|
||||||
## send_eof() branch
|
|
||||||
|
|
||||||
# prepare
|
|
||||||
|
|
||||||
create table tt (a int unique);
|
|
||||||
create table ti (a int) engine=innodb;
|
|
||||||
reset master;
|
|
||||||
show master status;
|
|
||||||
|
|
||||||
# action
|
|
||||||
|
|
||||||
begin;
|
|
||||||
insert into ti values (1);
|
|
||||||
insert into ti values (2) ;
|
|
||||||
insert into tt select * from ti;
|
|
||||||
rollback;
|
|
||||||
|
|
||||||
# check
|
|
||||||
|
|
||||||
select count(*) from tt /* 2 */;
|
|
||||||
show master status;
|
|
||||||
--replace_column 2 # 5 #
|
|
||||||
show binlog events from 106;
|
|
||||||
select count(*) from ti /* zero */;
|
|
||||||
insert into ti select * from tt;
|
|
||||||
select * from ti /* that is what slave would miss - a bug */;
|
|
||||||
|
|
||||||
|
|
||||||
## send_error() branch
|
|
||||||
delete from ti;
|
|
||||||
delete from tt where a=1;
|
|
||||||
reset master;
|
|
||||||
show master status;
|
|
||||||
|
|
||||||
# action
|
|
||||||
|
|
||||||
begin;
|
|
||||||
insert into ti values (1);
|
|
||||||
insert into ti values (2) /* to make the dup error in the following */;
|
|
||||||
--error ER_DUP_ENTRY
|
|
||||||
insert into tt select * from ti /* one affected and error */;
|
|
||||||
rollback;
|
|
||||||
|
|
||||||
# check
|
|
||||||
|
|
||||||
show master status;
|
|
||||||
--replace_column 2 # 5 #
|
|
||||||
show binlog events from 106;
|
|
||||||
select count(*) from ti /* zero */;
|
|
||||||
insert into ti select * from tt;
|
|
||||||
select * from tt /* that is what otherwise slave missed - the bug */;
|
|
||||||
|
|
||||||
drop table ti,tt;
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
|
||||||
#
|
|
||||||
# Testing asserts: if there is a side effect of modifying non-transactional
|
|
||||||
# table thd->no_trans_update.stmt must be TRUE;
|
|
||||||
# the assert is active with debug build
|
|
||||||
#
|
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
drop function if exists bug27417;
|
|
||||||
drop table if exists t1,t2;
|
|
||||||
--enable_warnings
|
|
||||||
# side effect table
|
|
||||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
|
||||||
# target tables
|
|
||||||
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
|
||||||
|
|
||||||
delimiter |;
|
|
||||||
create function bug27417(n int)
|
|
||||||
RETURNS int(11)
|
|
||||||
begin
|
|
||||||
insert into t1 values (null);
|
|
||||||
return n;
|
|
||||||
end|
|
|
||||||
delimiter ;|
|
|
||||||
|
|
||||||
reset master;
|
|
||||||
|
|
||||||
# execute
|
|
||||||
|
|
||||||
insert into t2 values (bug27417(1));
|
|
||||||
insert into t2 select bug27417(2);
|
|
||||||
reset master;
|
|
||||||
|
|
||||||
--error ER_DUP_ENTRY
|
|
||||||
insert into t2 values (bug27417(2));
|
|
||||||
#TODO: Andrei: enable this test after 23333 is pushed
|
|
||||||
#show master status; /* only (!) with fixes for #23333 will show there is the query */;
|
|
||||||
select count(*) from t1 /* must be 3 */;
|
|
||||||
|
|
||||||
reset master;
|
|
||||||
select count(*) from t2;
|
|
||||||
delete from t2 where a=bug27417(3);
|
|
||||||
select count(*) from t2 /* nothing got deleted */;
|
|
||||||
#TODO: Andrei: enable this test after 23333 is pushed
|
|
||||||
#show master status; /* the query must be in regardless of #23333 */;
|
|
||||||
select count(*) from t1 /* must be 5 */;
|
|
||||||
|
|
||||||
--enable_info
|
|
||||||
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
|
||||||
--disable_info
|
|
||||||
select count(*) from t1 /* must be 7 */;
|
|
||||||
|
|
||||||
drop function bug27417;
|
|
||||||
drop table t1,t2;
|
|
||||||
|
|
||||||
--echo end of tests
|
--echo end of tests
|
||||||
|
64
mysql-test/suite/rpl/r/rpl_bug31076.result
Normal file
64
mysql-test/suite/rpl/r/rpl_bug31076.result
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
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;
|
||||||
|
CREATE DATABASE track;
|
||||||
|
USE track;
|
||||||
|
CREATE TABLE `visits` (
|
||||||
|
`visits_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`myid` varchar(32) NOT NULL DEFAULT '',
|
||||||
|
`src` varchar(64) NOT NULL DEFAULT '',
|
||||||
|
`ip` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`cc` char(2) NOT NULL DEFAULT '',
|
||||||
|
`org` varchar(80) DEFAULT NULL,
|
||||||
|
`ref` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`host` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`entry` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`visit_exit` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`user_id` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`visit_start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`visits_id`),
|
||||||
|
KEY `ip` (`ip`),
|
||||||
|
KEY `time` (`time`),
|
||||||
|
KEY `user_id` (`user_id`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=21293381 DEFAULT CHARSET=latin1;
|
||||||
|
CREATE TABLE `visits_events` (
|
||||||
|
`event_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`visit_id` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`src` varchar(64) NOT NULL DEFAULT '',
|
||||||
|
`data` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`visits_events_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`visits_events_id`),
|
||||||
|
KEY `event_id` (`event_id`),
|
||||||
|
KEY `visit_id` (`visit_id`),
|
||||||
|
KEY `data` (`data`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=33900731 DEFAULT CHARSET=latin1;
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
BINLOG '
|
||||||
|
Bk3vRhO0AQAAOAAAALcLyQkAAJlXFwIAAAAABXRyYWNrAA12aXNpdHNfZXZlbnRzAAYJAwcPDwM=
|
||||||
|
Bk3vRhe0AQAAWgAAABEMyQkQAJlXFwIAAAEABv/AIE4AvvVDAQZN70YAK0Rvd25sb2Fkcy9NeVNR
|
||||||
|
TC00LjEvbXlzcWwtNC4xLjEyYS13aW4zMi56aXBPaAIC
|
||||||
|
'/*!*/;
|
||||||
|
SET INSERT_ID=21231039/*!*/;
|
||||||
|
use track/*!*/;
|
||||||
|
SET TIMESTAMP=1190087942/*!*/;
|
||||||
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
|
SET @@session.sql_mode=0/*!*/;
|
||||||
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
SET @@session.time_zone='UTC'/*!*/;
|
||||||
|
INSERT INTO visits (myid, user_id, src, ip, cc, org, ref, time, host, entry, visit_exit, visit_start)
|
||||||
|
VALUES ('3m3l4rhs6do0sf5p1i9lr94g928a272v', '', '', INET_ATON('71.118.124.98'), '', '', 'http://dev.mysql.com/downloads/connector/j/3.0.html', NULL, 'dev.mysql.com', '/get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick', '/get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick', NOW())/*!*/;
|
||||||
|
Warnings:
|
||||||
|
Warning 1366 Incorrect integer value: '' for column 'user_id' at row 1
|
||||||
|
SELECT * FROM visits;
|
||||||
|
visits_id myid src ip cc org ref time host entry visit_exit user_id visit_start
|
||||||
|
21231039 3m3l4rhs6do0sf5p1i9lr94g928a272v 1198947426 http://dev.mysql.com/downloads/connector/j/3.0.html 2007-09-18 03:59:02 dev.mysql.com /get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick /get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick 0 2007-09-18 03:59:02
|
||||||
|
SELECT * FROM visits_events;
|
||||||
|
event_id visit_id timestamp src data visits_events_id
|
||||||
|
20000 21231038 2007-09-18 03:59:02 Downloads/MySQL-4.1/mysql-4.1.12a-win32.zip 33712207
|
||||||
|
DROP DATABASE track;
|
@ -17,13 +17,13 @@ DROP EVENT IF EXISTS e11;
|
|||||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=myisam;
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=myisam;
|
||||||
INSERT INTO t1 VALUES (1,1,'1');
|
INSERT INTO t1 VALUES (1,1,'1');
|
||||||
INSERT INTO t1 VALUES (2,2,UUID());
|
INSERT INTO t1 VALUES (2,2,UUID());
|
||||||
CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=myisam;
|
CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=myisam;
|
||||||
INSERT INTO t2 VALUES (1,1,'1');
|
INSERT INTO t2 VALUES (1,1,'1');
|
||||||
INSERT INTO t2 VALUES (2,2,UUID());
|
INSERT INTO t2 VALUES (2,2,UUID());
|
||||||
CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=innodb;
|
CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=innodb;
|
||||||
INSERT INTO t11 VALUES (1,1,'1');
|
INSERT INTO t11 VALUES (1,1,'1');
|
||||||
INSERT INTO t11 VALUES (2,2,UUID());
|
INSERT INTO t11 VALUES (2,2,UUID());
|
||||||
CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=innodb;
|
CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=innodb;
|
||||||
INSERT INTO t12 VALUES (1,1,'1');
|
INSERT INTO t12 VALUES (1,1,'1');
|
||||||
INSERT INTO t12 VALUES (2,2,UUID());
|
INSERT INTO t12 VALUES (2,2,UUID());
|
||||||
|
|
||||||
@ -49,21 +49,15 @@ BEGIN
|
|||||||
UPDATE t12 SET c = '';
|
UPDATE t12 SET c = '';
|
||||||
UPDATE t13 SET c = '';
|
UPDATE t13 SET c = '';
|
||||||
END|
|
END|
|
||||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE c INT;
|
ALTER EVENT e1 DISABLE;
|
||||||
SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
|
||||||
IF c = 7 THEN
|
|
||||||
CALL p1(10, '');
|
CALL p1(10, '');
|
||||||
END IF;
|
|
||||||
END|
|
END|
|
||||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE c INT;
|
ALTER EVENT e11 DISABLE;
|
||||||
SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
|
||||||
IF c = 7 THEN
|
|
||||||
CALL p11(10, '');
|
CALL p11(10, '');
|
||||||
END IF;
|
|
||||||
END|
|
END|
|
||||||
CREATE FUNCTION f1 (x INT) RETURNS VARCHAR(64)
|
CREATE FUNCTION f1 (x INT) RETURNS VARCHAR(64)
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -78,11 +72,11 @@ RETURN f1(x);
|
|||||||
END|
|
END|
|
||||||
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t1 VALUES (x,x,y);
|
INSERT IGNORE INTO t1 VALUES (x,x,y);
|
||||||
END|
|
END|
|
||||||
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t11 VALUES (x,x,y);
|
INSERT IGNORE INTO t11 VALUES (x,x,y);
|
||||||
END|
|
END|
|
||||||
|
|
||||||
CREATE TABLE t3 SELECT * FROM v1;
|
CREATE TABLE t3 SELECT * FROM v1;
|
||||||
@ -110,6 +104,8 @@ INSERT INTO t11 VALUES(7,7,f2(7));
|
|||||||
INSERT INTO t11 VALUES (103,103,'');
|
INSERT INTO t11 VALUES (103,103,'');
|
||||||
|
|
||||||
SET GLOBAL EVENT_SCHEDULER = on;
|
SET GLOBAL EVENT_SCHEDULER = on;
|
||||||
|
ALTER EVENT e1 ENABLE;
|
||||||
|
ALTER EVENT e11 ENABLE;
|
||||||
SET GLOBAL EVENT_SCHEDULER = off;
|
SET GLOBAL EVENT_SCHEDULER = off;
|
||||||
|
|
||||||
SHOW TABLES LIKE 't%';
|
SHOW TABLES LIKE 't%';
|
||||||
@ -138,8 +134,8 @@ PROCEDURE p1
|
|||||||
PROCEDURE p11
|
PROCEDURE p11
|
||||||
SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
|
SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
|
||||||
event_name status
|
event_name status
|
||||||
e1 ENABLED
|
e1 DISABLED
|
||||||
e11 ENABLED
|
e11 DISABLED
|
||||||
|
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
@ -438,6 +434,8 @@ UPDATE t3 SET c='';
|
|||||||
UPDATE t11 SET c='';
|
UPDATE t11 SET c='';
|
||||||
UPDATE t12 SET c='';
|
UPDATE t12 SET c='';
|
||||||
UPDATE t13 SET c='';
|
UPDATE t13 SET c='';
|
||||||
|
ALTER TABLE t3 ORDER BY a;
|
||||||
|
ALTER TABLE t13 ORDER BY a;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +27,42 @@ STOP SLAVE;
|
|||||||
START SLAVE;
|
START SLAVE;
|
||||||
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||||
SHOW STATUS LIKE 'Slave_running';
|
show slave status;
|
||||||
Variable_name Value
|
Slave_IO_State #
|
||||||
Slave_running OFF
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_MYPORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos #
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running No
|
||||||
|
Slave_SQL_Running #
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos #
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
|
Master_SSL_Verify_Server_Cert No
|
||||||
|
Last_IO_Errno 0
|
||||||
|
Last_IO_Error
|
||||||
|
Last_SQL_Errno 0
|
||||||
|
Last_SQL_Error
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master
|
rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master
|
||||||
rpl_invoked_features : BUG#29020 2007-06-21 Lars Non-deterministic test case
|
|
||||||
rpl_auto_increment_11932 : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings file
|
rpl_auto_increment_11932 : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings file
|
||||||
rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported.
|
rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported.
|
||||||
rpl_row_extraColmaster_ndb : BUG#29549 : Replication of BLOBs fail for NDB
|
rpl_row_extraColmaster_ndb : BUG#29549 : Replication of BLOBs fail for NDB
|
||||||
|
116
mysql-test/suite/rpl/t/rpl_bug31076.test
Normal file
116
mysql-test/suite/rpl/t/rpl_bug31076.test
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
CREATE DATABASE track;
|
||||||
|
USE track;
|
||||||
|
|
||||||
|
CREATE TABLE `visits` (
|
||||||
|
`visits_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`myid` varchar(32) NOT NULL DEFAULT '',
|
||||||
|
`src` varchar(64) NOT NULL DEFAULT '',
|
||||||
|
`ip` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`cc` char(2) NOT NULL DEFAULT '',
|
||||||
|
`org` varchar(80) DEFAULT NULL,
|
||||||
|
`ref` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`host` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`entry` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`visit_exit` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`user_id` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`visit_start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`visits_id`),
|
||||||
|
KEY `ip` (`ip`),
|
||||||
|
KEY `time` (`time`),
|
||||||
|
KEY `user_id` (`user_id`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=21293381 DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
CREATE TABLE `visits_events` (
|
||||||
|
`event_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`visit_id` int(11) unsigned NOT NULL DEFAULT '0',
|
||||||
|
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`src` varchar(64) NOT NULL DEFAULT '',
|
||||||
|
`data` varchar(255) NOT NULL DEFAULT '',
|
||||||
|
`visits_events_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`visits_events_id`),
|
||||||
|
KEY `event_id` (`event_id`),
|
||||||
|
KEY `visit_id` (`visit_id`),
|
||||||
|
KEY `data` (`data`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=33900731 DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||||
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||||
|
--delimiter /*!*/;
|
||||||
|
# at 164170623
|
||||||
|
# at 164170679
|
||||||
|
#7918 3:59:2 server id 436 end_log_pos 164170679
|
||||||
|
# 9c90b7f 06 4d ef 46 13 b4 01 00 00 38 00 00 00 b7 0b c9 |.M.F.....8......|
|
||||||
|
# 9c90b8f 09 00 00 99 57 17 02 00 00 00 00 05 74 72 61 63 |....W.......trac|
|
||||||
|
# 9c90b9f 6b 00 0d 76 69 |k..vi|
|
||||||
|
# Table_map: `track`.`visits_events` mapped to number 35084185
|
||||||
|
#7918 3:59:2 server id 436 end_log_pos 164170769
|
||||||
|
# 9c90bb7 06 4d ef 46 17 b4 01 00 00 5a 00 00 00 11 0c c9 |.M.F.....Z......|
|
||||||
|
# 9c90bc7 09 10 00 99 57 17 02 00 00 01 00 06 ff c0 20 4e |....W..........N|
|
||||||
|
# 9c90bd7 00 be f5 43 01 06 4d ef 46 00 2b 44 6f 77 6e 6c |...C..M.F..Downl|
|
||||||
|
# 9c90be7 6f 61 64 73 2f 4d 79 53 51 4c 2d 34 2e 31 2f 6d |oads.MySQL.4.1.m|
|
||||||
|
# 9c90bf7 79 73 71 6c 2d 34 2e |ysql.4.|
|
||||||
|
# Write_rows: table id 35084185 flags: STMT_END_F
|
||||||
|
|
||||||
|
BINLOG '
|
||||||
|
Bk3vRhO0AQAAOAAAALcLyQkAAJlXFwIAAAAABXRyYWNrAA12aXNpdHNfZXZlbnRzAAYJAwcPDwM=
|
||||||
|
Bk3vRhe0AQAAWgAAABEMyQkQAJlXFwIAAAEABv/AIE4AvvVDAQZN70YAK0Rvd25sb2Fkcy9NeVNR
|
||||||
|
TC00LjEvbXlzcWwtNC4xLjEyYS13aW4zMi56aXBPaAIC
|
||||||
|
'/*!*/;
|
||||||
|
# at 164170769
|
||||||
|
#7918 3:59:2 server id 436 end_log_pos 164170797
|
||||||
|
# 9c90c11 06 4d ef 46 05 b4 01 00 00 |.M.F.....|
|
||||||
|
# Intvar
|
||||||
|
SET INSERT_ID=21231039/*!*/;
|
||||||
|
# at 164170797
|
||||||
|
#7918 3:59:2 server id 436 end_log_pos 164171293
|
||||||
|
# 9c90c2d 06 4d ef 46 02 b4 01 00 00 f0 01 00 00 1d 0e c9 |.M.F............|
|
||||||
|
# 9c90c3d 09 10 00 28 80 af 01 00 00 00 00 05 00 00 1f 00 |................|
|
||||||
|
# 9c90c4d 00 00 40 00 00 01 00 00 00 00 00 00 00 00 06 03 |................|
|
||||||
|
# 9c90c5d 73 74 64 04 08 00 08 00 08 00 05 03 55 54 43 74 |std.........UTCt|
|
||||||
|
# 9c90c6d 72 61 63 6b 00 49 4e 53 45 52 54 20 49 4e 54 4f |rack.INSERT.INTO|
|
||||||
|
# 9c90c7d 20 76 69 73 69 74 73 20 28 6d 79 69 64 2c 20 75 |.visits..myid..u|
|
||||||
|
# 9c90c8d 73 65 72 5f 69 64 2c 20 73 72 63 2c 20 69 70 2c |ser.id..src..ip.|
|
||||||
|
# 9c90c9d 20 63 63 2c 20 6f 72 67 2c 20 72 65 66 2c 20 74 |.cc..org..ref..t|
|
||||||
|
# 9c90cad 69 6d 65 2c 20 68 6f 73 74 2c 20 65 6e 74 72 79 |ime..host..entry|
|
||||||
|
# 9c90cbd 2c 20 76 69 73 69 74 5f 65 78 69 74 2c 20 76 69 |..visit.exit..vi|
|
||||||
|
# 9c90ccd 73 69 74 5f 73 74 61 72 74 29 0a 09 09 09 56 41 |sit.start.....VA|
|
||||||
|
# 9c90cdd 4c 55 45 53 20 28 27 33 6d 33 6c 34 72 68 73 36 |LUES...3m3l4rhs6|
|
||||||
|
# 9c90ced 64 6f 30 73 66 35 70 31 69 39 6c 72 39 34 67 39 |do0sf5p1i9lr94g9|
|
||||||
|
# 9c90cfd 32 38 61 32 37 32 76 27 2c 20 27 27 2c 20 27 27 |28a272v.........|
|
||||||
|
# 9c90d0d 2c 20 49 4e 45 54 5f 41 54 4f 4e 28 27 37 31 2e |..INET.ATON..71.|
|
||||||
|
# 9c90d1d 31 31 38 2e 31 32 34 2e 39 38 27 29 2c 20 27 27 |118.124.98......|
|
||||||
|
# 9c90d2d 2c 20 27 27 2c 20 27 68 74 74 70 3a 2f 2f 64 65 |.......http...de|
|
||||||
|
# 9c90d3d 76 2e 6d 79 73 71 6c 2e 63 6f 6d 2f 64 6f 77 6e |v.mysql.com.down|
|
||||||
|
# 9c90d4d 6c 6f 61 64 73 2f 63 6f 6e 6e 65 63 74 6f 72 2f |loads.connector.|
|
||||||
|
# 9c90d5d 6a 2f 33 2e 30 2e 68 74 6d 6c 27 2c 20 4e 55 4c |j.3.0.html...NUL|
|
||||||
|
# 9c90d6d 4c 2c 20 27 64 65 76 2e 6d 79 73 71 6c 2e 63 6f |L...dev.mysql.co|
|
||||||
|
# 9c90d7d 6d 27 2c 20 27 2f 67 65 74 2f 44 6f 77 6e 6c 6f |m.....get.Downlo|
|
||||||
|
# 9c90d8d 61 64 73 2f 43 6f 6e 6e 65 63 74 6f 72 2d 4a 2f |ads.Connector.J.|
|
||||||
|
# 9c90d9d 6d 79 73 71 6c 2d 63 6f 6e 6e 65 63 74 6f 72 2d |mysql.connector.|
|
||||||
|
# 9c90dad 6a 61 76 61 2d 33 2e 30 2e 31 37 2d 67 61 2e 7a |java.3.0.17.ga.z|
|
||||||
|
# 9c90dbd 69 70 2f 66 72 6f 6d 2f 70 69 63 6b 27 2c 20 27 |ip.from.pick....|
|
||||||
|
# 9c90dcd 2f 67 65 74 2f 44 6f 77 6e 6c 6f 61 64 73 2f 43 |.get.Downloads.C|
|
||||||
|
# 9c90ddd 6f 6e 6e 65 63 74 6f 72 2d 4a 2f 6d 79 73 71 6c |onnector.J.mysql|
|
||||||
|
# 9c90ded 2d 63 6f 6e 6e 65 63 74 6f 72 2d 6a 61 76 61 2d |.connector.java.|
|
||||||
|
# 9c90dfd 33 2e 30 2e 31 37 2d 67 61 2e 7a 69 70 |3.0.17.ga.zip|
|
||||||
|
# Query thread_id=28278824 exec_time=0 error_code=0
|
||||||
|
use track/*!*/;
|
||||||
|
SET TIMESTAMP=1190087942/*!*/;
|
||||||
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||||
|
SET @@session.sql_mode=0/*!*/;
|
||||||
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||||
|
SET @@session.time_zone='UTC'/*!*/;
|
||||||
|
INSERT INTO visits (myid, user_id, src, ip, cc, org, ref, time, host, entry, visit_exit, visit_start)
|
||||||
|
VALUES ('3m3l4rhs6do0sf5p1i9lr94g928a272v', '', '', INET_ATON('71.118.124.98'), '', '', 'http://dev.mysql.com/downloads/connector/j/3.0.html', NULL, 'dev.mysql.com', '/get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick', '/get/Downloads/Connector-J/mysql-connector-java-3.0.17-ga.zip/from/pick', NOW())/*!*/;
|
||||||
|
# at 164171293
|
||||||
|
|
||||||
|
--delimiter ;
|
||||||
|
|
||||||
|
SELECT * FROM visits;
|
||||||
|
SELECT * FROM visits_events;
|
||||||
|
|
||||||
|
DROP DATABASE track;
|
||||||
|
sync_slave_with_master;
|
@ -8,10 +8,9 @@
|
|||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
# --disable_warnings/--enable_warnings added before/after query
|
||||||
#
|
# if one uses UUID() function because we need to avoid warnings
|
||||||
# Define variables used by test case
|
# for STATEMENT binlog format
|
||||||
#
|
|
||||||
|
|
||||||
# Non-transactional engine
|
# Non-transactional engine
|
||||||
--let $engine_type= myisam
|
--let $engine_type= myisam
|
||||||
@ -45,20 +44,24 @@ DROP EVENT IF EXISTS e11;
|
|||||||
|
|
||||||
--echo
|
--echo
|
||||||
eval CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
eval CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
||||||
--disable_warnings
|
|
||||||
INSERT INTO t1 VALUES (1,1,'1');
|
INSERT INTO t1 VALUES (1,1,'1');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t1 VALUES (2,2,UUID());
|
INSERT INTO t1 VALUES (2,2,UUID());
|
||||||
eval CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
--enable_warnings
|
||||||
|
eval CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
||||||
INSERT INTO t2 VALUES (1,1,'1');
|
INSERT INTO t2 VALUES (1,1,'1');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t2 VALUES (2,2,UUID());
|
INSERT INTO t2 VALUES (2,2,UUID());
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
eval CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
eval CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
||||||
--disable_warnings
|
|
||||||
INSERT INTO t11 VALUES (1,1,'1');
|
INSERT INTO t11 VALUES (1,1,'1');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t11 VALUES (2,2,UUID());
|
INSERT INTO t11 VALUES (2,2,UUID());
|
||||||
eval CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
--enable_warnings
|
||||||
|
eval CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
||||||
INSERT INTO t12 VALUES (1,1,'1');
|
INSERT INTO t12 VALUES (1,1,'1');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t12 VALUES (2,2,UUID());
|
INSERT INTO t12 VALUES (2,2,UUID());
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
@ -96,22 +99,16 @@ BEGIN
|
|||||||
END|
|
END|
|
||||||
|
|
||||||
# Create events which will run every 1 sec
|
# Create events which will run every 1 sec
|
||||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE c INT;
|
ALTER EVENT e1 DISABLE;
|
||||||
SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
|
||||||
IF c = 7 THEN
|
|
||||||
CALL p1(10, '');
|
CALL p1(10, '');
|
||||||
END IF;
|
|
||||||
END|
|
END|
|
||||||
|
|
||||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE c INT;
|
ALTER EVENT e11 DISABLE;
|
||||||
SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
|
||||||
IF c = 7 THEN
|
|
||||||
CALL p11(10, '');
|
CALL p11(10, '');
|
||||||
END IF;
|
|
||||||
END|
|
END|
|
||||||
|
|
||||||
# Create functions and procedures used for events
|
# Create functions and procedures used for events
|
||||||
@ -130,12 +127,12 @@ END|
|
|||||||
|
|
||||||
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t1 VALUES (x,x,y);
|
INSERT IGNORE INTO t1 VALUES (x,x,y);
|
||||||
END|
|
END|
|
||||||
|
|
||||||
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t11 VALUES (x,x,y);
|
INSERT IGNORE INTO t11 VALUES (x,x,y);
|
||||||
END|
|
END|
|
||||||
|
|
||||||
DELIMITER ;|
|
DELIMITER ;|
|
||||||
@ -147,17 +144,24 @@ DELIMITER ;|
|
|||||||
|
|
||||||
# Do some actions for non-transactional tables
|
# Do some actions for non-transactional tables
|
||||||
--echo
|
--echo
|
||||||
--disable_warnings
|
|
||||||
CREATE TABLE t3 SELECT * FROM v1;
|
CREATE TABLE t3 SELECT * FROM v1;
|
||||||
INSERT INTO t1 VALUES (3,3,'');
|
INSERT INTO t1 VALUES (3,3,'');
|
||||||
UPDATE t1 SET c='2' WHERE a = 1;
|
UPDATE t1 SET c='2' WHERE a = 1;
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t1 VALUES(4,4,f1(4));
|
INSERT INTO t1 VALUES(4,4,f1(4));
|
||||||
|
--enable_warnings
|
||||||
INSERT INTO t1 VALUES (100,100,'');
|
INSERT INTO t1 VALUES (100,100,'');
|
||||||
|
--disable_warnings
|
||||||
CALL p1(5, UUID());
|
CALL p1(5, UUID());
|
||||||
|
--enable_warnings
|
||||||
INSERT INTO t1 VALUES (101,101,'');
|
INSERT INTO t1 VALUES (101,101,'');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t1 VALUES(6,6,f1(6));
|
INSERT INTO t1 VALUES(6,6,f1(6));
|
||||||
|
--enable_warnings
|
||||||
INSERT INTO t1 VALUES (102,102,'');
|
INSERT INTO t1 VALUES (102,102,'');
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t1 VALUES(7,7,f2(7));
|
INSERT INTO t1 VALUES(7,7,f2(7));
|
||||||
|
--enable_warnings
|
||||||
INSERT INTO t1 VALUES (103,103,'');
|
INSERT INTO t1 VALUES (103,103,'');
|
||||||
|
|
||||||
# Do some actions for transactional tables
|
# Do some actions for transactional tables
|
||||||
@ -165,21 +169,34 @@ INSERT INTO t1 VALUES (103,103,'');
|
|||||||
CREATE TABLE t13 SELECT * FROM v11;
|
CREATE TABLE t13 SELECT * FROM v11;
|
||||||
INSERT INTO t11 VALUES (3,3,'');
|
INSERT INTO t11 VALUES (3,3,'');
|
||||||
UPDATE t11 SET c='2' WHERE a = 1;
|
UPDATE t11 SET c='2' WHERE a = 1;
|
||||||
|
--disable_warnings
|
||||||
INSERT INTO t11 VALUES(4,4,f1(4));
|
INSERT INTO t11 VALUES(4,4,f1(4));
|
||||||
INSERT INTO t11 VALUES (100,100,'');
|
|
||||||
CALL p11(5, UUID());
|
|
||||||
INSERT INTO t11 VALUES (101,101,'');
|
|
||||||
INSERT INTO t11 VALUES(6,6,f1(6));
|
|
||||||
INSERT INTO t11 VALUES (102,102,'');
|
|
||||||
INSERT INTO t11 VALUES(7,7,f2(7));
|
|
||||||
INSERT INTO t11 VALUES (103,103,'');
|
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
INSERT INTO t11 VALUES (100,100,'');
|
||||||
|
--disable_warnings
|
||||||
|
CALL p11(5, UUID());
|
||||||
|
--enable_warnings
|
||||||
|
INSERT INTO t11 VALUES (101,101,'');
|
||||||
|
--disable_warnings
|
||||||
|
INSERT INTO t11 VALUES(6,6,f1(6));
|
||||||
|
--enable_warnings
|
||||||
|
INSERT INTO t11 VALUES (102,102,'');
|
||||||
|
--disable_warnings
|
||||||
|
INSERT INTO t11 VALUES(7,7,f2(7));
|
||||||
|
--enable_warnings
|
||||||
|
INSERT INTO t11 VALUES (103,103,'');
|
||||||
|
|
||||||
# Scheduler is on
|
# Scheduler is on
|
||||||
--echo
|
--echo
|
||||||
|
# Temporally events fire sequentally due Bug#29020.
|
||||||
SET GLOBAL EVENT_SCHEDULER = on;
|
SET GLOBAL EVENT_SCHEDULER = on;
|
||||||
# Wait 2 sec while events will executed
|
# Wait while events will executed
|
||||||
--sleep 2
|
ALTER EVENT e1 ENABLE;
|
||||||
|
let $wait_condition= SELECT COUNT(*) = 1 FROM t1 WHERE t1.a = 10;
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
ALTER EVENT e11 ENABLE;
|
||||||
|
let $wait_condition= SELECT COUNT(*) = 1 FROM t11 WHERE t11.a = 10;
|
||||||
|
--source include/wait_condition.inc
|
||||||
SET GLOBAL EVENT_SCHEDULER = off;
|
SET GLOBAL EVENT_SCHEDULER = off;
|
||||||
|
|
||||||
# Check original objects
|
# Check original objects
|
||||||
@ -234,7 +251,7 @@ SELECT COUNT(*) FROM t13;
|
|||||||
SELECT a,b FROM t13 ORDER BY a;
|
SELECT a,b FROM t13 ORDER BY a;
|
||||||
SELECT a,b FROM v11 ORDER BY a;
|
SELECT a,b FROM v11 ORDER BY a;
|
||||||
|
|
||||||
# Remove UUID() before comparing
|
# Remove UUID() before comparing and sort tables
|
||||||
|
|
||||||
--connection master
|
--connection master
|
||||||
--echo
|
--echo
|
||||||
@ -245,6 +262,9 @@ UPDATE t11 SET c='';
|
|||||||
UPDATE t12 SET c='';
|
UPDATE t12 SET c='';
|
||||||
UPDATE t13 SET c='';
|
UPDATE t13 SET c='';
|
||||||
|
|
||||||
|
ALTER TABLE t3 ORDER BY a;
|
||||||
|
ALTER TABLE t13 ORDER BY a;
|
||||||
|
|
||||||
--sync_slave_with_master slave
|
--sync_slave_with_master slave
|
||||||
|
|
||||||
# Compare a data from master and slave
|
# Compare a data from master and slave
|
||||||
@ -260,13 +280,12 @@ UPDATE t13 SET c='';
|
|||||||
|
|
||||||
# Remove dumps
|
# Remove dumps
|
||||||
--echo
|
--echo
|
||||||
--exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
|
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
|
||||||
--exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
|
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
|
||||||
|
|
||||||
# Remove tables,views,procedures,functions
|
# Remove tables,views,procedures,functions
|
||||||
--connection master
|
--connection master
|
||||||
--echo
|
--echo
|
||||||
--disable_warnings
|
|
||||||
DROP VIEW IF EXISTS v1,v11;
|
DROP VIEW IF EXISTS v1,v11;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13;
|
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13;
|
||||||
DROP PROCEDURE IF EXISTS p1;
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
@ -275,7 +294,6 @@ DROP FUNCTION IF EXISTS f1;
|
|||||||
DROP FUNCTION IF EXISTS f2;
|
DROP FUNCTION IF EXISTS f2;
|
||||||
DROP EVENT IF EXISTS e1;
|
DROP EVENT IF EXISTS e1;
|
||||||
DROP EVENT IF EXISTS e11;
|
DROP EVENT IF EXISTS e11;
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
--sync_slave_with_master slave
|
--sync_slave_with_master slave
|
||||||
|
|
||||||
|
@ -67,15 +67,10 @@ INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
|
|
||||||
# The slave I/O thread must stop after trying to read the above event
|
# The slave I/O thread must stop after trying to read the above event
|
||||||
connection slave;
|
connection slave;
|
||||||
sleep 2;
|
|
||||||
--source include/wait_for_slave_io_to_stop.inc
|
--source include/wait_for_slave_io_to_stop.inc
|
||||||
SHOW STATUS LIKE 'Slave_running';
|
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
# import is only the 11th column Slave_IO_Running
|
||||||
# cleanup
|
--replace_column 1 # 7 # 8 # 9 # 12 # 22 # 23 # 33 #
|
||||||
#connection master;
|
query_vertical show slave status;
|
||||||
#drop table t1;
|
|
||||||
#connection slave;
|
|
||||||
#drop table t1;
|
|
||||||
|
|
||||||
|
|
||||||
# End of tests
|
# End of tests
|
||||||
|
@ -6732,6 +6732,7 @@ const uint Field_varstring::MAX_SIZE= UINT_MAX16;
|
|||||||
int Field_varstring::do_save_field_metadata(uchar *metadata_ptr)
|
int Field_varstring::do_save_field_metadata(uchar *metadata_ptr)
|
||||||
{
|
{
|
||||||
char *ptr= (char *)metadata_ptr;
|
char *ptr= (char *)metadata_ptr;
|
||||||
|
DBUG_ASSERT(field_length <= 65535);
|
||||||
int2store(ptr, field_length);
|
int2store(ptr, field_length);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
@ -6469,6 +6469,16 @@ void Rows_log_event::print_helper(FILE *file,
|
|||||||
data) in the table map are initialized as zero (0). The array size is the
|
data) in the table map are initialized as zero (0). The array size is the
|
||||||
same as the columns for the table on the slave.
|
same as the columns for the table on the slave.
|
||||||
|
|
||||||
|
Additionally, values saved for field metadata on the master are saved as a
|
||||||
|
string of bytes (uchar) in the binlog. A field may require 1 or more bytes
|
||||||
|
to store the information. In cases where values require multiple bytes
|
||||||
|
(e.g. values > 255), the endian-safe methods are used to properly encode
|
||||||
|
the values on the master and decode them on the slave. When the field
|
||||||
|
metadata values are captured on the slave, they are stored in an array of
|
||||||
|
type uint16. This allows the least number of casts to prevent casting bugs
|
||||||
|
when the field metadata is used in comparisons of field attributes. When
|
||||||
|
the field metadata is used for calculating addresses in pointer math, the
|
||||||
|
type used is uint32.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -6520,6 +6530,7 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
|
|||||||
m_tblnam(tbl->s->table_name.str),
|
m_tblnam(tbl->s->table_name.str),
|
||||||
m_tbllen(tbl->s->table_name.length),
|
m_tbllen(tbl->s->table_name.length),
|
||||||
m_colcnt(tbl->s->fields), m_field_metadata(0),
|
m_colcnt(tbl->s->fields), m_field_metadata(0),
|
||||||
|
m_field_metadata_size(0), m_memory(NULL), m_meta_memory(NULL), m_data_size(0),
|
||||||
m_table_id(tid), m_null_bits(0), m_flags(flags)
|
m_table_id(tid), m_null_bits(0), m_flags(flags)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(m_table_id != ~0UL);
|
DBUG_ASSERT(m_table_id != ~0UL);
|
||||||
@ -6598,8 +6609,11 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len,
|
|||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
m_table(NULL),
|
m_table(NULL),
|
||||||
#endif
|
#endif
|
||||||
m_memory(NULL),
|
m_dbnam(NULL), m_dblen(0), m_tblnam(NULL), m_tbllen(0),
|
||||||
m_field_metadata(0), m_field_metadata_size(0)
|
m_colcnt(0), m_coltype(0),
|
||||||
|
m_memory(NULL), m_table_id(ULONG_MAX), m_flags(0),
|
||||||
|
m_data_size(0), m_field_metadata(0), m_field_metadata_size(0),
|
||||||
|
m_null_bits(0), m_meta_memory(NULL)
|
||||||
{
|
{
|
||||||
unsigned int bytes_read= 0;
|
unsigned int bytes_read= 0;
|
||||||
DBUG_ENTER("Table_map_log_event::Table_map_log_event(const char*,uint,...)");
|
DBUG_ENTER("Table_map_log_event::Table_map_log_event(const char*,uint,...)");
|
||||||
|
@ -31,31 +31,34 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
|
|||||||
switch (type(col)) {
|
switch (type(col)) {
|
||||||
case MYSQL_TYPE_NEWDECIMAL:
|
case MYSQL_TYPE_NEWDECIMAL:
|
||||||
length= my_decimal_get_binary_size(m_field_metadata[col] >> 8,
|
length= my_decimal_get_binary_size(m_field_metadata[col] >> 8,
|
||||||
m_field_metadata[col] - ((m_field_metadata[col] >> 8) << 8));
|
m_field_metadata[col] & 0xff);
|
||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_DECIMAL:
|
case MYSQL_TYPE_DECIMAL:
|
||||||
case MYSQL_TYPE_FLOAT:
|
case MYSQL_TYPE_FLOAT:
|
||||||
case MYSQL_TYPE_DOUBLE:
|
case MYSQL_TYPE_DOUBLE:
|
||||||
length= m_field_metadata[col];
|
length= m_field_metadata[col];
|
||||||
break;
|
break;
|
||||||
|
/*
|
||||||
|
The cases for SET and ENUM are include for completeness, however
|
||||||
|
both are mapped to type MYSQL_TYPE_STRING and their real types
|
||||||
|
are encoded in the field metadata.
|
||||||
|
*/
|
||||||
case MYSQL_TYPE_SET:
|
case MYSQL_TYPE_SET:
|
||||||
case MYSQL_TYPE_ENUM:
|
case MYSQL_TYPE_ENUM:
|
||||||
case MYSQL_TYPE_STRING:
|
case MYSQL_TYPE_STRING:
|
||||||
{
|
{
|
||||||
if (((m_field_metadata[col] & 0xff00) == (MYSQL_TYPE_SET << 8)) ||
|
uchar type= m_field_metadata[col] >> 8U;
|
||||||
((m_field_metadata[col] & 0xff00) == (MYSQL_TYPE_ENUM << 8)))
|
if ((type == MYSQL_TYPE_SET) || (type == MYSQL_TYPE_ENUM))
|
||||||
length= m_field_metadata[col] & 0x00ff;
|
length= m_field_metadata[col] & 0x00ff;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
length= m_field_metadata[col] & 0x00ff;
|
/*
|
||||||
DBUG_ASSERT(length > 0);
|
We are reading the actual size from the master_data record
|
||||||
if (length > 255)
|
because this field has the actual lengh stored in the first
|
||||||
{
|
byte.
|
||||||
DBUG_ASSERT(uint2korr(master_data) > 0);
|
*/
|
||||||
length= uint2korr(master_data) + 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
length= (uint) *master_data + 1;
|
length= (uint) *master_data + 1;
|
||||||
|
DBUG_ASSERT(length != 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -95,6 +98,13 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
|
|||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_BIT:
|
case MYSQL_TYPE_BIT:
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Decode the size of the bit field from the master.
|
||||||
|
from_len is the length in bytes from the master
|
||||||
|
from_bit_len is the number of extra bits stored in the master record
|
||||||
|
If from_bit_len is not 0, add 1 to the length to account for accurate
|
||||||
|
number of bytes needed.
|
||||||
|
*/
|
||||||
uint from_len= (m_field_metadata[col] >> 8U) & 0x00ff;
|
uint from_len= (m_field_metadata[col] >> 8U) & 0x00ff;
|
||||||
uint from_bit_len= m_field_metadata[col] & 0x00ff;
|
uint from_bit_len= m_field_metadata[col] & 0x00ff;
|
||||||
DBUG_ASSERT(from_bit_len <= 7);
|
DBUG_ASSERT(from_bit_len <= 7);
|
||||||
@ -136,7 +146,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
|
|||||||
length= *master_data;
|
length= *master_data;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
length= sint2korr(master_data);
|
length= uint2korr(master_data);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
length= uint3korr(master_data);
|
length= uint3korr(master_data);
|
||||||
|
@ -99,7 +99,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
These types store a single byte.
|
These types store a single byte.
|
||||||
*/
|
*/
|
||||||
m_field_metadata[i]= (uchar)field_metadata[index];
|
m_field_metadata[i]= field_metadata[index];
|
||||||
index++;
|
index++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -107,14 +107,14 @@ public:
|
|||||||
case MYSQL_TYPE_ENUM:
|
case MYSQL_TYPE_ENUM:
|
||||||
case MYSQL_TYPE_STRING:
|
case MYSQL_TYPE_STRING:
|
||||||
{
|
{
|
||||||
short int x= field_metadata[index++] << 8U; // real_type
|
uint16 x= field_metadata[index++] << 8U; // real_type
|
||||||
x = x + field_metadata[index++]; // pack or field length
|
x+= field_metadata[index++]; // pack or field length
|
||||||
m_field_metadata[i]= x;
|
m_field_metadata[i]= x;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MYSQL_TYPE_BIT:
|
case MYSQL_TYPE_BIT:
|
||||||
{
|
{
|
||||||
short int x= field_metadata[index++];
|
uint16 x= field_metadata[index++];
|
||||||
x = x + (field_metadata[index++] << 8U);
|
x = x + (field_metadata[index++] << 8U);
|
||||||
m_field_metadata[i]= x;
|
m_field_metadata[i]= x;
|
||||||
break;
|
break;
|
||||||
@ -125,14 +125,14 @@ public:
|
|||||||
These types store two bytes.
|
These types store two bytes.
|
||||||
*/
|
*/
|
||||||
char *ptr= (char *)&field_metadata[index];
|
char *ptr= (char *)&field_metadata[index];
|
||||||
m_field_metadata[i]= sint2korr(ptr);
|
m_field_metadata[i]= uint2korr(ptr);
|
||||||
index= index + 2;
|
index= index + 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MYSQL_TYPE_NEWDECIMAL:
|
case MYSQL_TYPE_NEWDECIMAL:
|
||||||
{
|
{
|
||||||
short int x= field_metadata[index++] << 8U; // precision
|
uint16 x= field_metadata[index++] << 8U; // precision
|
||||||
x = x + field_metadata[index++]; // decimals
|
x+= field_metadata[index++]; // decimals
|
||||||
m_field_metadata[i]= x;
|
m_field_metadata[i]= x;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -345,7 +345,7 @@ cleanup:
|
|||||||
thd->transaction.stmt.modified_non_trans_table= TRUE;
|
thd->transaction.stmt.modified_non_trans_table= TRUE;
|
||||||
|
|
||||||
/* See similar binlogging code in sql_update.cc, for comments */
|
/* See similar binlogging code in sql_update.cc, for comments */
|
||||||
if ((error < 0) || (deleted && !transactional_table))
|
if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
@ -862,7 +862,8 @@ bool multi_delete::send_eof()
|
|||||||
{
|
{
|
||||||
query_cache_invalidate3(thd, delete_tables, 1);
|
query_cache_invalidate3(thd, delete_tables, 1);
|
||||||
}
|
}
|
||||||
if ((local_error == 0) || (deleted && normal_tables))
|
DBUG_ASSERT(!normal_tables || !deleted || thd->transaction.stmt.modified_non_trans_table);
|
||||||
|
if ((local_error == 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
@ -879,7 +880,6 @@ bool multi_delete::send_eof()
|
|||||||
if (thd->transaction.stmt.modified_non_trans_table)
|
if (thd->transaction.stmt.modified_non_trans_table)
|
||||||
thd->transaction.all.modified_non_trans_table= TRUE;
|
thd->transaction.all.modified_non_trans_table= TRUE;
|
||||||
}
|
}
|
||||||
DBUG_ASSERT(!normal_tables || !deleted || thd->transaction.stmt.modified_non_trans_table);
|
|
||||||
|
|
||||||
/* Commit or rollback the current SQL statement */
|
/* Commit or rollback the current SQL statement */
|
||||||
if (transactional_tables)
|
if (transactional_tables)
|
||||||
|
@ -839,17 +839,17 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
}
|
}
|
||||||
transactional_table= table->file->has_transactions();
|
transactional_table= table->file->has_transactions();
|
||||||
|
|
||||||
if ((changed= (info.copied || info.deleted || info.updated)) ||
|
if ((changed= (info.copied || info.deleted || info.updated)))
|
||||||
was_insert_delayed)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Invalidate the table in the query cache if something changed.
|
Invalidate the table in the query cache if something changed.
|
||||||
For the transactional algorithm to work the invalidation must be
|
For the transactional algorithm to work the invalidation must be
|
||||||
before binlog writing and ha_autocommit_or_rollback
|
before binlog writing and ha_autocommit_or_rollback
|
||||||
*/
|
*/
|
||||||
if (changed)
|
|
||||||
query_cache_invalidate3(thd, table_list, 1);
|
query_cache_invalidate3(thd, table_list, 1);
|
||||||
if (error <= 0 || !transactional_table)
|
}
|
||||||
|
if (changed && error <= 0 || thd->transaction.stmt.modified_non_trans_table
|
||||||
|
|| was_insert_delayed)
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
@ -892,7 +892,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
if (thd->transaction.stmt.modified_non_trans_table)
|
if (thd->transaction.stmt.modified_non_trans_table)
|
||||||
thd->transaction.all.modified_non_trans_table= TRUE;
|
thd->transaction.all.modified_non_trans_table= TRUE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
DBUG_ASSERT(transactional_table || !changed ||
|
DBUG_ASSERT(transactional_table || !changed ||
|
||||||
thd->transaction.stmt.modified_non_trans_table);
|
thd->transaction.stmt.modified_non_trans_table);
|
||||||
if (transactional_table)
|
if (transactional_table)
|
||||||
@ -3164,6 +3163,7 @@ void select_insert::abort() {
|
|||||||
*/
|
*/
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
|
bool changed, transactional_table;
|
||||||
/*
|
/*
|
||||||
If we are not in prelocked mode, we end the bulk insert started
|
If we are not in prelocked mode, we end the bulk insert started
|
||||||
before.
|
before.
|
||||||
@ -3185,20 +3185,20 @@ void select_insert::abort() {
|
|||||||
If table creation failed, the number of rows modified will also be
|
If table creation failed, the number of rows modified will also be
|
||||||
zero, so no check for that is made.
|
zero, so no check for that is made.
|
||||||
*/
|
*/
|
||||||
if (info.copied || info.deleted || info.updated)
|
changed= (info.copied || info.deleted || info.updated);
|
||||||
{
|
transactional_table= table->file->has_transactions();
|
||||||
DBUG_ASSERT(table != NULL);
|
if (thd->transaction.stmt.modified_non_trans_table)
|
||||||
if (!table->file->has_transactions())
|
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
|
||||||
table->file->has_transactions(), FALSE);
|
transactional_table, FALSE);
|
||||||
if (!thd->current_stmt_binlog_row_based && !table->s->tmp_table &&
|
if (!thd->current_stmt_binlog_row_based && !can_rollback_data())
|
||||||
!can_rollback_data())
|
|
||||||
thd->transaction.all.modified_non_trans_table= TRUE;
|
thd->transaction.all.modified_non_trans_table= TRUE;
|
||||||
|
if (changed)
|
||||||
query_cache_invalidate3(thd, table, 1);
|
query_cache_invalidate3(thd, table, 1);
|
||||||
}
|
}
|
||||||
}
|
DBUG_ASSERT(transactional_table || !changed ||
|
||||||
|
thd->transaction.stmt.modified_non_trans_table);
|
||||||
table->file->ha_release_auto_increment();
|
table->file->ha_release_auto_increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,7 +445,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
/* If the file was not empty, wrote_create_file is true */
|
/* If the file was not empty, wrote_create_file is true */
|
||||||
if (lf_info.wrote_create_file)
|
if (lf_info.wrote_create_file)
|
||||||
{
|
{
|
||||||
if ((info.copied || info.deleted) && !transactional_table)
|
if (thd->transaction.stmt.modified_non_trans_table)
|
||||||
write_execute_load_query_log_event(thd, handle_duplicates,
|
write_execute_load_query_log_event(thd, handle_duplicates,
|
||||||
ignore, transactional_table);
|
ignore, transactional_table);
|
||||||
else
|
else
|
||||||
|
@ -797,7 +797,7 @@ int mysql_update(THD *thd,
|
|||||||
Sometimes we want to binlog even if we updated no rows, in case user used
|
Sometimes we want to binlog even if we updated no rows, in case user used
|
||||||
it to be sure master and slave are in same state.
|
it to be sure master and slave are in same state.
|
||||||
*/
|
*/
|
||||||
if ((error < 0) || (updated && !transactional_table))
|
if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
|
||||||
{
|
{
|
||||||
if (mysql_bin_log.is_open())
|
if (mysql_bin_log.is_open())
|
||||||
{
|
{
|
||||||
|
@ -874,7 +874,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%token OUT_SYM /* SQL-2003-R */
|
%token OUT_SYM /* SQL-2003-R */
|
||||||
%token OWNER_SYM
|
%token OWNER_SYM
|
||||||
%token PACK_KEYS_SYM
|
%token PACK_KEYS_SYM
|
||||||
%token PAGE_SYM
|
|
||||||
%token PARAM_MARKER
|
%token PARAM_MARKER
|
||||||
%token PARSER_SYM
|
%token PARSER_SYM
|
||||||
%token PARTIAL /* SQL-2003-N */
|
%token PARTIAL /* SQL-2003-N */
|
||||||
@ -1027,7 +1026,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
%token TO_SYM /* SQL-2003-R */
|
%token TO_SYM /* SQL-2003-R */
|
||||||
%token TRAILING /* SQL-2003-R */
|
%token TRAILING /* SQL-2003-R */
|
||||||
%token TRANSACTION_SYM
|
%token TRANSACTION_SYM
|
||||||
%token TRANSACTIONAL_SYM
|
|
||||||
%token TRIGGERS_SYM
|
%token TRIGGERS_SYM
|
||||||
%token TRIGGER_SYM /* SQL-2003-R */
|
%token TRIGGER_SYM /* SQL-2003-R */
|
||||||
%token TRIM /* SQL-2003-N */
|
%token TRIM /* SQL-2003-N */
|
||||||
@ -4499,13 +4497,6 @@ create_table_option:
|
|||||||
Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE;
|
Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE;
|
||||||
Lex->create_info.key_block_size= $3;
|
Lex->create_info.key_block_size= $3;
|
||||||
}
|
}
|
||||||
| TRANSACTIONAL_SYM opt_equal ulong_num
|
|
||||||
{
|
|
||||||
Lex->create_info.used_fields|= HA_CREATE_USED_TRANSACTIONAL;
|
|
||||||
Lex->create_info.transactional= ($3 != 0 ? HA_CHOICE_YES :
|
|
||||||
HA_CHOICE_NO);
|
|
||||||
}
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
default_charset:
|
default_charset:
|
||||||
@ -4586,9 +4577,7 @@ row_types:
|
|||||||
| DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; }
|
| DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; }
|
||||||
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; }
|
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; }
|
||||||
| REDUNDANT_SYM { $$= ROW_TYPE_REDUNDANT; }
|
| REDUNDANT_SYM { $$= ROW_TYPE_REDUNDANT; }
|
||||||
| COMPACT_SYM { $$= ROW_TYPE_COMPACT; }
|
| COMPACT_SYM { $$= ROW_TYPE_COMPACT; };
|
||||||
| PAGE_SYM { $$= ROW_TYPE_PAGE; }
|
|
||||||
;
|
|
||||||
|
|
||||||
merge_insert_types:
|
merge_insert_types:
|
||||||
NO_SYM { $$= MERGE_INSERT_DISABLED; }
|
NO_SYM { $$= MERGE_INSERT_DISABLED; }
|
||||||
@ -10574,7 +10563,6 @@ keyword_sp:
|
|||||||
| ONE_SHOT_SYM {}
|
| ONE_SHOT_SYM {}
|
||||||
| ONE_SYM {}
|
| ONE_SYM {}
|
||||||
| PACK_KEYS_SYM {}
|
| PACK_KEYS_SYM {}
|
||||||
| PAGE_SYM {}
|
|
||||||
| PARTIAL {}
|
| PARTIAL {}
|
||||||
| PARTITIONING_SYM {}
|
| PARTITIONING_SYM {}
|
||||||
| PARTITIONS_SYM {}
|
| PARTITIONS_SYM {}
|
||||||
@ -10644,7 +10632,6 @@ keyword_sp:
|
|||||||
| TEXT_SYM {}
|
| TEXT_SYM {}
|
||||||
| THAN_SYM {}
|
| THAN_SYM {}
|
||||||
| TRANSACTION_SYM {}
|
| TRANSACTION_SYM {}
|
||||||
| TRANSACTIONAL_SYM {}
|
|
||||||
| TRIGGERS_SYM {}
|
| TRIGGERS_SYM {}
|
||||||
| TIMESTAMP {}
|
| TIMESTAMP {}
|
||||||
| TIMESTAMP_ADD {}
|
| TIMESTAMP_ADD {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user