IB: move methods to proper place

This commit is contained in:
Eugene Kosov 2017-12-28 10:40:00 +03:00
parent d72462a29b
commit 2a3c66a636
2 changed files with 70 additions and 69 deletions

View File

@ -1474,3 +1474,73 @@ void dict_table_t::rollback_instant(unsigned n)
field->name = sys + sizeof "DB_ROW_ID\0DB_TRX_ID"; field->name = sys + sizeof "DB_ROW_ID\0DB_TRX_ID";
field->col = dict_table_get_sys_col(this, DATA_ROLL_PTR); field->col = dict_table_get_sys_col(this, DATA_ROLL_PTR);
} }
/** Check if record in clustered index is historical row.
@param[in] rec clustered row
@param[in] offsets offsets
@return true if row is historical */
bool
dict_index_t::vers_history_row(
const rec_t* rec,
const ulint* offsets)
{
ut_a(is_clust());
ulint len;
dict_col_t& col= table->cols[table->vers_end];
ut_ad(col.vers_sys_end());
ulint nfield = dict_col_get_clust_pos(&col, this);
const byte *data = rec_get_nth_field(rec, offsets, nfield, &len);
if (col.mtype == DATA_FIXBINARY) {
ut_ad(len == sizeof timestamp_max_bytes);
return 0 != memcmp(data, timestamp_max_bytes, len);
} else {
ut_ad(col.mtype == DATA_INT);
ut_ad(len == sizeof trx_id_max_bytes);
return 0 != memcmp(data, trx_id_max_bytes, len);
}
ut_ad(0);
return false;
}
/** Check if record in secondary index is historical row.
@param[in] rec record in a secondary index
@param[out] history_row true if row is historical
@return true on error */
bool
dict_index_t::vers_history_row(
const rec_t* rec,
bool &history_row)
{
ut_ad(!is_clust());
bool error = false;
mem_heap_t* heap = NULL;
dict_index_t* clust_index = NULL;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
ulint* offsets = offsets_;
rec_offs_init(offsets_);
mtr_t mtr;
mtr.start();
rec_t* clust_rec =
row_get_clust_rec(BTR_SEARCH_LEAF, rec, this, &clust_index, &mtr);
if (clust_rec) {
offsets = rec_get_offsets(clust_rec, clust_index, offsets, true,
ULINT_UNDEFINED, &heap);
history_row = clust_index->vers_history_row(clust_rec, offsets);
} else {
ib::error() << "foreign constraints: secondary index is out of "
"sync";
ut_ad(!"secondary index is out of sync");
error = true;
}
mtr.commit();
if (heap) {
mem_heap_free(heap);
}
return(error);
}

View File

@ -1568,75 +1568,6 @@ private:
ulint& counter; ulint& counter;
}; };
/** Check if record in clustered index is historical row.
@param[in] rec clustered row
@param[in] offsets offsets
@return true if row is historical */
bool
dict_index_t::vers_history_row(
const rec_t* rec,
const ulint* offsets)
{
ut_a(is_clust());
ulint len;
dict_col_t& col= table->cols[table->vers_end];
ut_ad(col.vers_sys_end());
ulint nfield = dict_col_get_clust_pos(&col, this);
const byte *data = rec_get_nth_field(rec, offsets, nfield, &len);
if (col.mtype == DATA_FIXBINARY) {
ut_ad(len == sizeof timestamp_max_bytes);
return 0 != memcmp(data, timestamp_max_bytes, len);
} else {
ut_ad(col.mtype == DATA_INT);
ut_ad(len == sizeof trx_id_max_bytes);
return 0 != memcmp(data, trx_id_max_bytes, len);
}
ut_ad(0);
return false;
}
/** Check if record in secondary index is historical row.
@param[in] rec record in a secondary index
@param[out] history_row true if row is historical
@return true on error */
bool
dict_index_t::vers_history_row(
const rec_t* rec,
bool &history_row)
{
ut_ad(!is_clust());
bool error = false;
mem_heap_t* heap = NULL;
dict_index_t* clust_index = NULL;
ulint offsets_[REC_OFFS_NORMAL_SIZE];
ulint* offsets = offsets_;
rec_offs_init(offsets_);
mtr_t mtr;
mtr.start();
rec_t* clust_rec =
row_get_clust_rec(BTR_SEARCH_LEAF, rec, this, &clust_index, &mtr);
if (clust_rec) {
offsets = rec_get_offsets(clust_rec, clust_index, offsets, true,
ULINT_UNDEFINED, &heap);
history_row = clust_index->vers_history_row(clust_rec, offsets);
} else {
ib::error() << "foreign constraints: secondary index is out of "
"sync";
ut_ad(!"secondary index is out of sync");
error = true;
}
mtr.commit();
if (heap) {
mem_heap_free(heap);
}
return(error);
}
/***************************************************************//** /***************************************************************//**
Checks if foreign key constraint fails for an index entry. Sets shared locks Checks if foreign key constraint fails for an index entry. Sets shared locks
which lock either the success or the failure of the constraint. NOTE that which lock either the success or the failure of the constraint. NOTE that