Skip to content

Commit aefaa56

Browse files
author
Alfranio Correia
committed
merge mysql-5.1-rep+3 --> mysql-5.1-rep+2-delivery1
2 parents 6a7e3ca + 9b0ae85 commit aefaa56

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,40 @@ CREATE TRIGGER trig_1 AFTER INSERT ON t_self_logging FOR EACH ROW BEGIN INSERT I
3737
INSERT INTO t_self_logging VALUES (1);
3838
ERROR HY000: Cannot execute statement: binlogging impossible since more than one engine is involved and at least one engine is self-logging.
3939
DROP trigger trig_1;
40+
SELECT * FROM t_self_logging /* Should be empty */;
41+
a
42+
SELECT * FROM t /* Should be empty */;
43+
a
4044
* Modify both row-only and stmt-only table
4145
CREATE TRIGGER trig_2 AFTER INSERT ON t_stmt FOR EACH ROW BEGIN INSERT INTO t_row VALUES(1); END;
4246
INSERT INTO t_stmt VALUES (1);
4347
ERROR HY000: Cannot execute statement: binlogging impossible since both row-incapable engines and statement-incapable engines are involved.
48+
SELECT * FROM t_stmt /* should be empty */;
49+
a
4450
DROP TRIGGER trig_2;
4551
* Stmt-only table and binlog_format=row
4652
INSERT INTO t_stmt VALUES (1);
4753
ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-logging.
54+
SELECT * FROM t_stmt /* should be empty */;
55+
a
4856
* Row injection and stmt-only table: in slave sql thread
4957
INSERT INTO t_slave_stmt VALUES (1);
5058
[on slave]
5159
--source include/wait_for_slave_sql_error_and_skip.inc
5260
Last_SQL_Error = Error 'Cannot execute row injection: binlogging impossible since at least one table uses a storage engine limited to statement-logging.' on opening tables
5361
set global sql_slave_skip_counter=1;
5462
include/start_slave.inc
63+
SELECT * FROM t_slave_stmt /* should be empty */;
64+
a
65+
[on master]
5566
* Row injection and stmt-only table: use BINLOG statement
5667
BINLOG '
5768
1gRVShMBAAAALwAAAEABAAAAABcAAAAAAAAABHRlc3QABnRfc3RtdAABDwJkAAE=
5869
1gRVShcBAAAAIAAAAGABAAAQABcAAAAAAAEAAf/+ATE=
5970
';
6071
ERROR HY000: Cannot execute row injection: binlogging impossible since at least one table uses a storage engine limited to statement-logging.
72+
SELECT * FROM t_stmt /* should be empty */;
73+
a
6174
---- binlog_format=mixed ----
6275
[on slave]
6376
include/stop_slave.inc
@@ -83,46 +96,69 @@ SET @@session.binlog_format = STATEMENT;
8396
* Row-only engine and binlog_format=statement: innodb-specific message
8497
INSERT INTO t_row VALUES (1);
8598
ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
99+
SELECT * FROM t_row /* should be empty */;
100+
a
86101
* Row-only engine and binlog_format=statement: generic message
87102
SET @@session.debug= '+d,no_innodb_binlog_errors';
88103
INSERT INTO t_row VALUES (1);
89104
ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-logging.
105+
SELECT * FROM t_row /* should be empty */;
106+
a
90107
* Same statement, but db filtered out - no error
91108
USE other;
92109
INSERT INTO test.t_row VALUES (1);
93110
USE test;
94111
SET @@session.debug= '';
112+
SELECT * FROM t_row /* should contain the value 1 */;
113+
a
114+
1
95115
* Row injection and binlog_format=statement: BINLOG statement
96116
BINLOG '
97117
cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
98118
cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
99119
';
100120
ERROR HY000: Cannot execute row injection: binlogging impossible since BINLOG_FORMAT = STATEMENT.
121+
SELECT * FROM t /* should be empty */;
122+
a
101123
* Same statement, but db filtered out - no error
102124
USE other;
103125
BINLOG '
104126
cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
105127
cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
106128
';
107129
USE test;
130+
SELECT * FROM t /* should contain the value 1 */;
131+
a
132+
1
133+
DELETE FROM t;
108134
* Unsafe statement and binlog_format=statement
109-
INSERT INTO t VALUES (UUID());
135+
INSERT INTO t VALUES (COALESCE(1, UUID()));
110136
Warnings:
111137
Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave.
138+
SELECT * FROM t /* should contain the value 1 */;
139+
a
140+
1
141+
DELETE FROM t;
112142
* Same statement, but db filtered out - no message
113143
USE other;
114-
INSERT INTO test.t VALUES (UUID());
144+
INSERT INTO test.t VALUES (COALESCE(1, UUID()));
115145
USE test;
146+
SELECT * FROM t /* should contain the value 1 */;
147+
a
148+
1
149+
DELETE FROM t;
116150
---- master: binlog_format=mixed, slave: binlog_format=statement ----
117151
SET @@global.binlog_format = MIXED;
118152
SET @@session.binlog_format = MIXED;
119153
* Row injection and binlog_format=statement: in slave sql thread
120-
INSERT INTO t VALUES (UUID());
154+
INSERT INTO t VALUES (COALESCE(1, UUID()));
121155
[on slave]
122156
--source include/wait_for_slave_sql_error_and_skip.inc
123157
Last_SQL_Error = Error 'Cannot execute row injection: binlogging impossible since BINLOG_FORMAT = STATEMENT.' on opening tables
124158
set global sql_slave_skip_counter=1;
125159
include/start_slave.inc
160+
SELECT * FROM t /* should be empty */;
161+
a
126162
[on master]
127163
==== Clean up ====
128164
DROP TRIGGER trig_autoinc;

mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,20 @@ AAAAAAAAAAAAAAAAAADWBFVKEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
9393
--error ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE
9494
INSERT INTO t_self_logging VALUES (1);
9595
DROP trigger trig_1;
96+
SELECT * FROM t_self_logging /* Should be empty */;
97+
SELECT * FROM t /* Should be empty */;
9698

9799
--echo * Modify both row-only and stmt-only table
98100
--eval CREATE TRIGGER trig_2 AFTER INSERT ON t_stmt FOR EACH ROW BEGIN INSERT INTO t_row VALUES(1); END
99101
--error ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE
100102
INSERT INTO t_stmt VALUES (1);
103+
SELECT * FROM t_stmt /* should be empty */;
101104
DROP TRIGGER trig_2;
102105

103106
--echo * Stmt-only table and binlog_format=row
104107
--error ER_BINLOG_ROW_MODE_AND_STMT_ENGINE
105108
INSERT INTO t_stmt VALUES (1);
109+
SELECT * FROM t_stmt /* should be empty */;
106110

107111
--echo * Row injection and stmt-only table: in slave sql thread
108112
INSERT INTO t_slave_stmt VALUES (1);
@@ -112,7 +116,11 @@ INSERT INTO t_slave_stmt VALUES (1);
112116
--let $slave_sql_errno= 1642
113117
--let $show_sql_error= 1
114118
--source include/wait_for_slave_sql_error_and_skip.inc
119+
--connection slave
120+
SELECT * FROM t_slave_stmt /* should be empty */;
115121

122+
--echo [on master]
123+
--connection master
116124
--echo * Row injection and stmt-only table: use BINLOG statement
117125
# This is a Table_map_event and a Write_rows_event. Together, they are
118126
# equivalent to 'INSERT INTO t_stmt VALUES (1)'
@@ -121,6 +129,7 @@ BINLOG '
121129
1gRVShMBAAAALwAAAEABAAAAABcAAAAAAAAABHRlc3QABnRfc3RtdAABDwJkAAE=
122130
1gRVShcBAAAAIAAAAGABAAAQABcAAAAAAAEAAf/+ATE=
123131
';
132+
SELECT * FROM t_stmt /* should be empty */;
124133

125134

126135
--echo ---- binlog_format=mixed ----
@@ -161,6 +170,7 @@ SET @@session.binlog_format = STATEMENT;
161170
--echo * Row-only engine and binlog_format=statement: innodb-specific message
162171
--error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
163172
INSERT INTO t_row VALUES (1);
173+
SELECT * FROM t_row /* should be empty */;
164174

165175
# Commented out since innodb gives an error (this is a bug)
166176
#--echo * Same statement, but db filtered out - no error
@@ -172,12 +182,14 @@ INSERT INTO t_row VALUES (1);
172182
SET @@session.debug= '+d,no_innodb_binlog_errors';
173183
--error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
174184
INSERT INTO t_row VALUES (1);
185+
SELECT * FROM t_row /* should be empty */;
175186

176187
--echo * Same statement, but db filtered out - no error
177188
USE other;
178189
INSERT INTO test.t_row VALUES (1);
179190
USE test;
180191
SET @@session.debug= '';
192+
SELECT * FROM t_row /* should contain the value 1 */;
181193

182194
--echo * Row injection and binlog_format=statement: BINLOG statement
183195
# This is a Table_map_event and a Write_rows_event. Together, they are
@@ -187,6 +199,7 @@ BINLOG '
187199
cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
188200
cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
189201
';
202+
SELECT * FROM t /* should be empty */;
190203

191204
--echo * Same statement, but db filtered out - no error
192205
# This is a Table_map_event and a Write_rows_event. Together, they are
@@ -197,15 +210,21 @@ cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
197210
cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
198211
';
199212
USE test;
213+
SELECT * FROM t /* should contain the value 1 */;
214+
DELETE FROM t;
200215

201216
--echo * Unsafe statement and binlog_format=statement
202217
# This will give a warning.
203-
INSERT INTO t VALUES (UUID());
218+
INSERT INTO t VALUES (COALESCE(1, UUID()));
219+
SELECT * FROM t /* should contain the value 1 */;
220+
DELETE FROM t;
204221

205222
--echo * Same statement, but db filtered out - no message
206223
USE other;
207-
INSERT INTO test.t VALUES (UUID());
224+
INSERT INTO test.t VALUES (COALESCE(1, UUID()));
208225
USE test;
226+
SELECT * FROM t /* should contain the value 1 */;
227+
DELETE FROM t;
209228

210229

211230
--echo ---- master: binlog_format=mixed, slave: binlog_format=statement ----
@@ -214,14 +233,15 @@ SET @@global.binlog_format = MIXED;
214233
SET @@session.binlog_format = MIXED;
215234

216235
--echo * Row injection and binlog_format=statement: in slave sql thread
217-
INSERT INTO t VALUES (UUID());
236+
INSERT INTO t VALUES (COALESCE(1, UUID()));
218237
--echo [on slave]
219238
--connection slave
220239
# 1644 = ER_BINLOG_ROW_INJECTION_AND_STMT_MODE
221240
--let $slave_sql_errno= 1644
222241
--let $show_sql_error= 1
223242
--source include/wait_for_slave_sql_error_and_skip.inc
224-
243+
--connection slave
244+
SELECT * FROM t /* should be empty */;
225245
--echo [on master]
226246
--connection master
227247

0 commit comments

Comments
 (0)