~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysql-test/suite/binlog/t/binlog_innodb.test

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
source include/have_innodb.inc;
 
2
source include/have_log_bin.inc;
 
3
 
 
4
SET BINLOG_FORMAT=MIXED;
 
5
 
 
6
RESET MASTER;
 
7
 
 
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);
 
10
 
 
11
BEGIN;
 
12
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 
13
# Should be logged as statement
 
14
UPDATE t1 SET b = 2*a WHERE a > 1;
 
15
COMMIT;
 
16
 
 
17
BEGIN;
 
18
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
19
# Should be logged as rows
 
20
UPDATE t1 SET b = a * a WHERE a > 3;
 
21
COMMIT;
 
22
 
 
23
# Check that errors are generated when trying to use READ COMMITTED
 
24
# transaction isolation level in STATEMENT binlog mode.
 
25
 
 
26
SET BINLOG_FORMAT=STATEMENT;
 
27
 
 
28
BEGIN;
 
29
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 
30
error ER_BINLOG_LOGGING_IMPOSSIBLE;
 
31
UPDATE t1 SET b = 1*a WHERE a > 1;
 
32
COMMIT;
 
33
 
 
34
BEGIN;
 
35
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
36
error ER_BINLOG_LOGGING_IMPOSSIBLE;
 
37
UPDATE t1 SET b = 2*a WHERE a > 2;
 
38
COMMIT;
 
39
 
 
40
BEGIN;
 
41
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 
42
UPDATE t1 SET b = 3*a WHERE a > 3;
 
43
COMMIT;
 
44
 
 
45
BEGIN;
 
46
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
47
UPDATE t1 SET b = 4*a WHERE a > 4;
 
48
COMMIT;
 
49
 
 
50
SET BINLOG_FORMAT=MIXED;
 
51
 
 
52
BEGIN;
 
53
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 
54
UPDATE t1 SET b = 1*a WHERE a > 1;
 
55
COMMIT;
 
56
 
 
57
BEGIN;
 
58
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
59
UPDATE t1 SET b = 2*a WHERE a > 2;
 
60
COMMIT;
 
61
 
 
62
BEGIN;
 
63
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 
64
UPDATE t1 SET b = 3*a WHERE a > 3;
 
65
COMMIT;
 
66
 
 
67
BEGIN;
 
68
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
69
UPDATE t1 SET b = 4*a WHERE a > 4;
 
70
COMMIT;
 
71
 
 
72
SET BINLOG_FORMAT=ROW;
 
73
 
 
74
BEGIN;
 
75
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 
76
UPDATE t1 SET b = 1*a WHERE a > 1;
 
77
COMMIT;
 
78
 
 
79
BEGIN;
 
80
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
81
UPDATE t1 SET b = 2*a WHERE a > 2;
 
82
COMMIT;
 
83
 
 
84
BEGIN;
 
85
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 
86
UPDATE t1 SET b = 3*a WHERE a > 3;
 
87
COMMIT;
 
88
 
 
89
BEGIN;
 
90
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
91
UPDATE t1 SET b = 4*a WHERE a > 4;
 
92
COMMIT;
 
93
 
 
94
source include/show_binlog_events.inc;
 
95
 
 
96
DROP TABLE t1;
 
97
 
 
98
 
 
99
#
 
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.
 
103
#
 
104
show status like "binlog_cache_use";
 
105
show status like "binlog_cache_disk_use";
 
106
 
 
107
create table t1 (a int) engine=innodb;
 
108
 
 
109
# Now we are going to create transaction which is long enough so its
 
110
# transaction binlog will be flushed to disk...
 
111
let $1=2000;
 
112
disable_query_log;
 
113
begin;
 
114
while ($1)
 
115
{
 
116
 eval insert into t1 values( $1 );
 
117
 dec $1;
 
118
}
 
119
commit;
 
120
enable_query_log;
 
121
show status like "binlog_cache_use";
 
122
show status like "binlog_cache_disk_use";
 
123
 
 
124
# Transaction which should not be flushed to disk and so should not
 
125
# increase binlog_cache_disk_use.
 
126
begin;
 
127
delete from t1;
 
128
commit;
 
129
show status like "binlog_cache_use";
 
130
show status like "binlog_cache_disk_use";
 
131
drop table t1;
 
132
 
 
133
#
 
134
# Bug#27716     multi-update did partially and has not binlogged
 
135
#
 
136
 
 
137
CREATE TABLE `t1` (
 
138
  `a` int(11) NOT NULL auto_increment,
 
139
  `b` int(11) default NULL,
 
140
  PRIMARY KEY  (`a`)
 
141
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
142
 
 
143
CREATE TABLE `t2` (
 
144
  `a` int(11) NOT NULL auto_increment,
 
145
  `b` int(11) default NULL,
 
146
  PRIMARY KEY  (`a`)
 
147
) ENGINE=INNODB DEFAULT CHARSET=latin1 ;
 
148
 
 
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);
 
152
reset master;
 
153
--error ER_DUP_ENTRY
 
154
UPDATE t2,t1 SET t2.a=t1.a+2;
 
155
# check
 
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;
 
159
 
 
160
# B. testing multi_update::send_error() execution branch
 
161
delete from t1;
 
162
delete from t2;
 
163
insert into t1 values (1,2),(3,4),(4,4);
 
164
insert into t2 values (1,2),(3,4),(4,4);
 
165
reset master;
 
166
--error ER_DUP_ENTRY
 
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;
 
170
 
 
171
# cleanup bug#27716
 
172
drop table t1, t2;
 
173
 
 
174
--echo End of tests