1
source include/have_innodb.inc;
2
source include/have_log_bin.inc;
4
SET BINLOG_FORMAT=MIXED;
8
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB;
9
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
12
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
13
# Should be logged as statement
14
UPDATE t1 SET b = 2*a WHERE a > 1;
18
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
19
# Should be logged as rows
20
UPDATE t1 SET b = a * a WHERE a > 3;
23
# Check that errors are generated when trying to use READ COMMITTED
24
# transaction isolation level in STATEMENT binlog mode.
26
SET BINLOG_FORMAT=STATEMENT;
29
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
30
error ER_BINLOG_LOGGING_IMPOSSIBLE;
31
UPDATE t1 SET b = 1*a WHERE a > 1;
35
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
36
error ER_BINLOG_LOGGING_IMPOSSIBLE;
37
UPDATE t1 SET b = 2*a WHERE a > 2;
41
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
42
UPDATE t1 SET b = 3*a WHERE a > 3;
46
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
47
UPDATE t1 SET b = 4*a WHERE a > 4;
50
SET BINLOG_FORMAT=MIXED;
53
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
54
UPDATE t1 SET b = 1*a WHERE a > 1;
58
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
59
UPDATE t1 SET b = 2*a WHERE a > 2;
63
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
64
UPDATE t1 SET b = 3*a WHERE a > 3;
68
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
69
UPDATE t1 SET b = 4*a WHERE a > 4;
72
SET BINLOG_FORMAT=ROW;
75
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
76
UPDATE t1 SET b = 1*a WHERE a > 1;
80
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
81
UPDATE t1 SET b = 2*a WHERE a > 2;
85
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
86
UPDATE t1 SET b = 3*a WHERE a > 3;
90
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
91
UPDATE t1 SET b = 4*a WHERE a > 4;
94
source include/show_binlog_events.inc;
100
# Let us test binlog_cache_use and binlog_cache_disk_use status vars.
101
# Actually this test has nothing to do with innodb per se, it just requires
102
# transactional table.
104
show status like "binlog_cache_use";
105
show status like "binlog_cache_disk_use";
107
create table t1 (a int) engine=innodb;
109
# Now we are going to create transaction which is long enough so its
110
# transaction binlog will be flushed to disk...
116
eval insert into t1 values( $1 );
121
show status like "binlog_cache_use";
122
show status like "binlog_cache_disk_use";
124
# Transaction which should not be flushed to disk and so should not
125
# increase binlog_cache_disk_use.
129
show status like "binlog_cache_use";
130
show status like "binlog_cache_disk_use";
134
# Bug#27716 multi-update did partially and has not binlogged
138
`a` int(11) NOT NULL auto_increment,
139
`b` int(11) default NULL,
141
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
144
`a` int(11) NOT NULL auto_increment,
145
`b` int(11) default NULL,
147
) ENGINE=INNODB DEFAULT CHARSET=latin1 ;
149
# A. testing multi_update::send_eof() execution branch
150
insert into t1 values (1,1),(2,2);
151
insert into t2 values (1,1),(4,4);
154
UPDATE t2,t1 SET t2.a=t1.a+2;
156
select * from t2 /* must be (3,1), (4,4) */;
157
--echo there must no UPDATE in binlog
158
source include/show_master_status.inc;
160
# B. testing multi_update::send_error() execution branch
163
insert into t1 values (1,2),(3,4),(4,4);
164
insert into t2 values (1,2),(3,4),(4,4);
167
UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
168
--echo there must no UPDATE in binlog
169
source include/show_master_status.inc;