IB: move methods to proper place
This commit is contained in:
parent
d72462a29b
commit
2a3c66a636
@ -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);
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user