mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28487: sequences not respect value of binlog_row_image with select nextval(seq_gen)
Problem: ======== When using sequences, the function sequence_definition::write(TABLE *table, bool all_fields) is used to save DML/DDL updates to sequence tables (e.g. nextval, setval, and alter). Prior to this patch, the value all_fields was always false when invoked via nextval and setval, which forced the bitmap to only include changed columns. Solution: ======== Change all_fields when invoked via nextval and setval to be reliant on binlog_row_image, such that it is false when binlog_row_image is MINIMAL, and true otherwise. Reviewed By: =========== Andrei Elkin <andrei.elkin@mariadb.com>
This commit is contained in:
72
mysql-test/include/ensure_binlog_row_event_columns.inc
Normal file
72
mysql-test/include/ensure_binlog_row_event_columns.inc
Normal file
@ -0,0 +1,72 @@
|
||||
#
|
||||
# Helper file to ensure that a binary log file properly writes the expected
|
||||
# fields based on the binlog_row_image value.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# --let $expected_columns= (COLUMN_IDS)
|
||||
# --let $binlog_filename= FILENAME
|
||||
# --source include/count_binlog_row_event_columns.inc
|
||||
#
|
||||
# Parameters:
|
||||
# expected_columns (list<uint>, in) : A list of positive integers which
|
||||
# correspond to the column numbers that should be output in a binary
|
||||
# log's write_rows event
|
||||
# binlog_filename (string, in) : Name of the binary log file to analyze
|
||||
#
|
||||
|
||||
if (!$expected_columns)
|
||||
{
|
||||
--die expected_columns parameter is required but was not set
|
||||
}
|
||||
|
||||
if (!$binlog_filename)
|
||||
{
|
||||
--die binlog_filename parameter is required but was not set
|
||||
}
|
||||
|
||||
--let $include_filename= ensure_binlog_row_event_columns.inc [$expected_columns]
|
||||
--source include/begin_include_file.inc
|
||||
|
||||
--let $assert_file=$MYSQLTEST_VARDIR/tmp/binlog_decoded.out
|
||||
--let mysqld_datadir=`select @@datadir`
|
||||
|
||||
--echo # MYSQL_BINLOG mysqld_datadir/binlog_filename -vv > assert_file
|
||||
--exec $MYSQL_BINLOG $mysqld_datadir/$binlog_filename -vv > $assert_file
|
||||
|
||||
--echo # Verifying all expected column ids appear in binlog event output..
|
||||
--let num_cols_found=0
|
||||
--let last_expected_col= `SELECT GREATEST $expected_columns`
|
||||
--let i= 1
|
||||
while($i <= $last_expected_col)
|
||||
{
|
||||
# By default, assume the column is not expected to be in the binary log.
|
||||
# If the column id is set in expected_columns, then override assertion
|
||||
# parameters.
|
||||
--let assert_count= 0
|
||||
--let assert_text= Column @$i should not be in binary log
|
||||
|
||||
if (`SELECT $i IN $expected_columns`)
|
||||
{
|
||||
--let assert_count= 1
|
||||
--let assert_text= Column @$i should be in binary log
|
||||
|
||||
--inc $num_cols_found
|
||||
}
|
||||
|
||||
--let assert_select= @$i
|
||||
--source include/assert_grep.inc
|
||||
|
||||
--inc $i
|
||||
}
|
||||
--echo # ..success
|
||||
|
||||
--echo # Verifying only expected column ids appear in binlog event output..
|
||||
--let assert_count= $num_cols_found
|
||||
--let assert_text= The binlog event should only have $num_cols_found columns
|
||||
--let assert_select= @[\d]+
|
||||
--source include/assert_grep.inc
|
||||
--echo # ..success
|
||||
|
||||
--let $include_filename= ensure_binlog_row_event_columns.inc [$expected_columns]
|
||||
--source include/end_include_file.inc
|
Reference in New Issue
Block a user