summaryrefslogtreecommitdiff
path: root/sql/wsrep_schema.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-01-25 12:44:24 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-01-25 12:44:24 +0200
commit961c7938bb4df7a19ccd8def1e57669f7600d3e5 (patch)
treeb3d208be6d95ea3e4d1ba81c78392517ffe8f7fd /sql/wsrep_schema.cc
parent5adcb2e7b8f08cc459e478e5b118d924fbe18c86 (diff)
parent3467f6376472ce695e36746ba5b3c13cb5fcbb9f (diff)
downloadmariadb-git-961c7938bb4df7a19ccd8def1e57669f7600d3e5.tar.gz
Merge 10.4 into 10.5
Diffstat (limited to 'sql/wsrep_schema.cc')
-rw-r--r--sql/wsrep_schema.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/sql/wsrep_schema.cc b/sql/wsrep_schema.cc
index ed6f3ebc881..a909fa8aaf6 100644
--- a/sql/wsrep_schema.cc
+++ b/sql/wsrep_schema.cc
@@ -917,6 +917,13 @@ int Wsrep_schema::append_fragment(THD* thd,
thd->thread_id,
os.str().c_str(),
transaction_id.get());
+ /* use private query table list for the duration of fragment storing,
+ populated query table list from "parent DML" may cause problems .e.g
+ for virtual column handling
+ */
+ Query_tables_list query_tables_list_backup;
+ thd->lex->reset_n_backup_query_tables_list(&query_tables_list_backup);
+
Wsrep_schema_impl::binlog_off binlog_off(thd);
Wsrep_schema_impl::init_stmt(thd);
@@ -924,6 +931,7 @@ int Wsrep_schema::append_fragment(THD* thd,
if (Wsrep_schema_impl::open_for_write(thd, sr_table_str.c_str(), &frag_table))
{
trans_rollback_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(1);
}
@@ -937,9 +945,11 @@ int Wsrep_schema::append_fragment(THD* thd,
if ((error= Wsrep_schema_impl::insert(frag_table))) {
WSREP_ERROR("Failed to write to frag table: %d", error);
trans_rollback_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(1);
}
Wsrep_schema_impl::finish_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(0);
}
@@ -956,6 +966,13 @@ int Wsrep_schema::update_fragment_meta(THD* thd,
ws_meta.seqno().get());
DBUG_ASSERT(ws_meta.seqno().is_undefined() == false);
+ /* use private query table list for the duration of fragment storing,
+ populated query table list from "parent DML" may cause problems .e.g
+ for virtual column handling
+ */
+ Query_tables_list query_tables_list_backup;
+ thd->lex->reset_n_backup_query_tables_list(&query_tables_list_backup);
+
Wsrep_schema_impl::binlog_off binlog_off(thd);
int error;
uchar key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH];
@@ -965,6 +982,7 @@ int Wsrep_schema::update_fragment_meta(THD* thd,
Wsrep_schema_impl::init_stmt(thd);
if (Wsrep_schema_impl::open_for_write(thd, sr_table_str.c_str(), &frag_table))
{
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(1);
}
@@ -985,6 +1003,7 @@ int Wsrep_schema::update_fragment_meta(THD* thd,
error);
}
Wsrep_schema_impl::finish_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(1);
}
@@ -1000,11 +1019,13 @@ int Wsrep_schema::update_fragment_meta(THD* thd,
frag_table->s->table_name.str,
error);
Wsrep_schema_impl::finish_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(1);
}
int ret= Wsrep_schema_impl::end_index_scan(frag_table);
Wsrep_schema_impl::finish_stmt(thd);
+ thd->lex->restore_backup_query_tables_list(&query_tables_list_backup);
DBUG_RETURN(ret);
}