~linuxjedi/drizzle/trunk-bug-667053

« back to all changes in this revision

Viewing changes to mysql-test/suite/rpl/t/rpl_variables.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
# ==== Purpose ====
 
2
#
 
3
# Test that queries referencing variables are replicated correctly in
 
4
# mixed and row-based logging mode.
 
5
#
 
6
#
 
7
# ==== Method ====
 
8
#
 
9
# The test simply does a lot of "INSERT INTO t1 VALUES (@@variable)"
 
10
# and checks the result on the slave.
 
11
#
 
12
# Statements referencing a variable only replicate correctly in mixed
 
13
# and row mode: in row mode, the values inserted are replicated.  In
 
14
# mixed mode, statements referencing a variable are marked as unsafe,
 
15
# meaning they will be replicated by row.  In statement mode, the
 
16
# slave's value will be used and replication will break. (Except in a
 
17
# small number of special cases: random seeds, insert_id, and
 
18
# auto_increment are replicated).
 
19
#
 
20
# We test the following variable scopes:
 
21
#  - server system variables
 
22
#  - server session variables
 
23
#  - server "both" variables
 
24
#  - user variables
 
25
#
 
26
# For each scope, we use variables of the following types if they
 
27
# exist:
 
28
#  - boolean
 
29
#  - numeric
 
30
#  - string
 
31
#  - enumeration variables
 
32
#
 
33
# We use these types of variables in the following contexts:
 
34
#  - directly
 
35
#  - from a stored procedure
 
36
#  - from a stored function
 
37
#  - from a trigger
 
38
#  - from a prepared statement
 
39
#
 
40
# For all variables where it is possible, we set the variable to one
 
41
# value on slave, and insert it on the master with two distinct
 
42
# values.
 
43
#
 
44
# The same insertions are made in four different tables using direct
 
45
# insert, stored procedure, stored function, or trigger.  Then all
 
46
# eight resulting tables on master and slave are compared.
 
47
#
 
48
#
 
49
# ==== Related bugs ====
 
50
#
 
51
# BUG#31168: @@hostname does not replicate
 
52
#
 
53
#
 
54
# ==== Related test cases ====
 
55
#
 
56
# binlog.binlog_unsafe tests that a warning is issued if system
 
57
# variables are replicated in statement mode.
 
58
#
 
59
# rpl.rpl_variables_stm tests the small subset of variables that
 
60
# actually can be replicated safely in statement mode.
 
61
 
 
62
 
 
63
source include/master-slave.inc;
 
64
source include/have_binlog_format_mixed_or_row.inc;
 
65
 
 
66
 
 
67
--echo ==== Initialization ====
 
68
 
 
69
# Backup the values of global variables so that they can be restored
 
70
# later.
 
71
--echo [on master]
 
72
connection master;
 
73
SET @m_default_week_format=  @@global.default_week_format;
 
74
SET @m_init_slave=           @@global.init_slave;
 
75
SET @m_lc_time_names=        @@global.lc_time_names;
 
76
SET @m_low_priority_updates= @@global.low_priority_updates;
 
77
SET @m_relay_log_purge=      @@global.relay_log_purge;
 
78
SET @m_slave_exec_mode=      @@global.slave_exec_mode;
 
79
SET @m_sql_mode=             @@global.sql_mode;
 
80
SET @m_sync_binlog=          @@global.sync_binlog;
 
81
 
 
82
--echo [on slave]
 
83
connection slave;
 
84
SET @s_default_week_format=  @@global.default_week_format;
 
85
SET @s_init_slave=           @@global.init_slave;
 
86
SET @s_lc_time_names=        @@global.lc_time_names;
 
87
SET @s_low_priority_updates= @@global.low_priority_updates;
 
88
SET @s_relay_log_purge=      @@global.relay_log_purge;
 
89
SET @s_slave_exec_mode=      @@global.slave_exec_mode;
 
90
SET @s_sql_mode=             @@global.sql_mode;
 
91
SET @s_sync_binlog=          @@global.sync_binlog;
 
92
 
 
93
# Set global variables on slave to something different than on master.
 
94
SET @@global.relay_log_purge = OFF;
 
95
SET @@global.sync_binlog = 1000000;
 
96
SET @@global.slave_exec_mode = 'STRICT';
 
97
SET @@sql_big_selects = OFF;
 
98
SET @@last_insert_id = 10;
 
99
SET @@global.low_priority_updates = OFF;
 
100
SET @@local.low_priority_updates = OFF;
 
101
SET @@global.default_week_format = 1;
 
102
SET @@local.default_week_format = 2;
 
103
SET @@global.lc_time_names = 'zh_HK';
 
104
SET @@local.lc_time_names = 'zh_TW';
 
105
SET @@global.sql_mode = 'ALLOW_INVALID_DATES';
 
106
SET @@local.sql_mode = 'ANSI_QUOTES,ERROR_FOR_DIVISION_BY_ZERO,HIGH_NOT_PRECEDENCE';
 
107
SET @user_num = 10;
 
108
SET @user_text = 'Alunda';
 
109
 
 
110
# Stop slave so that we get a fresh sql thread, reading the slave's
 
