InnoDB Plugin
1.0
|
#include <row0mysql.h>
A struct for (sometimes lazily) prebuilt structures in an Innobase table
handle used within MySQL; these are used to save CPU time.
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
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
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
void* row_prebuilt_t::idx_cond |
In ICP, pointer to a ha_innobase, passed to innobase_index_cond(). NULL if index condition pushdown is not used.
ulint row_prebuilt_t::idx_cond_n_cols |
Number of fields in idx_cond_cols. 0 if and only if idx_cond == NULL.
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 row_merge_is_index_usable(trx,index)
unsigned row_prebuilt_t::innodb_api |
whether this is a InnoDB API query
const rec_t* row_prebuilt_t::innodb_api_rec |
InnoDB API search result
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
byte* row_prebuilt_t::ins_upd_rec_buff |
buffer for storing data converted to the Innobase format from the MySQL format
ibool 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.
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
unsigned row_prebuilt_t::mysql_has_locked |
this is set TRUE when MySQL calls external_lock on this handle with a lock flag, and set FALSE when with the F_UNLOCK flag
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
ulint row_prebuilt_t::new_rec_locks |
normally 0; if srv_locks_unsafe_for_binlog is TRUE or 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_unlock_for_mysql() when releasing the lock under the cursor if we determine after retrieving the row that it does not need to be locked ('mini-rollback')
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
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)
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 innodb_locks_unsafe_for_binlog is 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.
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
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
ulint row_prebuilt_t::stored_select_lock_type |
this field is used to remember the original select_lock_type that was decided in ha_innodb.cc, ::store_lock(), ::external_lock(), etc.
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_BLOB == get_innobase_type_from_mysql_type(); not to be confused with InnoDB externally stored columns (VARCHAR can be off-page too)
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