diff options
author | unknown <serg@sergbook.mysql.com> | 2002-08-12 16:18:37 +0200 |
---|---|---|
committer | unknown <serg@sergbook.mysql.com> | 2002-08-12 16:18:37 +0200 |
commit | d49f3c08cd42a36649ee83ac6c5e6052498305d3 (patch) | |
tree | b93c8e0d0efea24ab7112c38239c221d2b98ed43 | |
parent | 8b572117361a96d8698b17c88c87b60de27fdc4a (diff) | |
download | mariadb-git-d49f3c08cd42a36649ee83ac6c5e6052498305d3.tar.gz |
put InnoDB HANDLER patch back again :))
-rw-r--r-- | innobase/include/trx0trx.h | 7 | ||||
-rw-r--r-- | innobase/trx/trx0trx.c | 11 | ||||
-rw-r--r-- | sql/ha_innobase.cc | 55 | ||||
-rw-r--r-- | sql/ha_innobase.h | 1 |
4 files changed, 74 insertions, 0 deletions
diff --git a/innobase/include/trx0trx.h b/innobase/include/trx0trx.h index 84d85fcaff6..e1f65e9da0f 100644 --- a/innobase/include/trx0trx.h +++ b/innobase/include/trx0trx.h @@ -117,6 +117,13 @@ void trx_start_if_not_started( /*=====================*/ 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. */ diff --git a/innobase/trx/trx0trx.c b/innobase/trx/trx0trx.c index 94a11042de5..b8cf7ad4a6d 100644 --- a/innobase/trx/trx0trx.c +++ b/innobase/trx/trx0trx.c @@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL; the kernel mutex */ 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. */ diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc index 878f8855b07..69d539fc061 100644 --- a/sql/ha_innobase.cc +++ b/sql/ha_innobase.cc @@ -398,6 +398,61 @@ ha_innobase::update_thd( 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. */ diff --git a/sql/ha_innobase.h b/sql/ha_innobase.h index abb6ade79f7..2c69018ed38 100644 --- a/sql/ha_innobase.h +++ b/sql/ha_innobase.h @@ -157,6 +157,7 @@ class ha_innobase: public handler void free_foreign_key_create_info(char* str); THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type); + void init_table_handle_for_HANDLER(); /* TODO: NOT TESTED!!! */ longlong get_auto_increment(); }; |