111
# global values of variables into its local copies.
 
112
--echo [on master]
 
113
connection master;
 
114
source include/reset_master_and_slave.inc;
 
115
 
 
116
# We would have wanted to set this together with the other variables
 
117
# above, but can't because it affects how the slave works.
 
118
--echo [on slave]
 
119
connection slave;
 
120
SET @@global.init_slave = 'ant';
 
121
 
 
122
 
 
123
--echo [on master]
 
124
connection master;
 
125
 
 
126
# Tables where everything happens.
 
127
CREATE TABLE tstmt (id INT AUTO_INCREMENT PRIMARY KEY,
 
128
                    truth BOOLEAN,
 
129
                    num INT,
 
130
                    text VARCHAR(100));
 
131
CREATE TABLE tproc LIKE tstmt;
 
132
CREATE TABLE tfunc LIKE tstmt;
 
133
CREATE TABLE ttrig LIKE tstmt;
 
134
CREATE TABLE tprep LIKE tstmt;
 
135
 
 
136
# Table on which we put a trigger.
 
137
CREATE TABLE trigger_table (text CHAR(4));
 
138
 
 
139
 
 
140
--echo ==== Insert variables directly ====
 
141
 
 
142
--echo ----  global variables ----
 
143
 
 
144
# boolean
 
145
SET @@global.relay_log_purge = ON;
 
146
INSERT INTO tstmt(truth) VALUES (@@global.relay_log_purge);
 
147
SET @@global.relay_log_purge = OFF;
 
148
INSERT INTO tstmt(truth) VALUES (@@global.relay_log_purge);
 
149
 
 
150
# numeric
 
151
SET @@global.sync_binlog = 2000000;
 
152
INSERT INTO tstmt(num) VALUES (@@global.sync_binlog);
 
153
SET @@global.sync_binlog = 3000000;
 
154
INSERT INTO tstmt(num) VALUES (@@global.sync_binlog);
 
155
 
 
156
# string
 
157
SET @@global.init_slave = 'bison';
 
158
INSERT INTO tstmt(text) VALUES (@@global.init_slave);
 
159
SET @@global.init_slave = 'cat';
 
160
INSERT INTO tstmt(text) VALUES (@@global.init_slave);
 
161
 
 
162
# enumeration
 
163
SET @@global.slave_exec_mode = 'IDEMPOTENT';
 
164
INSERT INTO tstmt(text) VALUES (@@global.slave_exec_mode);
 
165
SET @@global.slave_exec_mode = 'STRICT';
 
166
INSERT INTO tstmt(text) VALUES (@@global.slave_exec_mode);
 
167
 
 
168
 
 
169
--echo ---- session variables ----
 
170
 
 
171
# boolean
 
172
SET @@sql_big_selects = ON;
 
173
INSERT INTO tstmt(truth) VALUES (@@sql_big_selects);
 
174
SET @@sql_big_selects = OFF;
 
175
INSERT INTO tstmt(truth) VALUES (@@sql_big_selects);
 
176
 
 
177
# numeric
 
178
SET @@last_insert_id = 20;
 
179
INSERT INTO tstmt(num) VALUES (@@last_insert_id);
 
180
SET @@last_insert_id = 30;
 
181
INSERT INTO tstmt(num) VALUES (@@last_insert_id);
 
182
 
 
183
--echo ---- global and session variables ----
 
184
 
 
185
# boolean
 
186
SET @@global.low_priority_updates = ON;
 
187
SET @@local.low_priority_updates = OFF;
 
188
INSERT INTO tstmt(truth) VALUES (@@global.low_priority_updates);
 
189
INSERT INTO tstmt(truth) VALUES (@@local.low_priority_updates);
 
190
SET @@global.low_priority_updates = OFF;
 
191
SET @@local.low_priority_updates = ON;
 
192
INSERT INTO tstmt(truth) VALUES (@@global.low_priority_updates);
 
193
INSERT INTO tstmt(truth) VALUES (@@local.low_priority_updates);
 
194
 
 
195
# numeric
 
196
SET @@global.default_week_format = 3;
 
197
SET @@local.default_week_format = 4;
 
198
INSERT INTO tstmt(num) VALUES (@@global.default_week_format);
 
199
INSERT INTO tstmt(num) VALUES (@@local.default_week_format);
 
200
SET @@global.default_week_format = 5;
 
201
SET @@local.default_week_format = 6;
 
202
INSERT INTO tstmt(num) VALUES (@@global.default_week_format);
 
203
INSERT INTO tstmt(num) VALUES (@@local.default_week_format);
 
204
 
 
205
# string
 
206
SET @@global.lc_time_names = 'sv_SE';
 
207
SET @@local.lc_time_names = 'sv_FI';
 
208
INSERT INTO tstmt(text) VALUES (@@global.lc_time_names);
 
209
INSERT INTO tstmt(text) VALUES (@@local.lc_time_names);
 
210
SET @@global.lc_time_names = 'ar_TN';
 
211
SET @@local.lc_time_names = 'ar_IQ';
 
