mariadb/mysql-test/extra/rpl_tests
Sven Sandberg f404c96e82 BUG#39934: Slave stops for engine that only support row-based logging
This is a post-push fix addressing review requests and
problems with extra warnings.

Problem 1: The sub-statement where an unsafe warning was detected was
printed as part of the warning. This was ok for statements that
were unsafe due to, e.g., calls to UUID(), but did not make
sense for statements that were unsafe because there was more than
one autoincrement column (unsafeness in this case comes from the
combination of several sub-statements).
Fix 1: Instead of printing the sub-statement, print an explanation
of why the statement is unsafe.

Problem 2:
When a recursive construct (i.e., stored proceure, stored
function, trigger, view, prepared statement) contained several
sub-statements, and at least one of them was unsafe, there would be
one unsafeness warning per sub-statement - even for safe
sub-statements.
Fix 2:
Ensure that each type of warning is printed at most once, by
remembering throughout the execution of the statement which types
of warnings have been printed.


mysql-test/extra/rpl_tests/create_recursive_construct.inc:
  - Clarified comment per review request.
  - Added checks for the number of warnings in each invocation.
mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
  Per review request, replaced @@session.binlog_format by
  @@global.binlog_format, since INSERT DELAYED reads the global
  variable. (In this test case, the two variables have the same
  value, so the change is cosmetic.)
mysql-test/r/sp_trans.result:
  updated result file
mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result:
  updated result file
mysql-test/suite/binlog/r/binlog_stm_ps.result:
  updated result file
mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result:
  updated result file
mysql-test/suite/binlog/r/binlog_unsafe.result:
  Updated result file. Note that duplicate warnings are now gone.
mysql-test/suite/binlog/t/binlog_unsafe.test:
  - Added tests for: (1) a statement that is unsafe in many ways;
    (2) a statement that is unsafe in the same way several times.
  - Use -- style to invoke mysqltest commands.
mysql-test/suite/rpl/r/rpl_stm_found_rows.result:
  updated result file
mysql-test/suite/rpl/r/rpl_stm_loadfile.result:
  updated result file
mysql-test/suite/rpl/t/rpl_mix_found_rows.test:
  Per review request, added comment explaining what the test case
  does (copied from rpl_stm_found_rows.test)
mysql-test/suite/rpl/t/rpl_stm_found_rows.test:
  Clarified grammar in comment.
mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result:
  Updated result file.
sql/item_create.cc:
  Made set_stmt_unsafe take one parameter, describing the
  type of unsafeness.
sql/sp_head.cc:
  Added unsafe_flags field and made it hold all the unsafe flags.
sql/sp_head.h:
  - Removed the BINLOG_ROW_BASED_IF_MIXED flag from m_flags.
    Instead, we use the new unsafe_flags field to hold the
    unsafeness state of the sp.
  - Made propagate_attributes() copy all unsafe flags.
sql/sql_base.cc:
  - Made LEX::set_stmt_unsafe() take an extra argument.
  - Made binlog_unsafe_warning_flags store the type of unsafeness.
  - Per review requests, clarified comments
  - Added DBUG printouts
sql/sql_class.cc:
  - Made warnings be generated in issue_warnings() and call that from
    binlog_query(). Wrote issue_warnings(), which prints zero or more
    warnings, avoiding to print warnings more than once per statement.
  - Per review request, added @todo so that we remember to assert
    correct behavior in binlog_query.
sql/sql_class.h:
  - Removed BINLOG_WARNING_PRINTED 
  - Use [set|clear]_current_stmt_binlog_row_based() instead of
    modifying the flag directly.
  - added issue_unsafe_warnings() (only called from binlog_unsafe)
  - Per review request, improved some documentation.
sql/sql_insert.cc:
  Added extra argument to LEX::set_stmt_unsafe()
sql/sql_lex.h:
  - Added enum_binlog_stmt_unsafe, listing all types of unsafe
    statements.
  - Per review requests, improved many comments for member
    functions.
  - Added [get|set]_stmt_unsafe_flags(), which return/set all the
    unsafe flags for a statement.
sql/sql_parse.cc:
  - Renamed binlog_warning_flags to binlog_unsafe_warning_flags.
  - Per review requests, improved comment.
sql/sql_view.cc:
  Made views propagate all the new unsafe flags.
sql/sql_yacc.yy:
  Added parameter to set_stmt_unsafe().
storage/innobase/handler/ha_innodb.cc:
  Per review requests, replaced DBUG_EXECUTE_IF() by DBUG_EVALUATE_IF().
