mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-20591 Wrong Number of rows in mysqlbinlog output
calc_field_event_length should accurately calculate the size of BLOB type fields, Instead of returning just the bytes taken by length it should return length bytes + actual length.
This commit is contained in:
@@ -327,6 +327,14 @@ INSERT INTO t2 SET a=1;
|
|||||||
INSERT INTO t2 SET b=1;
|
INSERT INTO t2 SET b=1;
|
||||||
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# MDEV-20591 Wrong Number of rows in mysqlbinlog output.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(c_char_utf8 CHAR(10) ,
|
||||||
|
c_varchar_utf8 char(10) ,
|
||||||
|
c_text_utf8 blob );
|
||||||
|
INSERT into t1 values("B", "B", REPEAT("#", 2000));
|
||||||
|
drop table t1;
|
||||||
flush logs;
|
flush logs;
|
||||||
INSERT INTO t1dec102 VALUES (-999.99);
|
INSERT INTO t1dec102 VALUES (-999.99);
|
||||||
INSERT INTO t1dec102 VALUES (0);
|
INSERT INTO t1dec102 VALUES (0);
|
||||||
@@ -5274,6 +5282,47 @@ SET TIMESTAMP=1000000000/*!*/;
|
|||||||
DROP TABLE `t1`,`t2` /* generated by server */
|
DROP TABLE `t1`,`t2` /* generated by server */
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-317 ddl
|
||||||
|
/*!100001 SET @@session.gtid_seq_no=317*//*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
CREATE TABLE t1(c_char_utf8 CHAR(10) ,
|
||||||
|
c_varchar_utf8 char(10) ,
|
||||||
|
c_text_utf8 blob )
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-318
|
||||||
|
/*!100001 SET @@session.gtid_seq_no=318*//*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Annotate_rows:
|
||||||
|
#Q> INSERT into t1 values("B", "B", REPEAT("#", 2000))
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Table_map: `test`.`t1` mapped to number #
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Write_rows: table id # flags: STMT_END_F
|
||||||
|
### INSERT INTO `test`.`t1`
|
||||||
|
### SET
|
||||||
|
### @1='B' /* STRING(10) meta=65034 nullable=1 is_null=0 */
|
||||||
|
### @2='B' /* STRING(10) meta=65034 nullable=1 is_null=0 */
|
||||||
|
### @3='################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################' /* BLOB/TEXT meta=2 nullable=1 is_null=0 */
|
||||||
|
# Number of rows: 1
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
COMMIT
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-319 ddl
|
||||||
|
/*!100001 SET @@session.gtid_seq_no=319*//*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
DROP TABLE `t1` /* generated by server */
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Rotate to master-bin.000002 pos: 4
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Rotate to master-bin.000002 pos: 4
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
# End of log file
|
# End of log file
|
||||||
@@ -5287,17 +5336,17 @@ DELIMITER /*!*/;
|
|||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Start: binlog v 4, server v #.##.## created 010909 4:46:40
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Start: binlog v 4, server v #.##.## created 010909 4:46:40
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Gtid list [0-1-316]
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Gtid list [0-1-319]
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Binlog checkpoint master-bin.000001
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Binlog checkpoint master-bin.000001
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Binlog checkpoint master-bin.000002
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX Binlog checkpoint master-bin.000002
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-317
|
#010909 4:46:40 server id 1 end_log_pos # CRC32 XXX GTID 0-1-320
|
||||||
/*!100101 SET @@session.skip_parallel_replication=0*//*!*/;
|
/*!100101 SET @@session.skip_parallel_replication=0*//*!*/;
|
||||||
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
|
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
|
||||||
/*!100001 SET @@session.server_id=1*//*!*/;
|
/*!100001 SET @@session.server_id=1*//*!*/;
|
||||||
/*!100001 SET @@session.gtid_seq_no=317*//*!*/;
|
/*!100001 SET @@session.gtid_seq_no=320*//*!*/;
|
||||||
BEGIN
|
BEGIN
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
|
@@ -438,6 +438,18 @@ INSERT INTO t2 SET b=1;
|
|||||||
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
UPDATE t1, t2 SET t1.a=10, t2.a=20;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-20591 Wrong Number of rows in mysqlbinlog output.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(c_char_utf8 CHAR(10) ,
|
||||||
|
c_varchar_utf8 char(10) ,
|
||||||
|
c_text_utf8 blob );
|
||||||
|
|
||||||
|
INSERT into t1 values("B", "B", REPEAT("#", 2000));
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
flush logs;
|
flush logs;
|
||||||
|
|
||||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
@@ -462,3 +474,4 @@ flush logs;
|
|||||||
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/
|
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #.##.##/ /(@[0-9]*=[0-9]*[.][0-9]{1,3})[0-9e+-]*[^ ]*(.*(FLOAT|DOUBLE).*[*].)/\1...\2/ /CRC32 0x[0-9a-f]*/CRC32 XXX/
|
||||||
--error 1
|
--error 1
|
||||||
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000002 2>&1
|
--exec $MYSQL_BINLOG --base64-output=decode-rows -v -v $MYSQLD_DATADIR/master-bin.000002 2>&1
|
||||||
|
|
||||||
|
@@ -3423,7 +3423,16 @@ static size_t calc_field_event_length(const uchar *ptr, uint type, uint meta)
|
|||||||
case MYSQL_TYPE_SET:
|
case MYSQL_TYPE_SET:
|
||||||
return meta & 0xFF;
|
return meta & 0xFF;
|
||||||
case MYSQL_TYPE_BLOB:
|
case MYSQL_TYPE_BLOB:
|
||||||
return (meta <= 4 ? meta : 0);
|
if (meta > 4 )
|
||||||
|
return 0;
|
||||||
|
if (meta == 1)
|
||||||
|
return *ptr + 1;
|
||||||
|
if (meta == 2)
|
||||||
|
return uint2korr(ptr) + 2;
|
||||||
|
if (meta == 3)
|
||||||
|
return uint3korr(ptr) + 3;
|
||||||
|
if (meta == 4)
|
||||||
|
return uint4korr(ptr) + 4;
|
||||||
case MYSQL_TYPE_VARCHAR:
|
case MYSQL_TYPE_VARCHAR:
|
||||||
case MYSQL_TYPE_VAR_STRING:
|
case MYSQL_TYPE_VAR_STRING:
|
||||||
length= meta;
|
length= meta;
|
||||||
|
Reference in New Issue
Block a user