mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
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.
This commit is contained in:
parent
341e484f77
commit
0f818ddf75
3 changed files with 95 additions and 2 deletions
|
@ -213,3 +213,44 @@ drop table t1;
|
|||
drop function f1;
|
||||
drop function f2;
|
||||
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;
|
|||
connection slave;
|
||||
select 'slave', a from t1;
|
||||
|
||||
#
|
||||
# cleanup
|
||||
#
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop procedure p1;
|
||||
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)
|
|||
case REAL_RESULT:
|
||||
case INT_RESULT:
|
||||
case DECIMAL_RESULT:
|
||||
return item->val_str(str);
|
||||
|
||||
if (item->field_type() != MYSQL_TYPE_BIT)
|
||||
return item->val_str(str);
|
||||
else {/* Bit type is handled as binary string */}
|
||||
case STRING_RESULT:
|
||||
{
|
||||
String *result= item->val_str(str);
|
||||
|
|
Loading…
Reference in a new issue