212
INSERT INTO tstmt(text) VALUES (@@global.lc_time_names);
 
213
INSERT INTO tstmt(text) VALUES (@@local.lc_time_names);
 
214
 
 
215
# enum
 
216
SET @@global.sql_mode = '';
 
217
SET @@local.sql_mode = 'IGNORE_SPACE,NO_AUTO_CREATE_USER';
 
218
INSERT INTO tstmt(text) VALUES (@@global.sql_mode);
 
219
INSERT INTO tstmt(text) VALUES (@@local.sql_mode);
 
220
SET @@global.sql_mode = 'NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION';
 
221
SET @@local.sql_mode = 'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS';
 
222
INSERT INTO tstmt(text) VALUES (@@global.sql_mode);
 
223
INSERT INTO tstmt(text) VALUES (@@local.sql_mode);
 
224
 
 
225
--echo ---- user variables ----
 
226
 
 
227
# numeric
 
228
SET @user_num = 20;
 
229
INSERT INTO tstmt(num) VALUES (@user_num);
 
230
SET @user_num = 30;
 
231
INSERT INTO tstmt(num) VALUES (@user_num);
 
232
 
 
233
# string
 
234
SET @user_text = 'Bergsbrunna';
 
235
INSERT INTO tstmt(text) VALUES (@user_text);
 
236
SET @user_text = 'Centrum';
 
237
INSERT INTO tstmt(text) VALUES (@user_text);
 
238
 
 
239
 
 
240
--echo ==== Insert variables from a stored procedure ====
 
241
 
 
242
DELIMITER |;
 
243
CREATE PROCEDURE proc()
 
244
BEGIN
 
245
 
 
246
  # GLOBAL
 
247
 
 
248
  # boolean
 
249
  SET @@global.relay_log_purge = ON;
 
250
  INSERT INTO tproc(truth) VALUES (@@global.relay_log_purge);
 
251
  SET @@global.relay_log_purge = OFF;
 
252
  INSERT INTO tproc(truth) VALUES (@@global.relay_log_purge);
 
253
 
 
254
  # numeric
 
255
  SET @@global.sync_binlog = 2000000;
 
256
  INSERT INTO tproc(num) VALUES (@@global.sync_binlog);
 
257
  SET @@global.sync_binlog = 3000000;
 
258
  INSERT INTO tproc(num) VALUES (@@global.sync_binlog);
 
259
 
 
260
  # string
 
261
  SET @@global.init_slave = 'bison';
 
262
  INSERT INTO tproc(text) VALUES (@@global.init_slave);
 
263
  SET @@global.init_slave = 'cat';
 
264
  INSERT INTO tproc(text) VALUES (@@global.init_slave);
 
265
 
 
266
  # enumeration
 
267
  SET @@global.slave_exec_mode = 'IDEMPOTENT';
 
268
  INSERT INTO tproc(text) VALUES (@@global.slave_exec_mode);
 
269
  SET @@global.slave_exec_mode = 'STRICT';
 
270
  INSERT INTO tproc(text) VALUES (@@global.slave_exec_mode);
 
271
 
 
272
  # SESSION
 
273
 
 
274
  # boolean
 
275
  SET @@sql_big_selects = ON;
 
276
  INSERT INTO tproc(truth) VALUES (@@sql_big_selects);
 
277
  SET @@sql_big_selects = OFF;
 
278
  INSERT INTO tproc(truth) VALUES (@@sql_big_selects);
 
279
 
 
280
  # numeric
 
281
  SET @@last_insert_id = 20;
 
282
  INSERT INTO tproc(num) VALUES (@@last_insert_id);
 
283
  SET @@last_insert_id = 30;
 
284
  INSERT INTO tproc(num) VALUES (@@last_insert_id);
 
285
 
 
286
  # BOTH
 
287
 
 
288
  # boolean
 
289
  SET @@global.low_priority_updates = ON;
 
290
  SET @@local.low_priority_updates = OFF;
 
291
  INSERT INTO tproc(truth) VALUES (@@global.low_priority_updates);
 
292
  INSERT INTO tproc(truth) VALUES (@@local.low_priority_updates);
 
293
  SET @@global.low_priority_updates = OFF;
 
294
  SET @@local.low_priority_updates = ON;
 
295
  INSERT INTO tproc(truth) VALUES (@@global.low_priority_updates);
 
296
  INSERT INTO tproc(truth) VALUES (@@local.low_priority_updates);
 
297
 
 
298
  # numeric
 
299
  SET @@global.default_week_format = 3;
 
300
  SET @@local.default_week_format = 4;
 
301
  INSERT INTO tproc(num) VALUES (@@global.default_week_format);
 
302
  INSERT INTO tproc(num) VALUES (@@local.default_week_format);
 
303
  SET @@global.default_week_format = 5;
 
304
  SET @@local.default_week_format = 6;
 
305
  INSERT INTO tproc(num) VALUES (@@global.default_week_format);
 
306
  INSERT INTO tproc(num) VALUES (@@local.default_week_format);
 
307
 
 
308
  # text
 
309
  SET @@global.lc_time_names = 'sv_SE';
 
