mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
added replication of VIEW DDL commands (BUG#4838)
This commit is contained in:
44
mysql-test/r/rpl_view.result
Normal file
44
mysql-test/r/rpl_view.result
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
drop table if exists t1,v1;
|
||||||
|
drop view if exists t1,v1;
|
||||||
|
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;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
select * from v1 order by a;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
update v1 set a=3 where a=1;
|
||||||
|
select * from v1 order by a;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
select * from v1 order by a;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
delete from v1 where a=2;
|
||||||
|
select * from v1 order by a;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
select * from v1 order by a;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
alter view v1 as select a as b from t1;
|
||||||
|
select * from v1 order by 1;
|
||||||
|
b
|
||||||
|
3
|
||||||
|
drop view v1;
|
||||||
|
select * from v1 order by a;
|
||||||
|
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||||
|
drop table t1;
|
44
mysql-test/t/rpl_view.test
Normal file
44
mysql-test/t/rpl_view.test
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
source include/master-slave.inc;
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1,v1;
|
||||||
|
drop view if exists t1,v1;
|
||||||
|
sync_slave_with_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;
|
@ -5516,6 +5516,9 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant,
|
|||||||
/* global privileges */
|
/* global privileges */
|
||||||
grant->privilege= thd->master_access;
|
grant->privilege= thd->master_access;
|
||||||
|
|
||||||
|
if (!thd->priv_user)
|
||||||
|
return; // it is slave
|
||||||
|
|
||||||
/* db privileges */
|
/* db privileges */
|
||||||
grant->privilege|= acl_get(thd->host, thd->ip, thd->priv_user, db, 0);
|
grant->privilege|= acl_get(thd->host, thd->ip, thd->priv_user, db, 0);
|
||||||
|
|
||||||
|
@ -4059,7 +4059,12 @@ unsent_create_error:
|
|||||||
}
|
}
|
||||||
case SQLCOM_CREATE_VIEW:
|
case SQLCOM_CREATE_VIEW:
|
||||||
{
|
{
|
||||||
res= mysql_create_view(thd, thd->lex->create_view_mode);
|
if (!(res= mysql_create_view(thd, thd->lex->create_view_mode)) &&
|
||||||
|
mysql_bin_log.is_open())
|
||||||
|
{
|
||||||
|
Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE);
|
||||||
|
mysql_bin_log.write(&qinfo);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQLCOM_DROP_VIEW:
|
case SQLCOM_DROP_VIEW:
|
||||||
@ -4067,7 +4072,12 @@ unsent_create_error:
|
|||||||
if (check_table_access(thd, DROP_ACL, all_tables, 0) ||
|
if (check_table_access(thd, DROP_ACL, all_tables, 0) ||
|
||||||
end_active_trans(thd))
|
end_active_trans(thd))
|
||||||
goto error;
|
goto error;
|
||||||
res= mysql_drop_view(thd, first_table, thd->lex->drop_mode);
|
if (!(res= mysql_drop_view(thd, first_table, thd->lex->drop_mode)) &&
|
||||||
|
mysql_bin_log.is_open())
|
||||||
|
{
|
||||||
|
Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE);
|
||||||
|
mysql_bin_log.write(&qinfo);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQLCOM_CREATE_TRIGGER:
|
case SQLCOM_CREATE_TRIGGER:
|
||||||
|
Reference in New Issue
Block a user