summaryrefslogtreecommitdiff
path: root/sql/temporary_tables.cc
diff options
context:
space:
mode:
authorSachin Kumar <sachin.setiya@mariadb.com>2021-05-24 11:23:03 +0100
committerSachin Kumar <sachin.setiya@mariadb.com>2021-05-27 06:35:37 +0100
commit6b79bd2b5081a61903f66bc21d079d0eb07227e3 (patch)
treec4f31e597ab4a26f47d94f186361c24bb2f2f3fc /sql/temporary_tables.cc
parent5c75ba9cadc7877e91d6b712f157ff5623c09c60 (diff)
downloadmariadb-git-bb-10.2-24667.tar.gz
MDEV-24667 LOAD DATA INFILE/inserted rows not written to binlogbb-10.2-24667
Problem:- In master slave replication , when master is using statement format and slave is using mixed format, sometime we can have binlog which is not written. For example LOAD DATA INFILE is a unsafe statement , it is logged as a row format, and if it is on temporary table , it wont be logged. If the next statement is copy data from the tmp table to normal table, it is logged as a statement format on the slave , because it thinks this statement is unsafe. As we can see we did not log LOAD DATA INFILE and we simply logging insert into from * into statement format , we have effectively lost the tmp table data. Solution:- On master in mixed format if tmp table is created thd->temporary_tables is set to not null. This will make THD::reset_for_next_command to not change the binlog format back to stmt. So till the tmp table exist all the logs will be written in row format. On master THD::has_thd_temporary_tables() is used to determine whether we have temporary tables or not. But this does not work for the slave , slave shifts temporary tables from thd->temporary_tables to rgi_slave->rli->save_temporary_tables, so this will make has_thd_temporary_tables() check to return false on slave. So instead of this function I am calling has_temporary_tables() , which also checks slave thread tmp tables.
Diffstat (limited to 'sql/temporary_tables.cc')
-rw-r--r--sql/temporary_tables.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/temporary_tables.cc b/sql/temporary_tables.cc
index 005a520ff64..fb28ac40aa6 100644
--- a/sql/temporary_tables.cc
+++ b/sql/temporary_tables.cc
@@ -866,7 +866,7 @@ void THD::restore_tmp_table_share(TMP_TABLE_SHARE *share)
@return false Temporary tables exist
true No temporary table exist
*/
-inline bool THD::has_temporary_tables()
+bool THD::has_temporary_tables()
{
DBUG_ENTER("THD::has_temporary_tables");
bool result= (rgi_slave