~drizzle-trunk/drizzle/development

1 by brian
clean slate
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