310
  SET @@local.lc_time_names = 'sv_FI';
 
311
  INSERT INTO tproc(text) VALUES (@@global.lc_time_names);
 
312
  INSERT INTO tproc(text) VALUES (@@local.lc_time_names);
 
313
  SET @@global.lc_time_names = 'ar_TN';
 
314
  SET @@local.lc_time_names = 'ar_IQ';
 
315
  INSERT INTO tproc(text) VALUES (@@global.lc_time_names);
 
316
  INSERT INTO tproc(text) VALUES (@@local.lc_time_names);
 
317
 
 
318
  # enum
 
319
  SET @@global.sql_mode = '';
 
320
  SET @@local.sql_mode = 'IGNORE_SPACE,NO_AUTO_CREATE_USER';
 
321
  INSERT INTO tproc(text) VALUES (@@global.sql_mode);
 
322
  INSERT INTO tproc(text) VALUES (@@local.sql_mode);
 
323
  SET @@global.sql_mode = 'NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION';
 
324
  SET @@local.sql_mode = 'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS';
 
325
  INSERT INTO tproc(text) VALUES (@@global.sql_mode);
 
326
  INSERT INTO tproc(text) VALUES (@@local.sql_mode);
 
327
 
 
328
  # USER
 
329
 
 
330
  # numeric
 
331
  SET @user_num = 20;
 
332
  INSERT INTO tproc(num) VALUES (@user_num);
 
333
  SET @user_num = 30;
 
334
  INSERT INTO tproc(num) VALUES (@user_num);
 
335
 
 
336
  # string
 
337
  SET @user_text = 'Bergsbrunna';
 
338
  INSERT INTO tproc(text) VALUES (@user_text);
 
339
  SET @user_text = 'Centrum';
 
340
  INSERT INTO tproc(text) VALUES (@user_text);
 
341
 
 
342
END|
 
343
DELIMITER ;|
 
344
 
 
345
CALL proc();
 
346
 
 
347
 
 
348
--echo ==== Insert variables from a stored function ====
 
349
 
 
350
DELIMITER |;
 
351
CREATE FUNCTION func()
 
352
RETURNS INT
 
353
BEGIN
 
354
 
 
355
  # GLOBAL
 
356
 
 
357
  # boolean
 
358
  SET @@global.relay_log_purge = ON;
 
359
  INSERT INTO tfunc(truth) VALUES (@@global.relay_log_purge);
 
360
  SET @@global.relay_log_purge = OFF;
 
361
  INSERT INTO tfunc(truth) VALUES (@@global.relay_log_purge);
 
362
 
 
363
  # numeric
 
364
  SET @@global.sync_binlog = 2000000;
 
365
  INSERT INTO tfunc(num) VALUES (@@global.sync_binlog);
 
366
  SET @@global.sync_binlog = 3000000;
 
367
  INSERT INTO tfunc(num) VALUES (@@global.sync_binlog);
 
368
 
 
369
  # string
 
370
  SET @@global.init_slave = 'bison';
 
371
  INSERT INTO tfunc(text) VALUES (@@global.init_slave);
 
372
  SET @@global.init_slave = 'cat';
 
373
  INSERT INTO tfunc(text) VALUES (@@global.init_slave);
 
374
 
 
375
  # enumeration
 
376
  SET @@global.slave_exec_mode = 'IDEMPOTENT';
 
377
  INSERT INTO tfunc(text) VALUES (@@global.slave_exec_mode);
 
378
  SET @@global.slave_exec_mode = 'STRICT';
 
379
  INSERT INTO tfunc(text) VALUES (@@global.slave_exec_mode);
 
380
 
 
381
  # SESSION
 
382
 
 
383
  # boolean
 
384
  SET @@sql_big_selects = ON;
 
385
  INSERT INTO tfunc(truth) VALUES (@@sql_big_selects);
 
386
  SET @@sql_big_selects = OFF;
 
387
  INSERT INTO tfunc(truth) VALUES (@@sql_big_selects);
 
388
 
 
389
  # numeric
 
390
  SET @@last_insert_id = 20;
 
391
  INSERT INTO tfunc(num) VALUES (@@last_insert_id);
 
392
  SET @@last_insert_id = 30;
 
393
  INSERT INTO tfunc(num) VALUES (@@last_insert_id);
 
394
 
 
395
  # BOTH
 
396
 
 
397
  # boolean
 
398
  SET @@global.low_priority_updates = ON;
 
399
  SET @@local.low_priority_updates = OFF;
 
400
  INSERT INTO tfunc(truth) VALUES (@@global.low_priority_updates);
 
401
  INSERT INTO tfunc(truth) VALUES (@@local.low_priority_updates);
 
402
  SET @@global.low_priority_updates = OFF;
 
403
  SET @@local.low_priority_updates = ON;
 
404
  INSERT INTO tfunc(truth) VALUES (@@global.low_priority_updates);
 
405
  INSERT INTO tfunc(truth) VALUES (@@local.low_priority_updates);
 
406
 
 
407
  # numeric
 
408
  SET @@global.default_week_format = 3;
 
409
  SET @@local.default_week_format = 4;
 
