Commit 6cfd9a4f authored by unknown's avatar unknown

Bug #26199 Replication Failure on Slave when using stored procs with bit-type parameters.

The value of the actual argument of BIT-type-arg stored procedure was binlogged as non-escaped
sequence of bytes corresponding to internal representation of the bit value.

The patch enforces binlogging of the bit-argument as a valid literal: prefixing the quoted bytes
sequence with _binary.
Note, that behaviour of Item_field::var_str for field_type() of MYSQL_TYPE_BIT is exceptional
in that the returned string contains the binary representation even though result_type() of
the item is INT_RESULT.


mysql-test/r/rpl_sp_effects.result:
  testing stored function and procedure called with BIT-arg.
mysql-test/t/rpl_sp_effects.test:
  results changed
sql/sp_head.cc:
  Treating BIT field type specially to for its value to be prefixed and quoted.
parent 69604f4d
...@@ -213,3 +213,44 @@ drop table t1; ...@@ -213,3 +213,44 @@ drop table t1;
drop function f1; drop function f1;
drop function f2; drop function f2;
drop procedure p1; drop procedure p1;
create table t2 (b BIT(7));
create procedure sp_bug26199(bitvalue BIT(7))
begin
insert into t2 set b = bitvalue;
end //
create function sf_bug26199(b BIT(7)) returns int
begin
insert into t2 values(b);
return 0;
end//
call sp_bug26199(b'1110');
call sp_bug26199('\0');
select sf_bug26199(b'1111111');
sf_bug26199(b'1111111')
0
select sf_bug26199(b'101111111');
sf_bug26199(b'101111111')
0
Warnings:
Warning 1264 Out of range value adjusted for column 'b' at row 1
select sf_bug26199('\'');
sf_bug26199('\'')
0
select hex(b) from t2;
hex(b)
E
0
7F
7F
27
select hex(b) from t2;
hex(b)
E
0
7F
7F
27
drop table t2;
drop procedure sp_bug26199;
drop function sf_bug26199;
end of the tests
...@@ -195,9 +195,60 @@ sync_slave_with_master; ...@@ -195,9 +195,60 @@ sync_slave_with_master;
connection slave; connection slave;
select 'slave', a from t1; select 'slave', a from t1;
#
# cleanup
#
connection master; connection master;
drop table t1; drop table t1;
drop function f1; drop function f1;
drop function f2; drop function f2;
drop procedure p1; drop procedure p1;
sync_slave_with_master; sync_slave_with_master;
#
# bug#26199 Replication Failure on Slave when using stored procs
# with bit-type parameters
connection master;
create table t2 (b BIT(7));
delimiter //;
create procedure sp_bug26199(bitvalue BIT(7))
begin
insert into t2 set b = bitvalue;
end //
create function sf_bug26199(b BIT(7)) returns int
begin
insert into t2 values(b);
return 0;
end//
DELIMITER ;//
call sp_bug26199(b'1110');
call sp_bug26199('\0');
select sf_bug26199(b'1111111');
select sf_bug26199(b'101111111');
select sf_bug26199('\'');
select hex(b) from t2;
sync_slave_with_master;
#connection slave;
select hex(b) from t2;
#
# cleanup bug#26199
#
connection master;
drop table t2;
drop procedure sp_bug26199;
drop function sf_bug26199;
sync_slave_with_master;
--echo end of the tests
...@@ -100,8 +100,9 @@ sp_get_item_value(THD *thd, Item *item, String *str) ...@@ -100,8 +100,9 @@ sp_get_item_value(THD *thd, Item *item, String *str)
case REAL_RESULT: case REAL_RESULT:
case INT_RESULT: case INT_RESULT:
case DECIMAL_RESULT: case DECIMAL_RESULT:
if (item->field_type() != MYSQL_TYPE_BIT)
return item->val_str(str); return item->val_str(str);
else {/* Bit type is handled as binary string */}
case STRING_RESULT: case STRING_RESULT:
{ {
String *result= item->val_str(str); String *result= item->val_str(str);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment