| 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
 1.8.1.2
 1.8.1.2