410
  INSERT INTO tfunc(num) VALUES (@@global.default_week_format);
 
411
  INSERT INTO tfunc(num) VALUES (@@local.default_week_format);
 
412
  SET @@global.default_week_format = 5;
 
413
  SET @@local.default_week_format = 6;
 
414
  INSERT INTO tfunc(num) VALUES (@@global.default_week_format);
 
415
  INSERT INTO tfunc(num) VALUES (@@local.default_week_format);
 
416
 
 
417
  # text
 
418
  SET @@global.lc_time_names = 'sv_SE';
 
419
  SET @@local.lc_time_names = 'sv_FI';
 
420
  INSERT INTO tfunc(text) VALUES (@@global.lc_time_names);
 
421
  INSERT INTO tfunc(text) VALUES (@@local.lc_time_names);
 
422
  SET @@global.lc_time_names = 'ar_TN';
 
423
  SET @@local.lc_time_names = 'ar_IQ';
 
424
  INSERT INTO tfunc(text) VALUES (@@global.lc_time_names);
 
425
  INSERT INTO tfunc(text) VALUES (@@local.lc_time_names);
 
426
 
 
427
  # enum
 
428
  SET @@global.sql_mode = '';
 
429
  SET @@local.sql_mode = 'IGNORE_SPACE,NO_AUTO_CREATE_USER';
 
430
  INSERT INTO tfunc(text) VALUES (@@global.sql_mode);
 
431
  INSERT INTO tfunc(text) VALUES (@@local.sql_mode);
 
432
  SET @@global.sql_mode = 'NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION';
 
433
  SET @@local.sql_mode = 'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS';
 
434
  INSERT INTO tfunc(text) VALUES (@@global.sql_mode);
 
435
  INSERT INTO tfunc(text) VALUES (@@local.sql_mode);
 
436
 
 
437
  # USER
 
438
 
 
439
  # numeric
 
440
  SET @user_num = 20;
 
441
  INSERT INTO tfunc(num) VALUES (@user_num);
 
442
  SET @user_num = 30;
 
443
  INSERT INTO tfunc(num) VALUES (@user_num);
 
444
 
 
445
  # string
 
446
  SET @user_text = 'Bergsbrunna';
 
447
  INSERT INTO tfunc(text) VALUES (@user_text);
 
448
  SET @user_text = 'Centrum';
 
449
  INSERT INTO tfunc(text) VALUES (@user_text);
 
450
 
 
451
  RETURN 0;
 
452
END|
 
453
DELIMITER ;|
 
454
 
 
455
SELECT func();
 
456
 
 
457
 
 
458
--echo ==== Insert variables from a trigger ====
 
459
 
 
460
DELIMITER |;
 
461
CREATE TRIGGER trig
 
462
BEFORE INSERT ON trigger_table
 
463
FOR EACH ROW
 
464
BEGIN
 
465
 
 
466
  # GLOBAL
 
467
 
 
468
  # boolean
 
469
  SET @@global.relay_log_purge = ON;
 
470
  INSERT INTO ttrig(truth) VALUES (@@global.relay_log_purge);
 
471
  SET @@global.relay_log_purge = OFF;
 
472
  INSERT INTO ttrig(truth) VALUES (@@global.relay_log_purge);
 
473
 
 
474
  # numeric
 
475
  SET @@global.sync_binlog = 2000000;
 
476
  INSERT INTO ttrig(num) VALUES (@@global.sync_binlog);
 
477
  SET @@global.sync_binlog = 3000000;
 
478
  INSERT INTO ttrig(num) VALUES (@@global.sync_binlog);
 
479
 
 
480
  # string
 
481
  SET @@global.init_slave = 'bison';
 
482
  INSERT INTO ttrig(text) VALUES (@@global.init_slave);
 
483
  SET @@global.init_slave = 'cat';
 
484
  INSERT INTO ttrig(text) VALUES (@@global.init_slave);
 
485
 
 
486
  # enumeration
 
487
  SET @@global.slave_exec_mode = 'IDEMPOTENT';
 
488
  INSERT INTO ttrig(text) VALUES (@@global.slave_exec_mode);
 
489
  SET @@global.slave_exec_mode = 'STRICT';
 
490
  INSERT INTO ttrig(text) VALUES (@@global.slave_exec_mode);
 
491
 
 
492
  # SESSION
 
493
 
 
494
  # boolean
 
495
  SET @@sql_big_selects = ON;
 
496
  INSERT INTO ttrig(truth) VALUES (@@sql_big_selects);
 
497
  SET @@sql_big_selects = OFF;
 
498
  INSERT INTO ttrig(truth) VALUES (@@sql_big_selects);
 
499
 
 
500
  # numeric
 
501
  SET @@last_insert_id = 20;
 
502
  INSERT INTO ttrig(num) VALUES (@@last_insert_id);
 
503
  SET @@last_insert_id = 30;
 
504
  INSERT INTO ttrig(num) VALUES (@@last_insert_id);
 
505
 
 
506
  # BOTH
 
507
 
 
508
  # boolean
 
509
  SET @@global.low_priority_updates = ON;
 
