Commit a2943ec7 authored by marko's avatar marko

branches/zip: Enclose the definition of dict_index_t::trx_id in

#ifdef ROW_MERGE_IS_INDEX_USABLE, to avoid growing the memory
footprint until MySQL implements and calls the virtual method
handler::is_index_available() or something equivalent.
parent c056d2c3
...@@ -554,8 +554,10 @@ dict_build_index_def_step( ...@@ -554,8 +554,10 @@ dict_build_index_def_step(
ins_node_set_new_row(node->ind_def, row); ins_node_set_new_row(node->ind_def, row);
#ifdef ROW_MERGE_IS_INDEX_USABLE
/* Note that the index was created by this transaction. */ /* Note that the index was created by this transaction. */
index->trx_id = trx->id; index->trx_id = trx->id;
#endif /* ROW_MERGE_IS_INDEX_USABLE */
return(DB_SUCCESS); return(DB_SUCCESS);
} }
......
...@@ -3906,6 +3906,7 @@ ha_innobase::try_semi_consistent_read(bool yes) ...@@ -3906,6 +3906,7 @@ ha_innobase::try_semi_consistent_read(bool yes)
} }
} }
#ifdef ROW_MERGE_IS_INDEX_USABLE
/********************************************************************** /**********************************************************************
Check if an index can be used by the optimizer. */ Check if an index can be used by the optimizer. */
...@@ -3915,11 +3916,11 @@ ha_innobase::is_index_available( ...@@ -3915,11 +3916,11 @@ ha_innobase::is_index_available(
/* out: true if available else false*/ /* out: true if available else false*/
uint keynr) /* in: index number to check */ uint keynr) /* in: index number to check */
{ {
DBUG_ENTER("is_index_available"); DBUG_ENTER("ha_innobase::is_index_available");
if (table && keynr != MAX_KEY && table->s->keys > 0) { if (table && keynr != MAX_KEY && table->s->keys > 0) {
dict_index_t* index; const dict_index_t* index;
KEY* key = table->key_info + keynr; const KEY* key = table->key_info + keynr;
ut_ad(user_thd == ha_thd()); ut_ad(user_thd == ha_thd());
ut_a(prebuilt->trx == thd_to_trx(user_thd)); ut_a(prebuilt->trx == thd_to_trx(user_thd));
...@@ -3935,6 +3936,7 @@ ha_innobase::is_index_available( ...@@ -3935,6 +3936,7 @@ ha_innobase::is_index_available(
DBUG_RETURN(true); DBUG_RETURN(true);
} }
#endif /* ROW_MERGE_IS_INDEX_USABLE */
/********************************************************************** /**********************************************************************
Initializes a handle to use an index. */ Initializes a handle to use an index. */
......
...@@ -121,7 +121,14 @@ class ha_innobase: public handler ...@@ -121,7 +121,14 @@ class ha_innobase: public handler
void try_semi_consistent_read(bool yes); void try_semi_consistent_read(bool yes);
void unlock_row(); void unlock_row();
bool is_index_available(uint index); #ifdef ROW_MERGE_IS_INDEX_USABLE
/** Check if an index can be used by this transaction.
* @param keynr key number to check
* @return true if available, false if the index
* does not contain old records that exist
* in the read view of this transaction */
bool is_index_available(uint keynr);
#endif /* ROW_MERGE_IS_INDEX_USABLE */
int index_init(uint index, bool sorted); int index_init(uint index, bool sorted);
int index_end(); int index_end();
int index_read(uchar * buf, const uchar * key, int index_read(uchar * buf, const uchar * key,
......
...@@ -239,9 +239,11 @@ struct dict_index_struct{ ...@@ -239,9 +239,11 @@ struct dict_index_struct{
index tree */ index tree */
rw_lock_t lock; /* read-write lock protecting the upper levels rw_lock_t lock; /* read-write lock protecting the upper levels
of the index tree */ of the index tree */
#ifdef ROW_MERGE_IS_INDEX_USABLE
dulint trx_id; /* id of the transaction that created this dulint trx_id; /* id of the transaction that created this
index. It can be zero which implies that index, or ut_dulint_zero if the index existed
it was created on database startup.*/ when InnoDB was started up */
#endif /* ROW_MERGE_IS_INDEX_USABLE */
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
ulint magic_n;/* magic number */ ulint magic_n;/* magic number */
# define DICT_INDEX_MAGIC_N 76789786 # define DICT_INDEX_MAGIC_N 76789786
......
...@@ -122,6 +122,7 @@ row_merge_create_index( ...@@ -122,6 +122,7 @@ row_merge_create_index(
dict_table_t* table, /* in: the index is on this table */ dict_table_t* table, /* in: the index is on this table */
const merge_index_def_t* /* in: the index definition */ const merge_index_def_t* /* in: the index definition */
index_def); index_def);
#ifdef ROW_MERGE_IS_INDEX_USABLE
/************************************************************************* /*************************************************************************
Check if a transaction can use an index. */ Check if a transaction can use an index. */
...@@ -132,6 +133,7 @@ row_merge_is_index_usable( ...@@ -132,6 +133,7 @@ row_merge_is_index_usable(
the transaction else FALSE*/ the transaction else FALSE*/
const trx_t* trx, /* in: transaction */ const trx_t* trx, /* in: transaction */
const dict_index_t* index); /* in: index to check */ const dict_index_t* index); /* in: index to check */
#endif /* ROW_MERGE_IS_INDEX_USABLE */
/************************************************************************* /*************************************************************************
If there are views that refer to the old table name then we "attach" to If there are views that refer to the old table name then we "attach" to
the new instance of the table else we drop it immediately. */ the new instance of the table else we drop it immediately. */
......
...@@ -1876,10 +1876,12 @@ row_merge_create_index( ...@@ -1876,10 +1876,12 @@ row_merge_create_index(
ut_a(index); ut_a(index);
#ifdef ROW_MERGE_IS_INDEX_USABLE
/* Note the id of the transaction that created this /* Note the id of the transaction that created this
index, we use it to restrict readers from accessing index, we use it to restrict readers from accessing
this index, to ensure read consistency. */ this index, to ensure read consistency. */
index->trx_id = trx->id; index->trx_id = trx->id;
#endif /* ROW_MERGE_IS_INDEX_USABLE */
/* Create element and append to list in trx. So that /* Create element and append to list in trx. So that
we can rename from temp name to real name. */ we can rename from temp name to real name. */
...@@ -1899,6 +1901,7 @@ row_merge_create_index( ...@@ -1899,6 +1901,7 @@ row_merge_create_index(
return(index); return(index);
} }
#ifdef ROW_MERGE_IS_INDEX_USABLE
/************************************************************************* /*************************************************************************
Check if a transaction can use an index. */ Check if a transaction can use an index. */
...@@ -1914,6 +1917,7 @@ row_merge_is_index_usable( ...@@ -1914,6 +1917,7 @@ row_merge_is_index_usable(
return(ut_dulint_cmp(index->trx_id, trx->read_view->low_limit_id) < 0); return(ut_dulint_cmp(index->trx_id, trx->read_view->low_limit_id) < 0);
} }
#endif /* ROW_MERGE_IS_INDEX_USABLE */
/************************************************************************* /*************************************************************************
Drop the old table. */ Drop the old table. */
......
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