put InnoDB HANDLER patch back again :))

parent efe85086
...@@ -117,6 +117,13 @@ void ...@@ -117,6 +117,13 @@ void
trx_start_if_not_started( trx_start_if_not_started(
/*=====================*/ /*=====================*/
trx_t* trx); /* in: transaction */ trx_t* trx); /* in: transaction */
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline(
/*===============================*/
trx_t* trx); /* in: transaction */
/******************************************************************** /********************************************************************
Commits a transaction. */ Commits a transaction. */
......
...@@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL; ...@@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL;
the kernel mutex */ the kernel mutex */
ulint trx_n_mysql_transactions = 0; ulint trx_n_mysql_transactions = 0;
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline(
/*===============================*/
trx_t* trx) /* in: transaction */
{
trx_start_if_not_started(trx);
}
/******************************************************************** /********************************************************************
Retrieves the error_info field from a trx. */ Retrieves the error_info field from a trx. */
......
...@@ -398,6 +398,61 @@ ha_innobase::update_thd( ...@@ -398,6 +398,61 @@ ha_innobase::update_thd(
return(0); return(0);
} }
/*********************************************************************
Call this when you have opened a new table handle in HANDLER, before you
call index_read_idx() etc. Actually, we can let the cursor stay open even
over a transaction commit! Then you should call this before every operation,
fecth next etc. This function inits the necessary things even after a
transaction commit. */
/* TODO: THIS CODE HAS NOT BEEN TESTED!!! */
void
ha_innobase::init_table_handle_for_HANDLER(void)
/*============================================*/
{
row_prebuilt_t* prebuilt;
/* If current thd does not yet have a trx struct, create one.
If the current handle does not yet have a prebuilt struct, create
one. Update the trx pointers in the prebuilt struct. Normally
this operation is done in external_lock. */
update_thd(current_thd);
/* Initialize the prebuilt struct much like it would be inited in
external_lock */
prebuilt = (row_prebuilt_t*)innobase_prebuilt;
/* If the transaction is not started yet, start it */
trx_start_if_not_started_noninline(prebuilt->trx);
/* Assign a read view if the transaction does not have it yet */
trx_assign_read_view(prebuilt->trx);
/* We did the necessary inits in this function, no need to repeat them
in row_search_for_mysql */
prebuilt->sql_stat_start = FALSE;
/* We let HANDLER always to do the reads as consistent reads, even
if the trx isolation level would have been specified as SERIALIZABLE */
prebuilt->select_lock_type = LOCK_NONE;
/* Always fetch all columns in the index record */
prebuilt->hint_no_need_to_fetch_extra_cols = FALSE;
/* We want always to fetch all columns in the whole row? Or do
we???? */
prebuilt->read_just_key = FALSE;
}
/************************************************************************* /*************************************************************************
Opens an InnoDB database. */ Opens an InnoDB database. */
......
...@@ -157,6 +157,7 @@ class ha_innobase: public handler ...@@ -157,6 +157,7 @@ class ha_innobase: public handler
void free_foreign_key_create_info(char* str); void free_foreign_key_create_info(char* str);
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
enum thr_lock_type lock_type); enum thr_lock_type lock_type);
void init_table_handle_for_HANDLER(); /* TODO: NOT TESTED!!! */
longlong get_auto_increment(); longlong get_auto_increment();
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment