mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +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 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;
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in a new issue