summaryrefslogtreecommitdiff
path: root/storage/innobase
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-09-18 11:35:47 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-09-18 11:35:47 +0300
commit4cfef2a5a4157269244923637032c21ff67b0161 (patch)
tree5587d581e0b3c31793de93cffd539fb8b7971163 /storage/innobase
parentfe949504f0894686d434c6fbdac25efeb965253d (diff)
parent429ca9a881689929b39a0cbfb7c3a62434f33837 (diff)
downloadmariadb-git-4cfef2a5a4157269244923637032c21ff67b0161.tar.gz
Merge 10.2 into bb-10.2-ext
Diffstat (limited to 'storage/innobase')
-rw-r--r--storage/innobase/row/row0ins.cc3
-rw-r--r--storage/innobase/row/row0upd.cc26
2 files changed, 14 insertions, 15 deletions
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc
index b5b2a703c2b..b7f28e633a3 100644
--- a/storage/innobase/row/row0ins.cc
+++ b/storage/innobase/row/row0ins.cc
@@ -1442,8 +1442,7 @@ row_ins_foreign_check_on_constraint(
foreign,
clust_rec,
clust_index,
- FALSE,
- (node) ? TRUE : FALSE);
+ FALSE, FALSE);
if (err != DB_SUCCESS) {
fprintf(stderr,
"WSREP: foreign key append failed: %d\n", err);
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index 76fd0e75427..6a76de39dca 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -460,19 +460,18 @@ func_exit:
@param[in] node query node
@param[in] trx transaction
@return whether the node cannot be ignored */
-static
+inline
bool
wsrep_must_process_fk(const upd_node_t* node, const trx_t* trx)
{
- if (que_node_get_type(node->common.parent) != QUE_NODE_UPDATE
- || !wsrep_on(trx->mysql_thd)) {
+ if (que_node_get_type(node->common.parent) != QUE_NODE_UPDATE ||
+ !wsrep_on(trx->mysql_thd)) {
return false;
}
- const upd_cascade_t& nodes = *static_cast<const upd_node_t*>(
- node->common.parent)->cascade_upd_nodes;
- const upd_cascade_t::const_iterator end = nodes.end();
- return std::find(nodes.begin(), end, node) == end;
+ const upd_node_t* parent = static_cast<const upd_node_t*>(node->common.parent);
+
+ return parent->cascade_upd_nodes->empty();
}
#endif /* WITH_WSREP */
@@ -2443,6 +2442,7 @@ row_upd_sec_index_entry(
if (!referenced && foreign
&& wsrep_must_process_fk(node, trx)
&& !wsrep_thd_is_BF(trx->mysql_thd, FALSE)) {
+
ulint* offsets = rec_get_offsets(
rec, index, NULL, ULINT_UNDEFINED,
&heap);
@@ -2749,6 +2749,9 @@ check_fk:
}
#ifdef WITH_WSREP
} else if (foreign && wsrep_must_process_fk(node, trx)) {
+ err = wsrep_row_upd_check_foreign_constraints(
+ node, pcur, table, index, offsets, thr, mtr);
+
switch (err) {
case DB_SUCCESS:
case DB_NO_REFERENCED_ROW:
@@ -2760,16 +2763,11 @@ check_fk:
<< " index " << index->name
<< " table " << index->table->name;
}
- break;
+ goto err_exit;
default:
ib::error() << "WSREP: referenced FK check fail: " << ut_strerr(err)
<< " index " << index->name
<< " table " << index->table->name;
-
- break;
- }
-
- if (err != DB_SUCCESS) {
goto err_exit;
}
#endif /* WITH_WSREP */
@@ -2956,6 +2954,7 @@ row_upd_del_mark_clust_rec(
dberr_t err;
rec_t* rec;
trx_t* trx = thr_get_trx(thr);
+
ut_ad(node);
ut_ad(dict_index_is_clust(index));
ut_ad(node->is_delete);
@@ -2988,6 +2987,7 @@ row_upd_del_mark_clust_rec(
} else if (foreign && wsrep_must_process_fk(node, trx)) {
err = wsrep_row_upd_check_foreign_constraints(
node, pcur, index->table, index, offsets, thr, mtr);
+
switch (err) {
case DB_SUCCESS:
case DB_NO_REFERENCED_ROW: