A query SET @@GLOBAL.binlog_format = ... returns an error when NDB is the
default storage. This fails some tests invoking the set binlog_format explicitly.
because the var turns to be read-only.
In the following are files and method to fix if needed.
t/
ndb_binlog_basic2.test # here the failure is benign
rpl_rbr_to_sbr.test # does not check any ndb features =>
. # => not_ndb_default is enough
rpl_row_basic_8partition.test # set binlog_format can be replaced
rpl_switch_stm_row_mixed.test # does not check any ndb features =>
. # => not_ndb_default is enough
two more invoking invoke extra/rpl_truncate_helper.test
rpl_truncate_2myisam # to be fixed with not_ndb_default
rpl_truncate_3innodb # same as above
. # because there is a dedicated to ndb .
. # rpl_truncate_7ndb* suit.
Adapting/testing a new implement
--source include/safe_set_to_maybe_ro_var.inc
to avoid abort due to the error using binlog_format as application.
BitKeeper/etc/ignore:
Added mysql-test/t/rpl_truncate_4ndb.test to the ignore list
mysql-test/r/rpl_row_basic_8partition.result:
new results
mysql-test/t/rpl_rbr_to_sbr.test:
# does not check any ndb features => not_ndb_default is enough
mysql-test/t/rpl_row_basic_8partition.test:
set binlog_format can be read-only because of e.g default storage ndb.
adapting/testing a new implement
--source include/safe_set_to_maybe_ro_var.inc
to avoid abort due to the error.
Note, that it this particular test we could simply remove SET binlog_format because
there is have_binlog_format_row require, as the test is about RBR.
Futhermore utilizing safe_set_to_maybe_ro_var is redundat as well as long as
we keep non_ndb_default guard.
The latter is introduced because of ndb partitioning per-key limitation
#19259: rpl_ndb_dd_partitions fails on solaris. The page is updated to refer to this
test's.
mysql-test/t/rpl_switch_stm_row_mixed.test:
excluding ndb option, no ndb features
mysql-test/t/rpl_truncate_2myisam.test:
ndb checks truncate separately
mysql-test/t/rpl_truncate_3innodb.test:
ndb checks truncate separately
mysql-test/include/safe_set_to_maybe_ro_var.inc:
pseudo-macro to make read-only global/session vars "settable" in sense that
SET var= val won't produce any error nor aborts testing.
Added #ifdef's to make code work even when the system is built without
row-based replication.
mysql-test/r/create.result:
Result change
mysql-test/r/innodb_mysql.result:
Result change
mysql-test/t/create.test:
Moving InnoDB specific test to innodb_mysql.test
mysql-test/t/innodb_mysql.test:
Moving InnoDB-specific test from create.test
mysql-test/t/rpl_rbr_to_sbr.test:
Test only sensible if we have row-based replication compiled in.
mysql-test/t/rpl_row_basic_8partition.test:
Test only sensible if we have row-based replication compiled in.
sql/log.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/set_var.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/set_var.h:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/share/errmsg.txt:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_base.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_class.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_class.h:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_insert.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_parse.cc:
Adding HAVE_ROW_BASED_REPLICATION guards on code to work without
row-based replication.
sql/sql_table.cc:
Not running hooks
Switching to using index_read() instead of index_read_idx() since a
range of rows need to be retrieved.
mysql-test/r/rpl_row_basic_8partition.result:
Result change
mysql-test/t/rpl_row_basic_8partition.test:
Enabling section for testing PARTITION BY KEY().
sql/log_event.cc:
Using index_read() instead of index_read_idx() since a range of records
are read using index_next().
mysql-test/extra/rpl_tests/rpl_partition.test:
New BitKeeper file ``mysql-test/extra/rpl_tests/rpl_partition.test''
Partial fix for resolving the problem. Swapping contents of record[0]
and record[1] since this is what some storage engines expect.
sql/handler.cc:
Adding assertion to get early failure.
sql/log_event.cc:
Correcting code so that new record is passed in record[0] and
old record is passed in record[1] when calling update_row().
mysql-test/r/rpl_row_basic_8partition.result:
New BitKeeper file ``mysql-test/r/rpl_row_basic_8partition.result''
mysql-test/t/rpl_row_basic_8partition.test:
New BitKeeper file ``mysql-test/t/rpl_row_basic_8partition.test''