mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for
bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements Problem: binlogging PS' we may produce syntacticly incorrect queries in the binlog replacing some parameters with variable names (instead of variable values). E.g. in the reported case of "limit ?" clause: replacing "?" with "@var" produces "limit @var" which is not a correct SQL syntax. Also it may lead to different query execution on slave if we set and use a variable in the same statement, e.g. "insert into t1 values (@x:=@x+1, ?)" Fix: make the stored statement string created upon its execution use variable values (instead of names) to fill placeholders. mysql-test/r/ctype_cp932_binlog.result: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - result adjusted. mysql-test/r/ctype_cp932_notembedded.result: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - result adjusted. mysql-test/r/rpl_user_variables.result: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - test result. mysql-test/t/ctype_cp932_binlog.test: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - test adjusted. mysql-test/t/rpl_user_variables.test: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - test case. sql/sql_prepare.cc: Fix for bug #26842: master binary log contains invalid queries - replication fails bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements - set val to the variable's value (escaped if needed) then insert it into the query string in the position of the placeholder. We don't need to call get_var_with_binlog() here as there is no trace of the variable's name in the binlog.
This commit is contained in:
@ -296,21 +296,55 @@ SELECT * from t1;
|
||||
SELECT * from t2;
|
||||
|
||||
connection master;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #26842: master binary log contains invalid queries - replication fails
|
||||
#
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
reset master;
|
||||
|
||||
connection master;
|
||||
create table t1 (a int);
|
||||
prepare s from "insert into t1 values (@a),(?)";
|
||||
set @a=98; execute s using @a;
|
||||
prepare s from "insert into t1 values (?)";
|
||||
set @a=99; execute s using @a;
|
||||
prepare s from "insert into t1 select 100 limit ?";
|
||||
set @a=100; execute s using @a;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
show binlog events from 98;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #12826: Possible to get inconsistent slave using SQL syntax Prepared Statements
|
||||
#
|
||||
connection master;
|
||||
create table t1(a int, b int);
|
||||
prepare s1 from 'insert into t1 values (@x:=@x+1, ?)';
|
||||
set @x=1; execute s1 using @x;
|
||||
select * from t1;
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
# Cleanup
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
# This test uses a stored function that uses user-defined variables to return data
|
||||
# The test ensures the value of the user-defined variable is replicated correctly
|
||||
# and in the correct order of assignment.
|
||||
# This test was constructed for BUG#20141
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
--enable_warnings
|
||||
@ -358,4 +392,3 @@ DROP TABLE t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
stop slave;
|
||||
|
||||
|
Reference in New Issue
Block a user