510
  SET @@local.low_priority_updates = OFF;
 
511
  INSERT INTO ttrig(truth) VALUES (@@global.low_priority_updates);
 
512
  INSERT INTO ttrig(truth) VALUES (@@local.low_priority_updates);
 
513
  SET @@global.low_priority_updates = OFF;
 
514
  SET @@local.low_priority_updates = ON;
 
515
  INSERT INTO ttrig(truth) VALUES (@@global.low_priority_updates);
 
516
  INSERT INTO ttrig(truth) VALUES (@@local.low_priority_updates);
 
517
 
 
518
  # numeric
 
519
  SET @@global.default_week_format = 3;
 
520
  SET @@local.default_week_format = 4;
 
521
  INSERT INTO ttrig(num) VALUES (@@global.default_week_format);
 
522
  INSERT INTO ttrig(num) VALUES (@@local.default_week_format);
 
523
  SET @@global.default_week_format = 5;
 
524
  SET @@local.default_week_format = 6;
 
525
  INSERT INTO ttrig(num) VALUES (@@global.default_week_format);
 
526
  INSERT INTO ttrig(num) VALUES (@@local.default_week_format);
 
527
 
 
528
  # text
 
529
  SET @@global.lc_time_names = 'sv_SE';
 
530
  SET @@local.lc_time_names = 'sv_FI';
 
531
  INSERT INTO ttrig(text) VALUES (@@global.lc_time_names);
 
532
  INSERT INTO ttrig(text) VALUES (@@local.lc_time_names);
 
533
  SET @@global.lc_time_names = 'ar_TN';
 
534
  SET @@local.lc_time_names = 'ar_IQ';
 
535
  INSERT INTO ttrig(text) VALUES (@@global.lc_time_names);
 
536
  INSERT INTO ttrig(text) VALUES (@@local.lc_time_names);
 
537
 
 
538
  # enum
 
539
  SET @@global.sql_mode = '';
 
540
  SET @@local.sql_mode = 'IGNORE_SPACE,NO_AUTO_CREATE_USER';
 
541
  INSERT INTO ttrig(text) VALUES (@@global.sql_mode);
 
542
  INSERT INTO ttrig(text) VALUES (@@local.sql_mode);
 
543
  SET @@global.sql_mode = 'NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION';
 
544
  SET @@local.sql_mode = 'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS';
 
545
  INSERT INTO ttrig(text) VALUES (@@global.sql_mode);
 
546
  INSERT INTO ttrig(text) VALUES (@@local.sql_mode);
 
547
 
 
548
  # USER
 
549
 
 
550
  # numeric
 
551
  SET @user_num = 20;
 
552
  INSERT INTO ttrig(num) VALUES (@user_num);
 
553
  SET @user_num = 30;
 
554
  INSERT INTO ttrig(num) VALUES (@user_num);
 
555
 
 
556
  # string
 
557
  SET @user_text = 'Bergsbrunna';
 
558
  INSERT INTO ttrig(text) VALUES (@user_text);
 
559
  SET @user_text = 'Centrum';
 
560
  INSERT INTO ttrig(text) VALUES (@user_text);
 
561
END|
 
562
DELIMITER ;|
 
563
 
 
564
INSERT INTO trigger_table VALUES ('bye.');
 
565
 
 
566
 
 
567
--echo ==== Insert variables from a prepared statement ====
 
568
 
 
569
# GLOBAL
 
570
 
 
571
# boolean
 
572
PREPARE p1 FROM 'SET @@global.relay_log_purge = ON';
 
573
PREPARE p2 FROM 'INSERT INTO tprep(truth) VALUES (@@global.relay_log_purge)';
 
574
PREPARE p3 FROM 'SET @@global.relay_log_purge = OFF';
 
575
PREPARE p4 FROM 'INSERT INTO tprep(truth) VALUES (@@global.relay_log_purge)';
 
576
 
 
577
# numeric
 
578
PREPARE p5 FROM 'SET @@global.sync_binlog = 2000000';
 
579
PREPARE p6 FROM 'INSERT INTO tprep(num) VALUES (@@global.sync_binlog)';
 
580
PREPARE p7 FROM 'SET @@global.sync_binlog = 3000000';
 
581
PREPARE p8 FROM 'INSERT INTO tprep(num) VALUES (@@global.sync_binlog)';
 
582
 
 
583
# string
 
584
PREPARE p9 FROM 'SET @@global.init_slave = \'bison\'';
 
585
PREPARE p10 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)';
 
586
PREPARE p11 FROM 'SET @@global.init_slave = \'cat\'';
 
587
PREPARE p12 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)';
 
588
 
 
589
# enumeration
 
590
PREPARE p13 FROM 'SET @@global.slave_exec_mode = \'IDEMPOTENT\'';
 
591
PREPARE p14 FROM 'INSERT INTO tprep(text) VALUES (@@global.slave_exec_mode)';
 
592
PREPARE p15 FROM 'SET @@global.slave_exec_mode = \'STRICT\'';
 
593
PREPARE p16 FROM 'INSERT INTO tprep(text) VALUES (@@global.slave_exec_mode)';
 
594
 
 
595
# SESSION
 
596
 
 
597
# boolean
 
598
PREPARE p17 FROM 'SET @@sql_big_selects = ON';
 
599
PREPARE p18 FROM 'INSERT INTO tprep(truth) VALUES (@@sql_big_selects)';
 
600
PREPARE p19 FROM 'SET @@sql_big_selects = OFF';
 
601
PREPARE p20 FROM 'INSERT INTO tprep(truth) VALUES (@@sql_big_selects)';
 
602
 
 
603
# numeric
 
604
PREPARE p21 FROM 'SET @@last_insert_id = 20';
 
605
PREPARE p22 FROM 'INSERT INTO tprep(num) VALUES (@@last_insert_id)';
 
606
PREPARE p23 FROM 'SET @@last_insert_id = 30';
 
607
PREPARE p24 FROM 'INSERT INTO tprep(num) VALUES (@@last_insert_id)';
 
608
 
 
609
# BOTH
 
610
 
 
611
# boolean
 
612
PREPARE p25 FROM 'SET @@global.low_priority_updates = ON';
 
613
PREPARE p26 FROM 'SET @@local.low_priority_updates = OFF';
 
614
PREPARE p27 FROM 'INSERT INTO tprep(truth) VALUES (@@global.low_priority_updates)';
 
615
PREPARE p28 FROM 'INSERT INTO tprep(truth) VALUES (@@local.low_priority_updates)';
 
616
PREPARE p29 FROM 'SET @@global.low_priority_updates = OFF';
 
617
PREPARE p30 FROM 'SET @@local.low_priority_updates = ON';
 
618
PREPARE p31 FROM 'INSERT INTO tprep(truth) VALUES (@@global.low_priority_updates)';
 
619
PREPARE p32 FROM 'INSERT INTO tprep(truth) VALUES (@@local.low_priority_updates)';
 
620
 
 
621
# numeric
 
622
PREPARE p33 FROM 'SET @@global.default_week_format = 3';
 
623
PREPARE p34 FROM 'SET @@local.default_week_format = 4';
 
624
PREPARE p35 FROM 'INSERT INTO tprep(num) VALUES (@@global.default_week_format)';
 
625
PREPARE p36 FROM 'INSERT INTO tprep(num) VALUES (@@local.default_week_format)';
 
626
PREPARE p37 FROM 'SET @@global.default_week_format = 5';
 
627
PREPARE p38 FROM 'SET @@local.default_week_format = 6';
 
628
PREPARE p39 FROM 'INSERT INTO tprep(num) VALUES (@@global.default_week_format)';
 
629
PREPARE p40 FROM 'INSERT INTO tprep(num) VALUES (@@local.default_week_format)';
 
630
 
 
631
# text
 
632
PREPARE p41 FROM 'SET @@global.lc_time_names = \'sv_SE\'';
 
633
PREPARE p42 FROM 'SET @@local.lc_time_names = \'sv_FI\'';
 
634
PREPARE p43 FROM 'INSERT INTO tprep(text) VALUES (@@global.lc_time_names)';
 
635
PREPARE p44 FROM 'INSERT INTO tprep(text) VALUES (@@local.lc_time_names)';
 
636
PREPARE p45 FROM 'SET @@global.lc_time_names = \'ar_TN\'';
 
637
PREPARE p46 FROM 'SET @@local.lc_time_names = \'ar_IQ\'';
 
638
PREPARE p47 FROM 'INSERT INTO tprep(text) VALUES (@@global.lc_time_names)';
 
639
PREPARE p48 FROM 'INSERT INTO tprep(text) VALUES (@@local.lc_time_names)';
 
640
 
 
641
# enum
 
642
PREPARE p49 FROM 'SET @@global.sql_mode = \'\'';
 
643
PREPARE p50 FROM 'SET @@local.sql_mode = \'IGNORE_SPACE,NO_AUTO_CREATE_USER\'';
 
644
PREPARE p51 FROM 'INSERT INTO tprep(text) VALUES (@@global.sql_mode)';
 
645
PREPARE p52 FROM 'INSERT INTO tprep(text) VALUES (@@local.sql_mode)';
 
646
PREPARE p53 FROM 'SET @@global.sql_mode = \'NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,NO_DIR_IN_CREATE,NO_ENGINE_SUBSTITUTION\'';
 
647
PREPARE p54 FROM 'SET @@local.sql_mode = \'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS\'';
 
648
PREPARE p55 FROM 'INSERT INTO tprep(text) VALUES (@@global.sql_mode)';
 
649
PREPARE p56 FROM 'INSERT INTO tprep(text) VALUES (@@local.sql_mode)';
 
650
 
 
651
# USER
 
652
 
 
653
# numeric
 
654
PREPARE p57 FROM 'SET @user_num = 20';
 
655
PREPARE p58 FROM 'INSERT INTO tprep(num) VALUES (@user_num)';
 
656
PREPARE p59 FROM 'SET @user_num = 30';
 
657
PREPARE p60 FROM 'INSERT INTO tprep(num) VALUES (@user_num)';
 
