MySQL 9.1.0
Source Code Documentation
|
A struct for (sometimes lazily) prebuilt structures in an Innobase table handle used within MySQL; these are used to save CPU time. More...
#include <row0mysql.h>
Classes | |
class | row_is_reading_range_guard_t |
Public Types | |
enum | { LOCK_PCUR , LOCK_CLUST_PCUR , LOCK_COUNT } |
Public Member Functions | |
space_id_t | space_id () const |
bool | is_reading_range () const |
row_is_reading_range_guard_t | get_is_reading_range_guard () |
lob::undo_vers_t * | get_lob_undo () |
void | lob_undo_reset () |
bool | can_prefetch_records () const |
Can a record buffer or a prefetch cache be utilized for prefetching records in this scan? More... | |
bool | allow_duplicates () |
Determines if the query is REPLACE or ON DUPLICATE KEY UPDATE in which case duplicate values should be allowed (and further processed) instead of causing an error. More... | |
void | try_unlock (bool has_latches_on_recs) |
This is an no-op unless trx is using a READ COMMITTED or READ UNCOMMITTED isolation level. More... | |
size_t | new_rec_locks_count () const |
Counts how many elements of. More... | |
void | init_search_tuples_types () |
Initializes search_tuple and m_stop_tuple shape so they match the index. More... | |
void | clear_search_tuples () |
Resets both search_tuple and m_stop_tuple. More... | |
void | end_stmt () |
Inside this function perform activity that needs to be done at the end of statement. More... | |
bool | skip_concurrency_ticket () const |
row_prebuilt_t (row_prebuilt_t const &)=delete | |
It is unsafe to copy this struct, and moving it would be non-trivial, because we want to keep in sync with row_is_reading_range_guard_t. More... | |
row_prebuilt_t & | operator= (row_prebuilt_t const &)=delete |
row_prebuilt_t & | operator= (row_prebuilt_t &&)=delete |
row_prebuilt_t (row_prebuilt_t &&)=delete | |
Public Attributes | |
ulint | magic_n |
this magic number is set to ROW_PREBUILT_ALLOCATED when created, or ROW_PREBUILT_FREED when the struct has been freed More... | |
dict_table_t * | table |
Innobase table handle. More... | |
dict_index_t * | index |
current index for a search, if any More... | |
trx_t * | trx |
current transaction handle More... | |
unsigned | sql_stat_start: 1 |
true when we start processing of an SQL statement: we may have to set an intention lock on the table, create a consistent read view etc. More... | |
unsigned | clust_index_was_generated: 1 |
if the user did not define a primary key in MySQL, then Innobase automatically generated a clustered index where the ordering column is the row id: in this case this flag is set to true More... | |
unsigned | index_usable: 1 |
caches the value of index->is_usable(trx) More... | |
unsigned | read_just_key: 1 |
set to 1 when MySQL calls ha_innobase::extra with the argument HA_EXTRA_KEYREAD; it is enough to read just columns defined in the index (i.e., no read of the clustered index record necessary) More... | |
unsigned | used_in_HANDLER: 1 |
true if we have been using this handle in a MySQL HANDLER low level index cursor command: then we must store the pcur position even in a unique search from a clustered index, because HANDLER allows NEXT and PREV in such a situation More... | |
unsigned | template_type: 2 |
ROW_MYSQL_WHOLE_ROW, ROW_MYSQL_REC_FIELDS, ROW_MYSQL_DUMMY_TEMPLATE, or ROW_MYSQL_NO_TEMPLATE. More... | |
unsigned | n_template: 10 |
number of elements in the template More... | |
unsigned | null_bitmap_len: 10 |
number of bytes in the SQL NULL bitmap at the start of a row in the MySQL format More... | |
unsigned | need_to_access_clustered: 1 |
if we are fetching columns through a secondary index and at least one column is not in the secondary index, then this is set to true More... | |
unsigned | templ_contains_blob: 1 |
true if the template contains a column with DATA_LARGE_MTYPE( get_innobase_type_from_mysql_type()) is true; not to be confused with InnoDB externally stored columns (VARCHAR can be off-page too) More... | |
unsigned | templ_contains_fixed_point: 1 |
true if the template contains a column with DATA_POINT. More... | |
unsigned | on_duplicate_key_update: 1 |
1 if extra(HA_EXTRA_INSERT_WITH_UPDATE) was requested, which happens when ON DUPLICATE KEY UPDATE clause is present, 0 otherwise More... | |
unsigned | replace: 1 |
1 if extra(HA_EXTRA_WRITE_CAN_REPLACE) was requested, which happen when REPLACE is done instead of regular INSERT, 0 otherwise More... | |
mysql_row_templ_t * | mysql_template |
template used to transform rows fast between MySQL and Innobase formats; memory for this template is not allocated from 'heap' More... | |
mem_heap_t * | heap |
memory heap from which these auxiliary structures are allocated when needed More... | |
mem_heap_t * | cursor_heap |
memory heap from which innodb_api_buf is allocated per session More... | |
ins_node_t * | ins_node |
Innobase SQL insert node used to perform inserts to the table. More... | |
byte * | ins_upd_rec_buff |
buffer for storing data converted to the Innobase format from the MySQL format More... | |
multi_value_data * | mv_data |
const byte * | default_rec |
the default values of all columns (a "default row") in MySQL format More... | |
ulint | hint_need_to_fetch_extra_cols |
normally this is set to 0; if this is set to ROW_RETRIEVE_PRIMARY_KEY, then we should at least retrieve all columns in the primary key; if this is set to ROW_RETRIEVE_ALL_COLS, then we must retrieve all columns in the key (if read_just_key == 1), or all columns in the table More... | |
upd_node_t * | upd_node |
Innobase SQL update node used to perform updates and deletes. More... | |
trx_id_t | trx_id |
The table->def_trx_id when ins_graph was built. More... | |
que_fork_t * | ins_graph |
Innobase SQL query graph used in inserts. More... | |
que_fork_t * | upd_graph |
Innobase SQL query graph used in updates or deletes. More... | |
btr_pcur_t * | pcur |
persistent cursor used in selects and updates More... | |
btr_pcur_t * | clust_pcur |
persistent cursor used in some selects and updates More... | |
que_fork_t * | sel_graph |
dummy query graph used in selects More... | |
dtuple_t * | search_tuple |
prebuilt dtuple used in selects More... | |
dtuple_t * | m_stop_tuple |
prebuilt dtuple used in selects where the end of range is known More... | |
bool | m_stop_tuple_found |
Set to true in row_search_mvcc when a row matching exactly the length and value of stop_tuple was found, so that the next iteration of row_search_mvcc knows it can simply return DB_RECORD_NOT_FOUND. More... | |
byte | row_id [DATA_ROW_ID_LEN] |
if the clustered index was generated, the row id of the last row fetched is stored here More... | |
doc_id_t | fts_doc_id |
dtuple_t * | clust_ref |
prebuilt dtuple used in sel/upd/del More... | |
ulint | select_lock_type |
LOCK_NONE, LOCK_S, or LOCK_X. More... | |
enum select_mode | select_mode |
SELECT_ORDINARY, SELECT_SKIP_LOKCED, or SELECT_NO_WAIT. More... | |
ulint | row_read_type |
ROW_READ_WITH_LOCKS if row locks should be the obtained for records under an UPDATE or DELETE cursor. More... | |
ulint | mysql_prefix_len |
byte offset of the end of the last requested column More... | |
ulint | mysql_row_len |
length in bytes of a row in the MySQL format More... | |
ulint | n_rows_fetched |
number of rows fetched after positioning the current cursor More... | |
ulint | fetch_direction |
ROW_SEL_NEXT or ROW_SEL_PREV. More... | |
byte * | fetch_cache [MYSQL_FETCH_CACHE_SIZE] |
a cache for fetched rows if we fetch many rows from the same cursor: it saves CPU time to fetch them in a batch; we reserve mysql_row_len bytes for each such row; these pointers point 4 bytes past the allocated mem buf start, because there is a 4 byte magic number at the start and at the end More... | |
ulint | fetch_cache_first |
position of the first not yet fetched row in fetch_cache More... | |
ulint | n_fetch_cached |
number of not yet fetched rows in fetch_cache More... | |
mem_heap_t * | blob_heap |
in SELECTS BLOB fields are copied to this heap More... | |
mem_heap_t * | old_vers_heap |
memory heap where a previous version is built in consistent read More... | |
std::bitset< LOCK_COUNT > | new_rec_lock |
normally false; if session is using READ COMMITTED or READ UNCOMMITTED isolation level, set in row_search_for_mysql() if we set a new record lock on the secondary or clustered index; this is used in row_try_unlock() when releasing the lock under the cursor if we determine after retrieving the row that it does not need to be locked ('mini-rollback') More... | |
bool | keep_other_fields_on_keyread |
when using fetch cache with HA_EXTRA_KEYREAD, don't overwrite other fields in mysql row row buffer. More... | |
bool | in_fts_query |
Whether we are in a FTS query. More... | |
bool | fts_doc_id_in_read_set |
true if table has externally defined FTS_DOC_ID coulmn. More... | |
ulonglong | autoinc_last_value |
last value of AUTO-INC interval More... | |
ulonglong | autoinc_increment |
The increment step of the auto increment column. More... | |
ulonglong | autoinc_offset |
The offset passed to get_auto_increment() by MySQL. More... | |
dberr_t | autoinc_error |
The actual error code encountered while trying to init or read the autoinc value from the table. More... | |
bool | idx_cond |
True if index condition pushdown is used, false otherwise. More... | |
ulint | idx_cond_n_cols |
Number of fields in idx_cond_cols. More... | |
unsigned | innodb_api: 1 |
whether this is a InnoDB API query More... | |
const rec_t * | innodb_api_rec |
InnoDB API search result. More... | |
void * | innodb_api_buf |
Buffer holding copy of the physical Innodb API search record. More... | |
ulint | innodb_api_rec_size |
Size of the Innodb API record. More... | |
rtr_info_t * | rtr_info |
R-tree Search Info. More... | |
ulint | magic_n2 |
this should be the same as magic_n More... | |
bool | ins_sel_stmt |
if true then ins_sel_statement. More... | |
innodb_session_t * | session |
InnoDB session handler. More... | |
byte * | srch_key_val1 |
buffer used in converting search key values from MySQL format to InnoDB format. More... | |
byte * | srch_key_val2 |
buffer used in converting search key values from MySQL format to InnoDB format. More... | |
uint | srch_key_val_len |
Size of search key. More... | |
bool | m_no_prefetch |
Disable prefetch. More... | |
bool | no_read_locking |
true, if server has called ha_extra(HA_EXTRA_NO_READ_LOCKING) More... | |
bool | no_autoinc_locking |
true, if we were asked to skip AUTOINC locking for the table. More... | |
bool | m_read_virtual_key |
Return materialized key for secondary index scan. More... | |
bool | m_temp_read_shared |
Whether this is a temporary(intrinsic) table read to keep the position for this MySQL TABLE object. More... | |
bool | m_temp_tree_modified |
Whether tree modifying operation happened on a temporary (intrinsic) table index tree. More... | |
TABLE * | m_mysql_table |
The MySQL table object. More... | |
ha_innobase * | m_mysql_handler |
The MySQL handler object. More... | |
ulonglong | m_fts_limit |
limit value to avoid fts result overflow More... | |
bool | m_end_range |
True if exceeded the end_range while filling the prefetch cache. More... | |
lob::undo_vers_t | m_lob_undo |
Undo information for LOB mvcc. More... | |
Private Member Functions | |
void | init_tuple_types (dtuple_t *tuple) |
A helper function for init_search_tuples_types() which prepares the shape of the tuple to match the index. More... | |
Private Attributes | |
bool | m_is_reading_range |
Set to true iff we are inside read_range_first() or read_range_next() More... | |
A struct for (sometimes lazily) prebuilt structures in an Innobase table handle used within MySQL; these are used to save CPU time.
|
delete |
It is unsafe to copy this struct, and moving it would be non-trivial, because we want to keep in sync with row_is_reading_range_guard_t.
Therefore it is much safer/easier to just forbid such operations.
|
delete |
|
inline |
Determines if the query is REPLACE or ON DUPLICATE KEY UPDATE in which case duplicate values should be allowed (and further processed) instead of causing an error.
bool row_prebuilt_t::can_prefetch_records | ( | ) | const |
Can a record buffer or a prefetch cache be utilized for prefetching records in this scan?
true | if records can be prefetched |
false | if records cannot be prefetched |
|
inline |
Resets both search_tuple and m_stop_tuple.
void row_prebuilt_t::end_stmt | ( | ) |
Inside this function perform activity that needs to be done at the end of statement.
|
inline |
|
inline |
|
inline |
Initializes search_tuple and m_stop_tuple shape so they match the index.
|
inlineprivate |
A helper function for init_search_tuples_types() which prepares the shape of the tuple to match the index.
[in] | tuple | this->search_tuple or this->m_stop_tuple |
|
inline |
|
inline |
|
inline |
Counts how many elements of.
|
delete |
|
delete |
bool row_prebuilt_t::skip_concurrency_ticket | ( | ) | const |
|
inline |
void row_prebuilt_t::try_unlock | ( | bool | has_latches_on_recs | ) |
This is an no-op unless trx is using a READ COMMITTED or READ UNCOMMITTED isolation level.
Before calling this function row_search_for_mysql() must have stored to new_rec_locks[] the information which new record locks really were set. This function removes a newly set index record locks under pcur or clust_pcur. Thus, this implements a 'mini-rollback' that releases the latest index record locks we've just set.
[in] | has_latches_on_recs | true if called so that we have the latches on the records under pcur and clust_pcur, and we do not need to reposition the cursors. |
dberr_t row_prebuilt_t::autoinc_error |
The actual error code encountered while trying to init or read the autoinc value from the table.
We store it here so that we can return it to MySQL
ulonglong row_prebuilt_t::autoinc_increment |
The increment step of the auto increment column.
Value must be greater than or equal to 1. Required to calculate the next value
ulonglong row_prebuilt_t::autoinc_last_value |
last value of AUTO-INC interval
ulonglong row_prebuilt_t::autoinc_offset |
The offset passed to get_auto_increment() by MySQL.
Required to calculate the next value
mem_heap_t* row_prebuilt_t::blob_heap |
in SELECTS BLOB fields are copied to this heap
unsigned row_prebuilt_t::clust_index_was_generated |
if the user did not define a primary key in MySQL, then Innobase automatically generated a clustered index where the ordering column is the row id: in this case this flag is set to true
btr_pcur_t* row_prebuilt_t::clust_pcur |
persistent cursor used in some selects and updates
dtuple_t* row_prebuilt_t::clust_ref |
prebuilt dtuple used in sel/upd/del
mem_heap_t* row_prebuilt_t::cursor_heap |
memory heap from which innodb_api_buf is allocated per session
const byte* row_prebuilt_t::default_rec |
the default values of all columns (a "default row") in MySQL format
byte* row_prebuilt_t::fetch_cache[MYSQL_FETCH_CACHE_SIZE] |
a cache for fetched rows if we fetch many rows from the same cursor: it saves CPU time to fetch them in a batch; we reserve mysql_row_len bytes for each such row; these pointers point 4 bytes past the allocated mem buf start, because there is a 4 byte magic number at the start and at the end
ulint row_prebuilt_t::fetch_cache_first |
position of the first not yet fetched row in fetch_cache
ulint row_prebuilt_t::fetch_direction |
ROW_SEL_NEXT or ROW_SEL_PREV.
doc_id_t row_prebuilt_t::fts_doc_id |
bool row_prebuilt_t::fts_doc_id_in_read_set |
true if table has externally defined FTS_DOC_ID coulmn.
mem_heap_t* row_prebuilt_t::heap |
memory heap from which these auxiliary structures are allocated when needed
ulint row_prebuilt_t::hint_need_to_fetch_extra_cols |
normally this is set to 0; if this is set to ROW_RETRIEVE_PRIMARY_KEY, then we should at least retrieve all columns in the primary key; if this is set to ROW_RETRIEVE_ALL_COLS, then we must retrieve all columns in the key (if read_just_key == 1), or all columns in the table
bool row_prebuilt_t::idx_cond |
True if index condition pushdown is used, false otherwise.
ulint row_prebuilt_t::idx_cond_n_cols |
Number of fields in idx_cond_cols.
0 if and only if idx_cond == false.
bool row_prebuilt_t::in_fts_query |
Whether we are in a FTS query.
dict_index_t* row_prebuilt_t::index |
current index for a search, if any
unsigned row_prebuilt_t::index_usable |
caches the value of index->is_usable(trx)
unsigned row_prebuilt_t::innodb_api |
whether this is a InnoDB API query
void* row_prebuilt_t::innodb_api_buf |
Buffer holding copy of the physical Innodb API search record.
const rec_t* row_prebuilt_t::innodb_api_rec |
InnoDB API search result.
ulint row_prebuilt_t::innodb_api_rec_size |
Size of the Innodb API record.
que_fork_t* row_prebuilt_t::ins_graph |
Innobase SQL query graph used in inserts.
Will be rebuilt on trx_id or n_indexes mismatch.
ins_node_t* row_prebuilt_t::ins_node |
Innobase SQL insert node used to perform inserts to the table.
bool row_prebuilt_t::ins_sel_stmt |
if true then ins_sel_statement.
byte* row_prebuilt_t::ins_upd_rec_buff |
buffer for storing data converted to the Innobase format from the MySQL format
bool row_prebuilt_t::keep_other_fields_on_keyread |
when using fetch cache with HA_EXTRA_KEYREAD, don't overwrite other fields in mysql row row buffer.
bool row_prebuilt_t::m_end_range |
True if exceeded the end_range while filling the prefetch cache.
ulonglong row_prebuilt_t::m_fts_limit |
limit value to avoid fts result overflow
|
private |
Set to true iff we are inside read_range_first() or read_range_next()
lob::undo_vers_t row_prebuilt_t::m_lob_undo |
Undo information for LOB mvcc.
ha_innobase* row_prebuilt_t::m_mysql_handler |
The MySQL handler object.
TABLE* row_prebuilt_t::m_mysql_table |
The MySQL table object.
bool row_prebuilt_t::m_no_prefetch |
Disable prefetch.
bool row_prebuilt_t::m_read_virtual_key |
Return materialized key for secondary index scan.
dtuple_t* row_prebuilt_t::m_stop_tuple |
prebuilt dtuple used in selects where the end of range is known
bool row_prebuilt_t::m_stop_tuple_found |
Set to true in row_search_mvcc when a row matching exactly the length and value of stop_tuple was found, so that the next iteration of row_search_mvcc knows it can simply return DB_RECORD_NOT_FOUND.
If true, then for sure, at least one such matching row was seen. If false, it might be false negative, as not all control paths lead to setting this field to true in case a matching row is visited.
bool row_prebuilt_t::m_temp_read_shared |
Whether this is a temporary(intrinsic) table read to keep the position for this MySQL TABLE object.
bool row_prebuilt_t::m_temp_tree_modified |
Whether tree modifying operation happened on a temporary (intrinsic) table index tree.
In this case, it could be split, but no shrink.
ulint row_prebuilt_t::magic_n |
this magic number is set to ROW_PREBUILT_ALLOCATED when created, or ROW_PREBUILT_FREED when the struct has been freed
ulint row_prebuilt_t::magic_n2 |
this should be the same as magic_n
multi_value_data* row_prebuilt_t::mv_data |
ulint row_prebuilt_t::mysql_prefix_len |
byte offset of the end of the last requested column
ulint row_prebuilt_t::mysql_row_len |
length in bytes of a row in the MySQL format
mysql_row_templ_t* row_prebuilt_t::mysql_template |
template used to transform rows fast between MySQL and Innobase formats; memory for this template is not allocated from 'heap'
ulint row_prebuilt_t::n_fetch_cached |
number of not yet fetched rows in fetch_cache
ulint row_prebuilt_t::n_rows_fetched |
number of rows fetched after positioning the current cursor
unsigned row_prebuilt_t::n_template |
number of elements in the template
unsigned row_prebuilt_t::need_to_access_clustered |
if we are fetching columns through a secondary index and at least one column is not in the secondary index, then this is set to true
std::bitset<LOCK_COUNT> row_prebuilt_t::new_rec_lock |
normally false; if session is using READ COMMITTED or READ UNCOMMITTED isolation level, set in row_search_for_mysql() if we set a new record lock on the secondary or clustered index; this is used in row_try_unlock() when releasing the lock under the cursor if we determine after retrieving the row that it does not need to be locked ('mini-rollback')
[LOCK_PCUR] corresponds to pcur, the first index we looked up (can be secondary or clustered!)
[LOCK_CLUST_PCUR] corresponds to clust_pcur, which if used at all, is always the clustered index.
The meaning of these booleans is: true = we've created a rec lock, which we might release as we "own" it false = we should not release any lock for this index as we either reused some existing lock, or there is some other reason, we should keep it
bool row_prebuilt_t::no_autoinc_locking |
true, if we were asked to skip AUTOINC locking for the table.
bool row_prebuilt_t::no_read_locking |
true, if server has called ha_extra(HA_EXTRA_NO_READ_LOCKING)
unsigned row_prebuilt_t::null_bitmap_len |
number of bytes in the SQL NULL bitmap at the start of a row in the MySQL format
mem_heap_t* row_prebuilt_t::old_vers_heap |
memory heap where a previous version is built in consistent read
unsigned row_prebuilt_t::on_duplicate_key_update |
1 if extra(HA_EXTRA_INSERT_WITH_UPDATE) was requested, which happens when ON DUPLICATE KEY UPDATE clause is present, 0 otherwise
btr_pcur_t* row_prebuilt_t::pcur |
persistent cursor used in selects and updates
unsigned row_prebuilt_t::read_just_key |
set to 1 when MySQL calls ha_innobase::extra with the argument HA_EXTRA_KEYREAD; it is enough to read just columns defined in the index (i.e., no read of the clustered index record necessary)
unsigned row_prebuilt_t::replace |
1 if extra(HA_EXTRA_WRITE_CAN_REPLACE) was requested, which happen when REPLACE is done instead of regular INSERT, 0 otherwise
byte row_prebuilt_t::row_id[DATA_ROW_ID_LEN] |
if the clustered index was generated, the row id of the last row fetched is stored here
ulint row_prebuilt_t::row_read_type |
ROW_READ_WITH_LOCKS if row locks should be the obtained for records under an UPDATE or DELETE cursor.
If trx_t::allow_semi_consistent() returns true, this can be set to ROW_READ_TRY_SEMI_CONSISTENT, so that if the row under an UPDATE or DELETE cursor was locked by another transaction, InnoDB will resort to reading the last committed value ('semi-consistent read'). Then, this field will be set to ROW_READ_DID_SEMI_CONSISTENT to indicate that. If the row does not match the WHERE condition, MySQL will invoke handler::unlock_row() to clear the flag back to ROW_READ_TRY_SEMI_CONSISTENT and to simply skip the row. If the row matches, the next call to row_search_for_mysql() will lock the row. This eliminates lock waits in some cases; note that this breaks serializability.
rtr_info_t* row_prebuilt_t::rtr_info |
R-tree Search Info.
dtuple_t* row_prebuilt_t::search_tuple |
prebuilt dtuple used in selects
que_fork_t* row_prebuilt_t::sel_graph |
dummy query graph used in selects
ulint row_prebuilt_t::select_lock_type |
LOCK_NONE, LOCK_S, or LOCK_X.
enum select_mode row_prebuilt_t::select_mode |
SELECT_ORDINARY, SELECT_SKIP_LOKCED, or SELECT_NO_WAIT.
innodb_session_t* row_prebuilt_t::session |
InnoDB session handler.
unsigned row_prebuilt_t::sql_stat_start |
true when we start processing of an SQL statement: we may have to set an intention lock on the table, create a consistent read view etc.
byte* row_prebuilt_t::srch_key_val1 |
buffer used in converting search key values from MySQL format to InnoDB format.
byte* row_prebuilt_t::srch_key_val2 |
buffer used in converting search key values from MySQL format to InnoDB format.
uint row_prebuilt_t::srch_key_val_len |
Size of search key.
dict_table_t* row_prebuilt_t::table |
Innobase table handle.
unsigned row_prebuilt_t::templ_contains_blob |
true if the template contains a column with DATA_LARGE_MTYPE( get_innobase_type_from_mysql_type()) is true; not to be confused with InnoDB externally stored columns (VARCHAR can be off-page too)
unsigned row_prebuilt_t::templ_contains_fixed_point |
true if the template contains a column with DATA_POINT.
Since InnoDB regards DATA_POINT as non-BLOB type, the templ_contains_blob can't tell us if there is DATA_POINT
unsigned row_prebuilt_t::template_type |
ROW_MYSQL_WHOLE_ROW, ROW_MYSQL_REC_FIELDS, ROW_MYSQL_DUMMY_TEMPLATE, or ROW_MYSQL_NO_TEMPLATE.
trx_t* row_prebuilt_t::trx |
current transaction handle
trx_id_t row_prebuilt_t::trx_id |
The table->def_trx_id when ins_graph was built.
que_fork_t* row_prebuilt_t::upd_graph |
Innobase SQL query graph used in updates or deletes.
upd_node_t* row_prebuilt_t::upd_node |
Innobase SQL update node used to perform updates and deletes.
unsigned row_prebuilt_t::used_in_HANDLER |
true if we have been using this handle in a MySQL HANDLER low level index cursor command: then we must store the pcur position even in a unique search from a clustered index, because HANDLER allows NEXT and PREV in such a situation