Commit d4ae3e28 authored by Luis Soares's avatar Luis Soares

BUG#49562: SBR out of sync when using numeric data types + user

variable

Incremental commit: 
  1. Moved part of the test case to binlog suite.
  2. Removed cast set when writing the flags field.
parent 14d959f7
SET @positive= 18446744073709551615;
SET @negative= -9223372036854775808;
CREATE TABLE t1 (`tinyint` TINYINT,
`smallint` SMALLINT,
`mediumint` MEDIUMINT,
`integer` INTEGER,
`bigint` BIGINT,
`utinyint` TINYINT UNSIGNED,
`usmallint` SMALLINT UNSIGNED,
`umediumint` MEDIUMINT UNSIGNED,
`uinteger` INTEGER UNSIGNED,
`ubigint` BIGINT UNSIGNED,
`double` DOUBLE,
`float` FLOAT,
`real` REAL(30,2),
`decimal` DECIMAL(30,2)) ENGINE = MyISAM;
### insert max unsigned
### a) declarative
INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615);;
TRUNCATE t1;
### b) user var
INSERT INTO t1 VALUES (@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive);
## assertion: checks that User_var_log_event::pack_info
## correctly displays the binlog content by taking into
## account the unsigned_flag
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (`tinyint` TINYINT,
`smallint` SMALLINT,
`mediumint` MEDIUMINT,
`integer` INTEGER,
`bigint` BIGINT,
`utinyint` TINYINT UNSIGNED,
`usmallint` SMALLINT UNSIGNED,
`umediumint` MEDIUMINT UNSIGNED,
`uinteger` INTEGER UNSIGNED,
`ubigint` BIGINT UNSIGNED,
`double` DOUBLE,
`float` FLOAT,
`real` REAL(30,2),
`decimal` DECIMAL(30,2)) ENGINE = MyISAM
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # User var # # @`positive`=18446744073709551615
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive)
master-bin.000001 # Query # # COMMIT
### insert min signed
### a) declarative
INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808);;
TRUNCATE t1;
### b) user var
INSERT INTO t1 VALUES (@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative);
## assertion: checks that User_var_log_event::pack_info
## correctly displays the binlog content by taking into
## account the unsigned_flag
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (`tinyint` TINYINT,
`smallint` SMALLINT,
`mediumint` MEDIUMINT,
`integer` INTEGER,
`bigint` BIGINT,
`utinyint` TINYINT UNSIGNED,
`usmallint` SMALLINT UNSIGNED,
`umediumint` MEDIUMINT UNSIGNED,
`uinteger` INTEGER UNSIGNED,
`ubigint` BIGINT UNSIGNED,
`double` DOUBLE,
`float` FLOAT,
`real` REAL(30,2),
`decimal` DECIMAL(30,2)) ENGINE = MyISAM
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # User var # # @`positive`=18446744073709551615
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # User var # # @`negative`=-9223372036854775808
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative)
master-bin.000001 # Query # # COMMIT
DROP TABLE t1;
-- source include/have_binlog_format_statement.inc
#
# BUG#49562: SBR out of sync when using numeric data types + user variable
#
-- let $max_unsigned_long= 18446744073709551615
-- let $min_signed_long= -9223372036854775808
-- eval SET @positive= $max_unsigned_long
-- eval SET @negative= $min_signed_long
CREATE TABLE t1 (`tinyint` TINYINT,
`smallint` SMALLINT,
`mediumint` MEDIUMINT,
`integer` INTEGER,
`bigint` BIGINT,
`utinyint` TINYINT UNSIGNED,
`usmallint` SMALLINT UNSIGNED,
`umediumint` MEDIUMINT UNSIGNED,
`uinteger` INTEGER UNSIGNED,
`ubigint` BIGINT UNSIGNED,
`double` DOUBLE,
`float` FLOAT,
`real` REAL(30,2),
`decimal` DECIMAL(30,2)) ENGINE = MyISAM;
-- echo ### insert max unsigned
-- echo ### a) declarative
-- disable_warnings
-- eval INSERT INTO t1 VALUES ($max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long,$max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long);
-- enable_warnings
TRUNCATE t1;
-- echo ### b) user var
-- disable_warnings
INSERT INTO t1 VALUES (@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive);
-- enable_warnings
-- echo ## assertion: checks that User_var_log_event::pack_info
-- echo ## correctly displays the binlog content by taking into
-- echo ## account the unsigned_flag
-- source include/show_binlog_events.inc
-- echo ### insert min signed
-- echo ### a) declarative
-- disable_warnings
-- eval INSERT INTO t1 VALUES ($min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long,$min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long);
-- enable_warnings
TRUNCATE t1;
-- echo ### b) user var
-- disable_warnings
INSERT INTO t1 VALUES (@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative);
-- enable_warnings
-- echo ## assertion: checks that User_var_log_event::pack_info
-- echo ## correctly displays the binlog content by taking into
-- echo ## account the unsigned_flag
-- source include/show_binlog_events.inc
DROP TABLE t1;
......@@ -205,67 +205,4 @@ decimal -9223372036854775808.00
Comparing tables master:test.t1 and slave:test.t1
TRUNCATE t1;
## check: contents of both tables master's and slave's
## assertion: checks that User_var_log_event::pack_info correctly
## displays the binlog content by taking into account the
## unsigned_flag
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (`tinyint` TINYINT,
`smallint` SMALLINT,
`mediumint` MEDIUMINT,
`integer` INTEGER,
`bigint` BIGINT,
`utinyint` TINYINT UNSIGNED,
`usmallint` SMALLINT UNSIGNED,
`umediumint` MEDIUMINT UNSIGNED,
`uinteger` INTEGER UNSIGNED,
`ubigint` BIGINT UNSIGNED,
`double` DOUBLE,
`float` FLOAT,
`real` REAL(30,2),
`decimal` DECIMAL(30,2)) ENGINE = MyISAM
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # User var # # @`positive`=18446744073709551615
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive,
@positive)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
master-bin.000001 # Query # # BEGIN
master-bin.000001 # User var # # @`negative`=-9223372036854775808
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative,
@negative)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1
DROP TABLE t1;
......@@ -135,11 +135,6 @@ TRUNCATE t1;
-- echo ## check: contents of both tables master's and slave's
-- enable_warnings
-- echo ## assertion: checks that User_var_log_event::pack_info correctly
-- echo ## displays the binlog content by taking into account the
-- echo ## unsigned_flag
-- source include/show_binlog_events.inc
## cleanup
-- connection master
DROP TABLE t1;
......
......@@ -5629,7 +5629,7 @@ bool User_var_log_event::write(IO_CACHE* file)
my_b_safe_write(file, (uchar*) name, name_len) ||
my_b_safe_write(file, (uchar*) buf1, buf1_length) ||
my_b_safe_write(file, pos, val_len) ||
my_b_safe_write(file, (uchar*) &flags, unsigned_len));
my_b_safe_write(file, &flags, unsigned_len));
}
#endif
......
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