Skip to content

Commit a591514

Browse files
author
cbell/Chuck@mysql_cab_desk.
committed
Merge [email protected]:/home/bk/mysql-5.1-new-rpl
into mysql_cab_desk.:C:/source/c++/mysql-5.1-new-rpl
2 parents f02726e + 0627a31 commit a591514

26 files changed

Lines changed: 1053 additions & 86 deletions

mysql-test/include/rpl_events.inc

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
##################################################################
2+
# Author: Giuseppe, Chuck Bell #
3+
# Date: 17-January-2007 #
4+
# Purpose: To test that event effects are replicated #
5+
# in both row based and statement based format #
6+
##################################################################
7+
8+
--disable_warnings
9+
DROP EVENT IF EXISTS test.justonce;
10+
drop table if exists t1,t2;
11+
--enable_warnings
12+
13+
# first, we need a table to record something from an event
14+
15+
eval CREATE TABLE `t1` (
16+
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
17+
`c` VARCHAR(50) NOT NULL,
18+
`ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
19+
CURRENT_TIMESTAMP,
20+
PRIMARY KEY (`id`)
21+
) ENGINE=$engine_type DEFAULT CHARSET=utf8;
22+
23+
INSERT INTO t1 (c) VALUES ('manually');
24+
25+
# then, we create the event
26+
CREATE EVENT test.justonce ON SCHEDULE AT NOW() + INTERVAL 2 SECOND DO INSERT INTO t1
27+
(c) VALUES ('from justonce');
28+
29+
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce';
30+
31+
# wait 3 seconds, so the event can trigger
32+
--real_sleep 3
33+
34+
# check that table t1 contains something
35+
--echo "in the master"
36+
--enable_info
37+
--replace_column 3 TIMESTAMP
38+
SELECT * FROM t1;
39+
--disable_info
40+
41+
sync_slave_with_master;
42+
43+
--echo "in the slave"
44+
--enable_info
45+
--replace_column 3 TIMESTAMP
46+
SELECT * FROM t1;
47+
--disable_info
48+
49+
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce';
50+
51+
# Create an event on the slave and check to see what the originator is.
52+
--disable_warnings
53+
DROP EVENT IF EXISTS test.slave_once;
54+
--enable_warnings
55+
56+
CREATE EVENT test.slave_once ON SCHEDULE EVERY 5 MINUTE DO
57+
INSERT INTO t1(c) VALUES ('from slave_once');
58+
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_once';
59+
60+
--disable_warnings
61+
DROP EVENT IF EXISTS test.slave_once;
62+
--enable_warnings
63+
64+
connection master;
65+
66+
# BUG#20384 - disable events on slave
67+
--disable_warnings
68+
DROP EVENT IF EXISTS test.justonce;
69+
--enable_warnings
70+
71+
CREATE EVENT test.er ON SCHEDULE EVERY 3 SECOND DO
72+
INSERT INTO t1(c) VALUES ('from er');
73+
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
74+
75+
sync_slave_with_master;
76+
77+
--echo "in the slave"
78+
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
79+
80+
connection master;
81+
--echo "in the master"
82+
ALTER EVENT test.er ON SCHEDULE EVERY 5 SECOND DO INSERT into t1(c) VALUES ('from alter er');
83+
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
84+
85+
sync_slave_with_master;
86+
87+
--echo "in the slave"
88+
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
89+
90+
connection master;
91+
--echo "in the master"
92+
DROP EVENT test.er;
93+
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test';
94+
95+
--disable_info
96+
97+
sync_slave_with_master;
98+
99+
--echo "in the slave"
100+
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test';
101+
102+
--echo "in the master"
103+
connection master;
104+
DROP TABLE t1;
105+

mysql-test/include/rpl_udf.inc

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
#####################################################################
2+
# Author: Chuck Bell #
3+
# Date: 2006-12-21 #
4+
# Purpose: To test that UDFs are replicated in both row based and #
5+
# statement based format. This tests work completed in WL#3629. #
6+
# #
7+
# This test is designed to exercise two of the three types of UDFs: #
8+
# 1) UDFs via loadable libraries, and 2) UDFs with a SQL body. #
9+
#####################################################################
10+
11+
--source include/have_udf.inc
12+
13+
#
14+
# To run this tests the "sql/udf_example.c" need to be compiled into
15+
# udf_example.so and LD_LIBRARY_PATH should be setup to point out where
16+
# the library are.
17+
#
18+
19+
connection master;
20+
--disable_warnings
21+
drop table if exists t1;
22+
--enable_warnings
23+
24+
#
25+
# Test 1) Test UDFs via loadable libraries
26+
#
27+
--echo "*** Test 1) Test UDFs via loadable libraries ***
28+
--echo "Running on the master"
29+
--enable_info
30+
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
31+
eval CREATE FUNCTION myfunc_double RETURNS REAL SONAME "$UDF_EXAMPLE_LIB";
32+
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
33+
eval CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
34+
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
35+
--error ER_CANT_FIND_DL_ENTRY
36+
eval CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
37+
SELECT * FROM mysql.func;
38+
--disable_info
39+
40+
save_master_pos;
41+
connection slave;
42+
sync_with_master;
43+
44+
# Check to see that UDF CREATE statements were replicated
45+
--echo "Running on the slave"
46+
--enable_info
47+
SELECT * FROM mysql.func;
48+
--disable_info
49+
50+
connection master;
51+
52+
# Use the UDFs to do something
53+
--echo "Running on the master"
54+
--enable_info
55+
eval CREATE TABLE t1(sum INT, price FLOAT(24)) ENGINE=$engine_type;
56+
INSERT INTO t1 VALUES(myfunc_int(100), myfunc_double(50.00));
57+
INSERT INTO t1 VALUES(myfunc_int(10), myfunc_double(5.00));
58+
INSERT INTO t1 VALUES(myfunc_int(200), myfunc_double(25.00));
59+
INSERT INTO t1 VALUES(myfunc_int(1), myfunc_double(500.00));
60+
SELECT * FROM t1 ORDER BY sum;
61+
--disable_info
62+
63+
sync_slave_with_master;
64+
65+
# Check to see if data was replicated
66+
--echo "Running on the slave"
67+
--enable_info
68+
SELECT * FROM t1 ORDER BY sum;
69+
70+
# Check to see that the functions are available for execution on the slave
71+
SELECT myfunc_int(25);
72+
SELECT myfunc_double(75.00);
73+
--disable_info
74+
75+
connection master;
76+
77+
# Drop the functions
78+
--echo "Running on the master"
79+
--enable_info
80+
DROP FUNCTION myfunc_double;
81+
DROP FUNCTION myfunc_int;
82+
SELECT * FROM mysql.func;
83+
--disable_info
84+
85+
sync_slave_with_master;
86+
87+
# Check to see if the UDFs were dropped on the slave
88+
--echo "Running on the slave"
89+
--enable_info
90+
SELECT * FROM mysql.func;
91+
--disable_info
92+
93+
connection master;
94+
95+
# Cleanup
96+
--echo "Running on the master"
97+
--enable_info
98+
DROP TABLE t1;
99+
--disable_info
100+
101+
#
102+
# Test 2) Test UDFs with SQL body
103+
#
104+
--echo "*** Test 2) Test UDFs with SQL body ***
105+
--echo "Running on the master"
106+
--enable_info
107+
CREATE FUNCTION myfuncsql_int(i INT) RETURNS INTEGER DETERMINISTIC RETURN i;
108+
CREATE FUNCTION myfuncsql_double(d DOUBLE) RETURNS INTEGER DETERMINISTIC RETURN d * 0.95;
109+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
110+
--disable_info
111+
112+
sync_slave_with_master;
113+
114+
# Check to see that UDF CREATE statements were replicated
115+
--echo "Running on the slave"
116+
--enable_info
117+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
118+
--disable_info
119+
120+
connection master;
121+
122+
# Use the UDFs to do something
123+
--echo "Running on the master"
124+
--enable_info
125+
eval CREATE TABLE t1(sum INT, price FLOAT(24)) ENGINE=$engine_type;
126+
INSERT INTO t1 VALUES(myfuncsql_int(100), myfuncsql_double(50.00));
127+
INSERT INTO t1 VALUES(myfuncsql_int(10), myfuncsql_double(5.00));
128+
INSERT INTO t1 VALUES(myfuncsql_int(200), myfuncsql_double(25.00));
129+
INSERT INTO t1 VALUES(myfuncsql_int(1), myfuncsql_double(500.00));
130+
SELECT * FROM t1 ORDER BY sum;
131+
--disable_info
132+
133+
sync_slave_with_master;
134+
135+
# Check to see if data was replicated
136+
--echo "Running on the slave"
137+
--enable_info
138+
SELECT * FROM t1 ORDER BY sum;
139+
--disable_info
140+
141+
connection master;
142+
143+
# Modify the UDFs to add a comment
144+
--echo "Running on the master"
145+
--enable_info
146+
ALTER FUNCTION myfuncsql_int COMMENT "This was altered.";
147+
ALTER FUNCTION myfuncsql_double COMMENT "This was altered.";
148+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
149+
--disable_info
150+
151+
sync_slave_with_master;
152+
153+
# Check to see if data was replicated
154+
--echo "Running on the slave"
155+
--enable_info
156+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
157+
158+
# Check to see that the functions are available for execution on the slave
159+
SELECT myfuncsql_int(25);
160+
SELECT myfuncsql_double(75.00);
161+
--disable_info
162+
163+
connection master;
164+
165+
# Drop the functions
166+
--echo "Running on the master"
167+
--enable_info
168+
DROP FUNCTION myfuncsql_double;
169+
DROP FUNCTION myfuncsql_int;
170+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
171+
--disable_info
172+
173+
sync_slave_with_master;
174+
175+
# Check to see if the UDFs were dropped on the slave
176+
--echo "Running on the slave"
177+
--enable_info
178+
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
179+
--disable_info
180+
181+
connection master;
182+
183+
# Cleanup
184+
--echo "Running on the master"
185+
--enable_info
186+
DROP TABLE t1;
187+
--disable_info

mysql-test/r/events.result

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ create event
193193
SHOW CREATE EVENT ����21;
194194
Event sql_mode time_zone Create Event
195195
����21 SYSTEM CREATE EVENT `����21` ON SCHEDULE EVERY '51 0:0:35' DAY_SECOND STARTS '#' ON COMPLETION NOT PRESERVE ENABLE COMMENT '���� � 1251 ��������' DO select 1
196-
insert into mysql.event (db, name, body, definer, interval_value, interval_field) values (database(), "root22", "select 1", user(), 100, "SECOND_MICROSECOND");
196+
insert into mysql.event (db, name, body, definer, interval_value, interval_field, originator) values (database(), "root22", "select 1", user(), 100, "SECOND_MICROSECOND", 1);
197197
show create event root22;
198198
ERROR 42000: This version of MySQL doesn't yet support 'MICROSECOND'
199199
SHOW EVENTS;
@@ -225,8 +225,8 @@ drop event
225225
set names latin1;
226226
CREATE EVENT intact_check ON SCHEDULE EVERY 10 HOUR DO SELECT "nothing";
227227
SHOW EVENTS;
228-
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status
229-
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED
228+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator
229+
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED 1
230230
ALTER TABLE mysql.event ADD dummy INT FIRST;
231231
SHOW EVENTS;
232232
ERROR HY000: Column count of mysql.event is wrong. Expected 17, found 18. Table probably corrupted
@@ -235,8 +235,8 @@ SHOW EVENTS;
235235
ERROR HY000: Column count of mysql.event is wrong. Expected 17, found 18. Table probably corrupted
236236
ALTER TABLE mysql.event DROP dummy2;
237237
SHOW EVENTS;
238-
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status
239-
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED
238+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator
239+
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED 1
240240
CREATE TABLE event_like LIKE mysql.event;
241241
INSERT INTO event_like SELECT * FROM mysql.event;
242242
ALTER TABLE mysql.event MODIFY db char(64) character set cp1251 default '';
@@ -258,10 +258,11 @@ event CREATE TABLE `event` (
258258
`last_executed` datetime DEFAULT NULL,
259259
`starts` datetime DEFAULT NULL,
260260
`ends` datetime DEFAULT NULL,
261-
`status` enum('ENABLED','DISABLED') NOT NULL DEFAULT 'ENABLED',
261+
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
262262
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
263263
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL DEFAULT '',
264264
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
265+
`originator` int(10) NOT NULL,
265266
`time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
266267
PRIMARY KEY (`db`,`name`)
267268
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events'
@@ -270,8 +271,8 @@ ERROR HY000: Cannot load from mysql.event. Table probably corrupted. See error l
270271
ALTER TABLE mysql.event MODIFY db char(64) character set utf8 collate utf8_bin default '';
271272
"This should work"
272273
SHOW EVENTS;
273-
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status
274-
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED
274+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator
275+
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED 1
275276
ALTER TABLE mysql.event MODIFY db char(64) character set cp1251 default '';
276277
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
277278
ERROR HY000: Cannot load from mysql.event. Table probably corrupted. See error log.
@@ -286,8 +287,8 @@ CREATE TABLE mysql.event like event_like;
286287
INSERT INTO mysql.event SELECT * FROM event_like;
287288
DROP TABLE event_like;
288289
SHOW EVENTS;
289-
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status
290-
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED
290+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator
291+
events_test intact_check root@localhost SYSTEM RECURRING NULL 10 # # NULL ENABLED 1
291292
DROP EVENT intact_check;
292293
create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
293294
select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
@@ -400,5 +401,5 @@ ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
400401
SHOW EVENTS FROM ``;
401402
ERROR 42000: Incorrect database name ''
402403
SHOW EVENTS FROM `events\\test`;
403-
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status
404+
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator
404405
drop database events_test;

0 commit comments

Comments
 (0)