• gshchepa/uchum@gleb.loc's avatar
    Fixed bug #28244. · 12d43d55
    gshchepa/uchum@gleb.loc authored
    When the same VIEW was created at the master side twice,
    malformed (truncated after the word 'AS') query string 
    was forwarded to client side, so error messages on the
    master and client was different, and replication was
    broken.
    
    The mysql_register_view function call failed
    too early: fields of `view' output argument of this 
    function was not filled yet with correct data required
    for query replication.
    The mysql_register_view function also copied pointers to 
    local buffers into a memory allocated by the caller.
    12d43d55
rpl_view.result 2.78 KB
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;
reset 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;
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;
show binlog events limit 1,100;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
slave-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (1)
slave-bin.000001	#	Query	1	#	use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select a from t1
slave-bin.000001	#	Query	1	#	use `test`; insert into v1 values (2)
slave-bin.000001	#	Query	1	#	use `test`; update v1 set a=3 where a=1
slave-bin.000001	#	Query	1	#	use `test`; delete from v1 where a=2
slave-bin.000001	#	Query	1	#	use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select a as b from t1
slave-bin.000001	#	Query	1	#	use `test`; drop view v1
slave-bin.000001	#	Query	1	#	use `test`; drop table t1

---> Test for BUG#20438

---> Preparing environment...
---> connection: master
DROP TABLE IF EXISTS t1;
DROP VIEW IF EXISTS v1;

---> Synchronizing slave with master...

---> connection: master

---> Creating objects...
CREATE TABLE t1(c INT);
/*!50003 CREATE VIEW v1 AS SELECT * FROM t1 */;

---> Inserting value...
INSERT INTO t1 VALUES(1);

---> Checking on master...
SELECT * FROM t1;
c
1

---> Synchronizing slave with master...
---> connection: master

---> Checking on slave...
SELECT * FROM t1;
c
1

---> connection: master

---> Cleaning up...
DROP VIEW v1;
DROP TABLE t1;
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;
explain v1;
Field	Type	Null	Key	Default	Extra
a	int(11)	YES		NULL	
b	decimal(32,0)	YES		NULL	
show create table v1;
View	Create View
v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,sum(`t1`.`b`) AS `b` from `t1` group by `t1`.`a`
select * from v1;
a	b
1	6
drop table t1;
drop view v1;
CREATE TABLE t1(a INT);
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE VIEW v1 AS SELECT * FROM t1;
ERROR 42S01: Table 'v1' already exists
DROP VIEW v1;
DROP TABLE t1;
End of 5.0 tests