diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-03-11 10:49:49 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-03-11 10:49:49 +0200 |
commit | 1596ef738c63b7b40a76ba75264a70644fdb7e51 (patch) | |
tree | d2629a65dad14a3bb125475833a3a53f01ecdfc9 /sql/sql_class.cc | |
parent | e8a2a70cf869cf32a50144704646a5f34e8d7be9 (diff) | |
parent | 79bc654ac34ee24e24afe98215ba7c44edd8e113 (diff) | |
download | mariadb-git-1596ef738c63b7b40a76ba75264a70644fdb7e51.tar.gz |
Merge 10.7 into 10.8
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r-- | sql/sql_class.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index f3a436e95b6..9737083e900 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -6239,6 +6239,10 @@ int THD::decide_logging_format(TABLE_LIST *tables) bool is_write= FALSE; // If any write tables bool has_read_tables= FALSE; // If any read only tables bool has_auto_increment_write_tables= FALSE; // Write with auto-increment + /* true if it's necessary to switch current statement log format from + STATEMENT to ROW if binary log format is MIXED and autoincrement values + are changed in the statement */ + bool has_unsafe_stmt_autoinc_lock_mode= false; /* If a write table that doesn't have auto increment part first */ bool has_write_table_auto_increment_not_first_in_pk= FALSE; bool has_auto_increment_write_tables_not_first= FALSE; @@ -6361,6 +6365,8 @@ int THD::decide_logging_format(TABLE_LIST *tables) has_auto_increment_write_tables_not_first= found_first_not_own_table; if (share->next_number_keypart != 0) has_write_table_auto_increment_not_first_in_pk= true; + has_unsafe_stmt_autoinc_lock_mode= + table->file->autoinc_lock_mode_stmt_unsafe(); } } @@ -6375,7 +6381,8 @@ int THD::decide_logging_format(TABLE_LIST *tables) blackhole_table_found= 1; if (share->non_determinstic_insert && - !(sql_command_flags[lex->sql_command] & CF_SCHEMA_CHANGE)) + (sql_command_flags[lex->sql_command] & CF_CAN_GENERATE_ROW_EVENTS + && !(sql_command_flags[lex->sql_command] & CF_SCHEMA_CHANGE))) has_write_tables_with_unsafe_statements= true; trans= table->file->has_transactions(); @@ -6432,6 +6439,9 @@ int THD::decide_logging_format(TABLE_LIST *tables) if (has_write_tables_with_unsafe_statements) lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); + if (has_unsafe_stmt_autoinc_lock_mode) + lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_LOCK_MODE); + /* A query that modifies autoinc column in sub-statement can make the master and slave inconsistent. |