Skip to content

Commit

Permalink
Cleanup: Do not add a parameter to row_update_for_mysql()
Browse files Browse the repository at this point in the history
row_prebuilt_t::versioned_write: Cache the value of TABLE::versioned_write()
in ha_innobase::build_template()
  • Loading branch information
dr-m authored and midenok committed Nov 28, 2017
1 parent 3fdd9c1 commit 2192803
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
27 changes: 14 additions & 13 deletions storage/innobase/handler/ha_innodb.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7758,6 +7758,7 @@ ha_innobase::build_template(

index = whole_row ? clust_index : m_prebuilt->index;

m_prebuilt->versioned_write = table->versioned_write();
m_prebuilt->need_to_access_clustered = (index == clust_index);

/* Either m_prebuilt->index should be a secondary index, or it
Expand Down Expand Up @@ -9171,20 +9172,21 @@ ha_innobase::update_row(
m_prebuilt->upd_node->vers_delete = false;

{
bool vers_ins_row = false;
const bool vers_set_fields = table->versioned_write()
const bool vers_set_fields
= m_prebuilt->versioned_write
&& m_prebuilt->upd_node->update->affects_versioned();
const bool vers_ins_row
= vers_set_fields
&& (table->s->vtmd
|| thd_sql_command(m_user_thd)
!= SQLCOM_ALTER_TABLE);

if (vers_set_fields) {
vers_ins_row = table->s->vtmd
|| thd_sql_command(m_user_thd)
!= SQLCOM_ALTER_TABLE;
m_prebuilt->upd_node->vers_delete = !vers_ins_row;
}
m_prebuilt->upd_node->vers_delete = vers_set_fields
&& !vers_ins_row;

innobase_srv_conc_enter_innodb(m_prebuilt);

error = row_update_for_mysql(m_prebuilt, vers_set_fields);
error = row_update_for_mysql(m_prebuilt);

if (error == DB_SUCCESS && vers_ins_row
&& trx->id != static_cast<trx_id_t>(
Expand Down Expand Up @@ -9305,13 +9307,12 @@ ha_innobase::delete_row(
/* This is a delete */

m_prebuilt->upd_node->is_delete = TRUE;
m_prebuilt->upd_node->vers_delete = table->versioned_write()
&& table->vers_end_field()->is_max();

innobase_srv_conc_enter_innodb(m_prebuilt);

bool vers_set_fields =
table->versioned_write() && table->vers_end_field()->is_max();

error = row_update_for_mysql(m_prebuilt, vers_set_fields);
error = row_update_for_mysql(m_prebuilt);

innobase_srv_conc_exit_innodb(m_prebuilt);

Expand Down
6 changes: 3 additions & 3 deletions storage/innobase/include/row0mysql.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,12 +276,10 @@ row_get_prebuilt_update_vector(
handle */
/** Does an update or delete of a row for MySQL.
@param[in,out] prebuilt prebuilt struct in MySQL handle
@param[in] vers_set_fields working with system versioned table
@return error code or DB_SUCCESS */
dberr_t
row_update_for_mysql(
row_prebuilt_t* prebuilt,
bool vers_set_fields)
row_prebuilt_t* prebuilt)
MY_ATTRIBUTE((warn_unused_result));

/** This can only be used when srv_locks_unsafe_for_binlog is TRUE or this
Expand Down Expand Up @@ -683,6 +681,8 @@ struct row_prebuilt_t {
not to be confused with InnoDB
externally stored columns
(VARCHAR can be off-page too) */
unsigned versioned_write:1;/*!< whether this is
a versioned write */
mysql_row_templ_t* mysql_template;/*!< template used to transform
rows fast between MySQL and Innobase
formats; memory for this template
Expand Down
13 changes: 8 additions & 5 deletions storage/innobase/row/row0mysql.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1876,12 +1876,9 @@ class ib_dec_counter {

/** Does an update or delete of a row for MySQL.
@param[in,out] prebuilt prebuilt struct in MySQL handle
@param[in] vers_set_fields working with system versioned table
@return error code or DB_SUCCESS */
dberr_t
row_update_for_mysql(
row_prebuilt_t* prebuilt,
bool vers_set_fields)
row_update_for_mysql(row_prebuilt_t* prebuilt)
{
trx_savept_t savept;
dberr_t err;
Expand All @@ -1896,7 +1893,7 @@ row_update_for_mysql(
upd_cascade_t* new_upd_nodes;
upd_cascade_t* processed_cascades;
bool got_s_lock = false;
bool vers_delete = prebuilt->upd_node->vers_delete;
const bool vers_delete = prebuilt->upd_node->vers_delete;

DBUG_ENTER("row_update_for_mysql");

Expand Down Expand Up @@ -2005,6 +2002,12 @@ row_update_for_mysql(

thr->fk_cascade_depth = 0;

ut_ad(!prebuilt->versioned_write || node->table->versioned());

bool vers_set_fields = prebuilt->versioned_write
&& node->table->versioned()
&& (node->is_delete ? node->vers_delete
: node->update->affects_versioned());
run_again:
if (vers_set_fields) {
/* System Versioning: modify update vector to set
Expand Down

0 comments on commit 2192803

Please sign in to comment.