mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
a6f7fa35b1
Problem was that mysql_create_view did not remove all comments characters when writing to binlog, resulting in parse error of stmt on slave side. Solution was to use the recreated select clause and add a generated CHECK OPTION clause if needed. mysql-test/r/rpl_sp.result: Bug#32575 - Parse error of stmt with extended comments on slave side Updated test result mysql-test/r/rpl_view.result: Bug#32575 - Parse error of stmt with extended comments on slave side Updated test result mysql-test/t/rpl_view.test: Bug#32575 - Parse error of stmt with extended comments on slave side Added test case sql/sql_view.cc: Bug#32575 - Parse error of stmt with extended comments on slave side Problem was that mysql_create_view did not remove all comments characters when writing to binlog, resulting in parse error of stmt on slave side. Solution was to use the recreated select clause and generate 'WITH {LOCAL|CASCADED} CHECK OPTION'.
182 lines
3.6 KiB
Text
182 lines
3.6 KiB
Text
source include/master-slave.inc;
|
|
--disable_warnings
|
|
drop table if exists t1,v1;
|
|
drop view if exists t1,v1;
|
|
sync_slave_with_master;
|
|
reset master;
|
|
--enable_warnings
|
|
|
|
#
|
|
# Check that createion drop of view is replicated, also check replication of
|
|
# updating of view
|
|
#
|
|
connection master;
|
|
create table t1 (a int);
|
|
insert into t1 values (1);
|
|
create view v1 as select a from t1;
|
|
insert into v1 values (2);
|
|
select * from v1 order by a;
|
|
sync_slave_with_master;
|
|
# view already have to be on slave
|
|
select * from v1 order by a;
|
|
connection master;
|
|
update v1 set a=3 where a=1;
|
|
select * from v1 order by a;
|
|
sync_slave_with_master;
|
|
select * from v1 order by a;
|
|
connection master;
|
|
delete from v1 where a=2;
|
|
select * from v1 order by a;
|
|
sync_slave_with_master;
|
|
select * from v1 order by a;
|
|
connection master;
|
|
# 'alter view' internally maped to creation, but still check that it works
|
|
alter view v1 as select a as b from t1;
|
|
sync_slave_with_master;
|
|
select * from v1 order by 1;
|
|
connection master;
|
|
drop view v1;
|
|
sync_slave_with_master;
|
|
#error, because view have to be removed from slave
|
|
-- error 1146
|
|
select * from v1 order by a;
|
|
connection master;
|
|
drop table t1;
|
|
sync_slave_with_master;
|
|
--replace_column 2 # 5 #
|
|
show binlog events limit 1,100;
|
|
|
|
|
|
|
|
#
|
|
# BUG#20438: CREATE statements for views, stored routines and triggers can be
|
|
# not replicable.
|
|
#
|
|
|
|
--echo
|
|
--echo ---> Test for BUG#20438
|
|
|
|
# Prepare environment.
|
|
|
|
--echo
|
|
--echo ---> Preparing environment...
|
|
--echo ---> connection: master
|
|
--connection master
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
DROP VIEW IF EXISTS v1;
|
|
--enable_warnings
|
|
|
|
--echo
|
|
--echo ---> Synchronizing slave with master...
|
|
|
|
--save_master_pos
|
|
--connection slave
|
|
--sync_with_master
|
|
|
|
--echo
|
|
--echo ---> connection: master
|
|
--connection master
|
|
|
|
# Test.
|
|
|
|
--echo
|
|
--echo ---> Creating objects...
|
|
|
|
CREATE TABLE t1(c INT);
|
|
|
|
/*!50003 CREATE VIEW v1 AS SELECT * FROM t1 */;
|
|
|
|
--echo
|
|
--echo ---> Inserting value...
|
|
|
|
INSERT INTO t1 VALUES(1);
|
|
|
|
--echo
|
|
--echo ---> Checking on master...
|
|
|
|
SELECT * FROM t1;
|
|
|
|
--echo
|
|
--echo ---> Synchronizing slave with master...
|
|
|
|
--save_master_pos
|
|
--connection slave
|
|
--sync_with_master
|
|
|
|
--echo ---> connection: master
|
|
|
|
--echo
|
|
--echo ---> Checking on slave...
|
|
|
|
SELECT * FROM t1;
|
|
|
|
# Cleanup.
|
|
|
|
--echo
|
|
--echo ---> connection: master
|
|
--connection master
|
|
|
|
--echo
|
|
--echo ---> Cleaning up...
|
|
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
|
|
--save_master_pos
|
|
--connection slave
|
|
--sync_with_master
|
|
--connection master
|
|
|
|
#
|
|
# BUG#19419: "VIEW: View that the column name is different
|
|
# by master and slave is made".
|
|
#
|
|
connection master;
|
|
create table t1(a int, b int);
|
|
insert into t1 values (1, 1), (1, 2), (1, 3);
|
|
create view v1(a, b) as select a, sum(b) from t1 group by a;
|
|
|
|
sync_slave_with_master;
|
|
explain v1;
|
|
show create table v1;
|
|
select * from v1;
|
|
|
|
connection master;
|
|
drop table t1;
|
|
drop view v1;
|
|
|
|
sync_slave_with_master;
|
|
|
|
#
|
|
# BUG#28244 CREATE VIEW breaks replication when view exists
|
|
#
|
|
connection master;
|
|
CREATE TABLE t1(a INT);
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
sync_slave_with_master;
|
|
|
|
#
|
|
# Bug#32575 Parse error of stmt with extended comments on slave side
|
|
# Verify that 'CREATE VIEW' with comments is properly logged to binlog
|
|
connection master;
|
|
CREATE TABLE t1 (a INT);
|
|
--echo # create view as output from mysqldump 10.11 (5.0.62)
|
|
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
|
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
|
/*!50001 VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` < 3) */
|
|
/*!50002 WITH CASCADED CHECK OPTION */;
|
|
SHOW CREATE VIEW v1;
|
|
sync_slave_with_master;
|
|
SHOW CREATE VIEW v1;
|
|
connection master;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
sync_slave_with_master;
|
|
|
|
--echo End of 5.0 tests
|