658
 
 
659
# string
 
660
PREPARE p61 FROM 'SET @user_text = \'Bergsbrunna\'';
 
661
PREPARE p62 FROM 'INSERT INTO tprep(text) VALUES (@user_text)';
 
662
PREPARE p63 FROM 'SET @user_text = \'Centrum\'';
 
663
PREPARE p64 FROM 'INSERT INTO tprep(text) VALUES (@user_text)';
 
664
 
 
665
EXECUTE p1;  EXECUTE p2;  EXECUTE p3;  EXECUTE p4;  EXECUTE p5;  EXECUTE p6;
 
666
EXECUTE p7;  EXECUTE p8;  EXECUTE p9;  EXECUTE p10; EXECUTE p11; EXECUTE p12;
 
667
EXECUTE p13; EXECUTE p14; EXECUTE p15; EXECUTE p16; EXECUTE p17; EXECUTE p18;
 
668
EXECUTE p19; EXECUTE p20; EXECUTE p21; EXECUTE p22; EXECUTE p23; EXECUTE p24;
 
669
EXECUTE p25; EXECUTE p26; EXECUTE p27; EXECUTE p28; EXECUTE p29; EXECUTE p30;
 
670
EXECUTE p31; EXECUTE p32; EXECUTE p33; EXECUTE p34; EXECUTE p35; EXECUTE p36;
 
671
EXECUTE p37; EXECUTE p38; EXECUTE p39; EXECUTE p40; EXECUTE p41; EXECUTE p42;
 
672
EXECUTE p43; EXECUTE p44; EXECUTE p45; EXECUTE p46; EXECUTE p47; EXECUTE p48;
 
673
EXECUTE p49; EXECUTE p50; EXECUTE p51; EXECUTE p52; EXECUTE p53; EXECUTE p54;
 
674
EXECUTE p55; EXECUTE p56; EXECUTE p57; EXECUTE p58; EXECUTE p59; EXECUTE p60;
 
675
EXECUTE p61; EXECUTE p62; EXECUTE p63; EXECUTE p64;
 
676
 
 
677
 
 
678
--echo ==== Results ====
 
679
 
 
680
# Show the result in table test.tstmt on master...
 
681
SELECT * FROM tstmt ORDER BY id;
 
682
let $diff_table_1=master:test.tstmt;
 
683
 
 
684
# ... then compare test.tstmt on master to the other tables on master...
 
685
let $diff_table_2=master:test.tproc;
 
686
source include/diff_tables.inc;
 
687
let $diff_table_2=master:test.tfunc;
 
688
source include/diff_tables.inc;
 
689
let $diff_table_2=master:test.ttrig;
 
690
source include/diff_tables.inc;
 
691
let $diff_table_2=master:test.tprep;
 
692
source include/diff_tables.inc;
 
693
 
 
694
# ... and to all tables on slave.
 
695
connection master;
 
696
sync_slave_with_master;
 
697
let $diff_table_2=slave:test.tstmt;
 
698
source include/diff_tables.inc;
 
699
let $diff_table_2=slave:test.tproc;
 
700
source include/diff_tables.inc;
 
701
let $diff_table_2=slave:test.tfunc;
 
702
source include/diff_tables.inc;
 
703
let $diff_table_2=slave:test.ttrig;
 
704
source include/diff_tables.inc;
 
705
let $diff_table_2=slave:test.tprep;
 
706
source include/diff_tables.inc;
 
707
 
 
708
 
 
709
--echo ==== Clean up ====
 
710
 
 
711
--echo [on master]
 
712
connection master;
 
713
DROP PROCEDURE proc;
 
714
DROP FUNCTION func;
 
715
DROP TRIGGER trig;
 
716
DROP TABLE tstmt, tproc, tfunc, ttrig, tprep, trigger_table;
 
717
 
 
718
SET @@global.default_week_format=  @m_default_week_format;
 
719
SET @@global.init_slave=           @m_init_slave;
 
720
SET @@global.lc_time_names=        @m_lc_time_names;
 
721
SET @@global.low_priority_updates= @m_low_priority_updates;
 
722
SET @@global.relay_log_purge=      @m_relay_log_purge;
 
723
SET @@global.slave_exec_mode=      @m_slave_exec_mode;
 
724
SET @@global.sql_mode=             @m_sql_mode;
 
725
SET @@global.sync_binlog=          @m_sync_binlog;
 
726
 
 
727
--echo [on slave]
 
728
connection slave;
 
729
SET @@global.default_week_format=  @s_default_week_format;
 
730
SET @@global.init_slave=           @s_init_slave;
 
731
SET @@global.lc_time_names=        @s_lc_time_names;
 
732
SET @@global.low_priority_updates= @s_low_priority_updates;
 
733
SET @@global.relay_log_purge=      @s_relay_log_purge;
 
734
SET @@global.slave_exec_mode=      @s_slave_exec_mode;
 
735
SET @@global.sql_mode=             @s_sql_mode;
 
736
SET @@global.sync_binlog=          @s_sync_binlog;
 
737
 
 
738
connection master;
 
739
sync_slave_with_master;