mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 06:44:16 +01:00
66481aebb0
Post-push fix. Problem: After the original bugfix, if a statement is unsafe, binlog_format=mixed, and engine is statement-only, a warning was generated and the statement executed. However, it is a fundamental principle of binlogging that binlog_format=mixed should guarantee correct logging, no compromise. So correct behavior is to generate an error and don't execute the statement. Fix: Generate error instead of warning. Since issue_unsafe_warnings can only generate one error message, this allows us to simplify the code a bit too: decide_logging_format does not have to save the error code for issue_unsafe_warnings 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 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_ndb/r/rpl_ndb_binlog_format_errors.result: updated result file mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test: updated test: - ER_BINLOG_UNSAFE_AND_STMT_ENGINE is now an error. - added test for multiple types of unsafety sql/share/errmsg.txt: - Reformulated ER_BINLOG_UNSAFE_AND_STMT_ENGINE to reflect that it is now an error, not a warning. - Added "Reason for unsafeness" to ER_BINLOG_UNSAFE_STATEMENT and ER_BINLOG_UNSAFE_AND_STMT_ENGINE. sql/sql_class.cc: In decide_logging_format: - generate an error immediately in case 3, instead of scheduling a warning to be generated later. also updated comments accordingly - in case 7, there is only one unsafe warning error code now, so we don't need to store it in binlog_unsafe_warning_flags (see changes in sql_lex.h) - fixed compilation warning in DBUG_PRINT In issue_binlog_warning: - moved array of error codes to sql_lex.h (so that they are accessible also from decide_logging_format) - simplified code after the first set of bits in binlog_unsafe_warning_flags was removed sql/sql_class.h: - got rid of enum_binlog_stmt_warning. It's not needed anymore since we only have one type of unsafe warning (one of them turned into an error) - updated comments accordingly sql/sql_lex.cc: added initialization of the array of error codes that has been moved from THD::issue_unsafe_warnings to LEX. sql/sql_lex.h: Moved array of error codes from THD::issue_unsafe_warnings to LEX.
231 lines
2.7 KiB
Text
231 lines
2.7 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
DROP PROCEDURE IF EXISTS test.p1;
|
|
DROP TABLE IF EXISTS test.t1;
|
|
CREATE TABLE test.t1 (a INT, blob_column LONGBLOB, PRIMARY KEY(a));
|
|
INSERT INTO test.t1 VALUES(1,'test');
|
|
UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=1;
|
|
Warnings:
|
|
Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave.
|
|
create procedure test.p1()
|
|
begin
|
|
INSERT INTO test.t1 VALUES(2,'test');
|
|
UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=2;
|
|
end|
|
|
CALL test.p1();
|
|
Warnings:
|
|
Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave.
|
|
SELECT * FROM test.t1 ORDER BY blob_column;
|
|
a blob_column
|
|
1 abase
|
|
abased
|
|
abasement
|
|
abasements
|
|
abases
|
|
abash
|
|
abashed
|
|
abashes
|
|
abashing
|
|
abasing
|
|
abate
|
|
abated
|
|
abatement
|
|
abatements
|
|
abater
|
|
abates
|
|
abating
|
|
Abba
|
|
abbe
|
|
abbey
|
|
abbeys
|
|
abbot
|
|
abbots
|
|
Abbott
|
|
abbreviate
|
|
abbreviated
|
|
abbreviates
|
|
abbreviating
|
|
abbreviation
|
|
abbreviations
|
|
Abby
|
|
abdomen
|
|
abdomens
|
|
abdominal
|
|
abduct
|
|
abducted
|
|
abduction
|
|
abductions
|
|
abductor
|
|
abductors
|
|
abducts
|
|
Abe
|
|
abed
|
|
Abel
|
|
Abelian
|
|
Abelson
|
|
Aberdeen
|
|
Abernathy
|
|
aberrant
|
|
aberration
|
|
|
|
2 abase
|
|
abased
|
|
abasement
|
|
abasements
|
|
abases
|
|
abash
|
|
abashed
|
|
abashes
|
|
abashing
|
|
abasing
|
|
abate
|
|
abated
|
|
abatement
|
|
abatements
|
|
abater
|
|
abates
|
|
abating
|
|
Abba
|
|
abbe
|
|
abbey
|
|
abbeys
|
|
abbot
|
|
abbots
|
|
Abbott
|
|
abbreviate
|
|
abbreviated
|
|
abbreviates
|
|
abbreviating
|
|
abbreviation
|
|
abbreviations
|
|
Abby
|
|
abdomen
|
|
abdomens
|
|
abdominal
|
|
abduct
|
|
abducted
|
|
abduction
|
|
abductions
|
|
abductor
|
|
abductors
|
|
abducts
|
|
Abe
|
|
abed
|
|
Abel
|
|
Abelian
|
|
Abelson
|
|
Aberdeen
|
|
Abernathy
|
|
aberrant
|
|
aberration
|
|
|
|
SELECT * FROM test.t1 ORDER BY blob_column;
|
|
a blob_column
|
|
1 abase
|
|
abased
|
|
abasement
|
|
abasements
|
|
abases
|
|
abash
|
|
abashed
|
|
abashes
|
|
abashing
|
|
abasing
|
|
abate
|
|
abated
|
|
abatement
|
|
abatements
|
|
abater
|
|
abates
|
|
abating
|
|
Abba
|
|
abbe
|
|
abbey
|
|
abbeys
|
|
abbot
|
|
abbots
|
|
Abbott
|
|
abbreviate
|
|
abbreviated
|
|
abbreviates
|
|
abbreviating
|
|
abbreviation
|
|
abbreviations
|
|
Abby
|
|
abdomen
|
|
abdomens
|
|
abdominal
|
|
abduct
|
|
abducted
|
|
abduction
|
|
abductions
|
|
abductor
|
|
abductors
|
|
abducts
|
|
Abe
|
|
abed
|
|
Abel
|
|
Abelian
|
|
Abelson
|
|
Aberdeen
|
|
Abernathy
|
|
aberrant
|
|
aberration
|
|
|
|
2 abase
|
|
abased
|
|
abasement
|
|
abasements
|
|
abases
|
|
abash
|
|
abashed
|
|
abashes
|
|
abashing
|
|
abasing
|
|
abate
|
|
abated
|
|
abatement
|
|
abatements
|
|
abater
|
|
abates
|
|
abating
|
|
Abba
|
|
abbe
|
|
abbey
|
|
abbeys
|
|
abbot
|
|
abbots
|
|
Abbott
|
|
abbreviate
|
|
abbreviated
|
|
abbreviates
|
|
abbreviating
|
|
abbreviation
|
|
abbreviations
|
|
Abby
|
|
abdomen
|
|
abdomens
|
|
abdominal
|
|
abduct
|
|
abducted
|
|
abduction
|
|
abductions
|
|
abductor
|
|
abductors
|
|
abducts
|
|
Abe
|
|
abed
|
|
Abel
|
|
Abelian
|
|
Abelson
|
|
Aberdeen
|
|
Abernathy
|
|
aberrant
|
|
aberration
|
|
|
|
DROP PROCEDURE IF EXISTS test.p1;
|
|
DROP TABLE test.t1;
|