diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-09-18 11:35:47 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-09-18 11:35:47 +0300 |
commit | 4cfef2a5a4157269244923637032c21ff67b0161 (patch) | |
tree | 5587d581e0b3c31793de93cffd539fb8b7971163 /storage/innobase | |
parent | fe949504f0894686d434c6fbdac25efeb965253d (diff) | |
parent | 429ca9a881689929b39a0cbfb7c3a62434f33837 (diff) | |
download | mariadb-git-4cfef2a5a4157269244923637032c21ff67b0161.tar.gz |
Merge 10.2 into bb-10.2-ext
Diffstat (limited to 'storage/innobase')
-rw-r--r-- | storage/innobase/row/row0ins.cc | 3 | ||||
-rw-r--r-- | storage/innobase/row/row0upd.cc | 26 |
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: |