################################################################################ # This test case checks if the option "binlog-direct-non-transactional-updates" # makes non-transactional changes in the statement format to be written to the # binary log as soon as the statement commits. # # In what follows, we use the include file rpl_mixing_engines.inc to generate # sql commands from a format string. The format string consists of a sequence of # 'codes' separated by spaces. Before it set of commands, we paste the expected # sequence in the binary log. The following codes exist: # # - Define the scope of a transaction: # B - Begin. # C - Commit. # R - Rollback. # # - Change only T-Tables: # T - Updates a T-Table. # T-trig - Updates T-Tables through a trigger. # T-func - Updates T-Tables through a function. # T-proc - Updates T-Tables through a procedure. # eT - Fails while updating the first tuple in a T-Table. # Te - Fails while updating an n-tuple (n > 1) in a T-Table. # Te-trig - Fails while updating an n-tuple (n > 1) in a T-Table. # Te-func - Fails while updating an n-tuple (n > 1) in a T-Table. # # - Change only N-Tables # N - Updates a N-Table. # N-trig - Updates N-Tables through a trigger. # N-func - Updates N-Tables through a function. # N-proc - Updates N-Tables through a procedure. # eN - Fails while updating the first tuple in a N-Table. # Ne - Fails while updating an n-tuple (n > 1) in a N-Table. # Ne-trig - Fails while updating an n-tuple (n > 1) in a N-Table. # Ne-func - Fails while updating an n-tuple (n > 1) in a N-Table. ################################################################################ --source include/have_binlog_format_statement.inc --source include/master-slave.inc --source include/have_innodb.inc set @@session.binlog_direct_non_transactional_updates= TRUE; --echo ######################################################################### --echo # CONFIGURATION --echo ######################################################################### --let $engine_type= Innodb SET @commands= 'configure'; --source extra/rpl_tests/rpl_mixing_engines.inc --echo ######################################################################### --echo # 1 - BINLOG ORDER --echo ######################################################################### connection master; --echo --echo --echo --echo --echo # --echo #3) Generates in the binlog what follows: --echo # --> STMT "N B T C" entries, format S. --echo # SET @commands= 'B T N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-trig C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-func C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-proc C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-trig C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-func C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-proc C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-trig C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-func C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-proc C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-trig C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-func C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-proc C'; --source extra/rpl_tests/rpl_mixing_engines.inc --echo --echo --echo --echo --echo # --echo #3.e) Generates in the binlog what follows if T-* fails: --echo # --> STMT "N" entry, format S. --echo # Otherwise, what follows if N-* fails and a N-Table is changed: --echo # --> STMT "N B T C" entries, format S. --echo # SET @commands= 'B eT N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B Te N C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T eN C'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T Ne C'; --source extra/rpl_tests/rpl_mixing_engines.inc --echo --echo --echo --echo --echo # --echo #4) Generates in the binlog what follows: --echo # --> STMT "N B T R" entries, format S. --echo # SET @commands= 'B T N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-trig R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-func R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T N-proc R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-trig R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-func R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-trig N-proc R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-trig R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-func R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-func N-proc R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-trig R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-func R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T-proc N-proc R'; --source extra/rpl_tests/rpl_mixing_engines.inc --echo --echo --echo --echo --echo # --echo #4.e) Generates in the binlog what follows if T* fails: --echo # --> STMT "B N C" entry, format S. --echo # Otherwise, what follows if N* fails and a N-Table is changed: --echo # --> STMT "N" entries, format S. --echo # SET @commands= 'B eT N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B Te N R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T eN R'; --source extra/rpl_tests/rpl_mixing_engines.inc SET @commands= 'B T Ne R'; --source extra/rpl_tests/rpl_mixing_engines.inc --echo ################################################################################### --echo # CHECK CONSISTENCY --echo ################################################################################### connection master; sync_slave_with_master; --exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-nmt-master.sql --exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-nmt-slave.sql --diff_files $MYSQLTEST_VARDIR/tmp/test-nmt-master.sql $MYSQLTEST_VARDIR/tmp/test-nmt-slave.sql --echo ################################################################################### --echo # CLEAN --echo ################################################################################### SET @commands= 'clean'; --source extra/rpl_tests/rpl_mixing_engines.inc --source include/rpl_end.inc