mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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.
This commit is contained in:
156
mysql-test/suite/binlog/r/binlog_stm_user_variables.result
Normal file
156
mysql-test/suite/binlog/r/binlog_stm_user_variables.result
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
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;
|
86
mysql-test/suite/binlog/t/binlog_stm_user_variables.test
Normal file
86
mysql-test/suite/binlog/t/binlog_stm_user_variables.test
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
-- 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
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
TRUNCATE t1;
|
TRUNCATE t1;
|
||||||
## check: contents of both tables master's and slave's
|
## 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;
|
DROP TABLE t1;
|
||||||
|
@ -135,11 +135,6 @@ TRUNCATE t1;
|
|||||||
-- echo ## check: contents of both tables master's and slave's
|
-- echo ## check: contents of both tables master's and slave's
|
||||||
-- enable_warnings
|
-- 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
|
## cleanup
|
||||||
-- connection master
|
-- connection master
|
||||||
DROP TABLE t1;
|
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*) name, name_len) ||
|
||||||
my_b_safe_write(file, (uchar*) buf1, buf1_length) ||
|
my_b_safe_write(file, (uchar*) buf1, buf1_length) ||
|
||||||
my_b_safe_write(file, pos, val_len) ||
|
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
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user