2009-07-22 18:16:17 +02:00
..
create_recursive_construct.inc BUG#39934: Slave stops for engine that only support row-based logging 2009-07-22 18:16:17 +02:00
rpl_auto_increment.test BUG#41986 Replication slave does not pick up proper AUTO_INCREMENT value for Innodb tables 2009-01-14 16:27:32 +08:00
rpl_blackhole.test Bug #38360: BLACKHOLE replication with RBR is broken 2008-10-02 21:13:15 +02:00
rpl_charset.test Fix after merge 2008-02-28 18:55:46 +01:00
rpl_commit_after_flush.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_conflicts.test BUG#37718: rpl.rpl_stm_mystery22 fails sporadically on pushbuild 2009-01-09 15:12:31 +01:00
rpl_ddl.test Upmerge 5.0 -> 5.1 of fix for 2008-08-25 15:09:51 +02:00
rpl_deadlock.test Bug#37716. 2009-04-04 01:33:13 +04:00
rpl_delete_no_where.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_EE_err.test Merging 5.1 main into 5.1-rpl 2008-10-23 21:27:09 +02:00
rpl_extraMaster_Col.test Bug #39265: fix for the bug 33699 should be reverted 2009-02-05 13:49:32 +04:00
rpl_extraSlave_Col.test BUG#37975: wait_for_slave_* should increase the timeout 2008-07-10 18:09:39 +02:00
rpl_failed_optimize.test Don't use row level logging on optimize or repair table. 2006-05-05 20:08:40 +03:00
rpl_flsh_tbls.test Bug#41108: It is a testcase timeout bug so the patch fixes test code in places 2008-12-12 14:34:18 +03:00
rpl_foreign_key.test BUG#39934: Slave stops for engine that only support row-based logging 2009-07-14 21:31:19 +02:00
rpl_insert_delayed.test BUG#39934: Slave stops for engine that only support row-based logging 2009-07-22 18:16:17 +02:00
rpl_insert_id.test Bug #32124: crash if prepared statements refer to variables in the where clause 2008-10-08 14:23:53 +03:00
rpl_insert_id_pk.test Bug #28842 Different 'duplicate key' error code between 5.0 and 5.1 2007-06-06 10:57:07 -07:00
rpl_insert_ignore.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_loaddata.test BUG#38350: Many tests don't clean up after themselves on exit. 2008-11-13 20:19:00 +01:00
rpl_loadfile.test BUG#39701: Mixed binlog format does not switch to row mode on 2009-03-24 18:27:33 +00:00
rpl_log.test Post-merge patch for extra/rpl_test/rpl_log.test: 2009-02-02 14:44:18 +03:00
rpl_max_relay_size.test Fix for versional test 2008-01-14 15:38:02 +08:00
rpl_multi_query.test Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl 2007-03-29 21:38:03 +02:00
rpl_multi_update.test WL#1012: All changes as one single changeset. 2005-12-22 06:39:02 +01:00
rpl_multi_update2.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_multi_update3.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_ndb_2multi_basic.test BUG#21842 (Cluster fails to replicate to innodb or myisam with err 134 2007-08-26 14:31:10 +02:00
rpl_ndb_2multi_eng.test Problem: pushbuild has sporadic errors during startup of 2008-02-11 15:14:24 +01:00
rpl_ndb_apply_status.test BUG#39934: Slave stops for engine that only support row-based logging 2009-07-14 21:31:19 +02:00
rpl_partition.test Bug#18436 (RBR: Replication to partition engine triggers assertion on slave): 2006-03-27 14:58:37 +02:00
rpl_relayrotate.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_reset_slave.test BUG#44270: Post-push fix 2009-06-26 12:05:56 +01:00
rpl_row_001.test Use absolute path to allow tets to be run also when datadir differs 2007-12-19 09:42:31 +01:00
rpl_row_basic.test bug#38230 2008-11-06 19:10:09 +02:00
rpl_row_blob.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_row_delayed_ins.test BUG#29020 (Event results not correctly replicated to slave in RBR): 2008-03-28 13:16:41 +01:00
rpl_row_func003.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_row_sp002.test Bug #32307 mysqltest - does not detect illegal if syntax 2008-08-04 12:38:50 +02:00
rpl_row_sp003.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_row_sp006.test fixes Bug #25305 (and several other similar test tailures with the same symptom) 2007-06-18 15:36:10 +02:00
rpl_row_sp007.test WL#1012: All changes as one single changeset. 2005-12-22 06:39:02 +01:00
rpl_row_tabledefs.test Bug #34654 RESET SLAVE and STOP SLAVE/START SLAVE does not clear Last_XYZ_Errno 2008-03-14 21:02:52 +01:00
rpl_row_UUID.test BUG#28722 (Multi-engine statements on has_own_binlogging engine): 2007-06-22 01:39:23 +02:00
rpl_stm_000001.test WL#4189 2007-12-12 18:19:24 +01:00
rpl_stm_EE_err2.test BUG#38350: Many tests don't clean up after themselves on exit. 2008-11-13 20:19:00 +01:00
rpl_sv_relay_space.test Bug#16993 (ALTER TABLE ZEROFILL AUTO_INCREMENT not replicated correctly): 2006-04-19 15:29:49 +02:00
rpl_trig004.test Bug #28842 Different 'duplicate key' error code between 5.0 and 5.1 2007-06-06 10:57:07 -07:00
rpl_truncate.test Bug #36763 2009-02-06 17:06:41 +01:00
rpl_truncate_helper.test Bug #36763 2009-02-06 17:06:41 +01:00