Commit 56beb791 authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

refs #5394 shadow active_index with tokudb_active_index for scan operations on...

refs #5394 shadow active_index with tokudb_active_index for scan operations on a tokudb table.  fixes a problem in 5.6.6-m9.

git-svn-id: file:///svn/mysql/tokudb-engine/tokudb-engine@47135 c7de825b-a66e-492c-adef-691d508d4ae1
parent 7e505af0
...@@ -1273,6 +1273,7 @@ ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, t ...@@ -1273,6 +1273,7 @@ ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, t
doing_bulk_fetch = false; doing_bulk_fetch = false;
prelocked_left_range_size = 0; prelocked_left_range_size = 0;
prelocked_right_range_size = 0; prelocked_right_range_size = 0;
tokudb_active_index = MAX_KEY;
} }
ha_tokudb::~ha_tokudb() { ha_tokudb::~ha_tokudb() {
...@@ -4293,8 +4294,8 @@ void ha_tokudb::column_bitmaps_signal() { ...@@ -4293,8 +4294,8 @@ void ha_tokudb::column_bitmaps_signal() {
// //
// if we have max number of indexes, then MAX_KEY == primary_key // if we have max number of indexes, then MAX_KEY == primary_key
// //
if (active_index != MAX_KEY || active_index == primary_key) { if (tokudb_active_index != MAX_KEY || tokudb_active_index == primary_key) {
set_query_columns(active_index); set_query_columns(tokudb_active_index);
} }
} }
...@@ -4330,9 +4331,9 @@ int ha_tokudb::prepare_index_key_scan(const uchar * key, uint key_len) { ...@@ -4330,9 +4331,9 @@ int ha_tokudb::prepare_index_key_scan(const uchar * key, uint key_len) {
DBT start_key, end_key; DBT start_key, end_key;
THD* thd = ha_thd(); THD* thd = ha_thd();
HANDLE_INVALID_CURSOR(); HANDLE_INVALID_CURSOR();
pack_key(&start_key, active_index, prelocked_left_range, key, key_len, COL_NEG_INF); pack_key(&start_key, tokudb_active_index, prelocked_left_range, key, key_len, COL_NEG_INF);
prelocked_left_range_size = start_key.size; prelocked_left_range_size = start_key.size;
pack_key(&end_key, active_index, prelocked_right_range, key, key_len, COL_POS_INF); pack_key(&end_key, tokudb_active_index, prelocked_right_range, key, key_len, COL_POS_INF);
prelocked_right_range_size = end_key.size; prelocked_right_range_size = end_key.size;
error = cursor->c_pre_acquire_range_lock( error = cursor->c_pre_acquire_range_lock(
...@@ -4400,9 +4401,17 @@ int ha_tokudb::index_init(uint keynr, bool sorted) { ...@@ -4400,9 +4401,17 @@ int ha_tokudb::index_init(uint keynr, bool sorted) {
assert(r==0); assert(r==0);
} }
active_index = keynr; active_index = keynr;
if (active_index < MAX_KEY) {
DBUG_ASSERT(keynr <= table->s->keys);
} else {
DBUG_ASSERT(active_index == MAX_KEY);
keynr = primary_key;
}
tokudb_active_index = keynr;
last_cursor_error = 0; last_cursor_error = 0;
range_lock_grabbed = false; range_lock_grabbed = false;
DBUG_ASSERT(keynr <= table->s->keys);
DBUG_ASSERT(share->key_file[keynr]); DBUG_ASSERT(share->key_file[keynr]);
cursor_flags = get_cursor_isolation_flags(lock.type, thd); cursor_flags = get_cursor_isolation_flags(lock.type, thd);
if (use_write_locks) { if (use_write_locks) {
...@@ -4454,7 +4463,7 @@ int ha_tokudb::index_end() { ...@@ -4454,7 +4463,7 @@ int ha_tokudb::index_end() {
cursor = NULL; cursor = NULL;
last_cursor_error = 0; last_cursor_error = 0;
} }
active_index = MAX_KEY; active_index = tokudb_active_index = MAX_KEY;
// //
// reset query variables // reset query variables
...@@ -4664,9 +4673,9 @@ int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) { ...@@ -4664,9 +4673,9 @@ int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) {
// //
// now do the comparison // now do the comparison
// //
pack_key(&curr_key, active_index, key_buff2, key, keylen, COL_ZERO); pack_key(&curr_key, tokudb_active_index, key_buff2, key, keylen, COL_ZERO);
create_dbt_key_from_table(&found_key,active_index,key_buff3,buf,&has_null); create_dbt_key_from_table(&found_key,tokudb_active_index,key_buff3,buf,&has_null);
cmp = tokudb_prefix_cmp_dbt_key(share->key_file[active_index], &curr_key, &found_key); cmp = tokudb_prefix_cmp_dbt_key(share->key_file[tokudb_active_index], &curr_key, &found_key);
if (cmp) { if (cmp) {
error = HA_ERR_END_OF_FILE; error = HA_ERR_END_OF_FILE;
} }
...@@ -4713,7 +4722,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4713,7 +4722,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
info.ha = this; info.ha = this;
info.buf = buf; info.buf = buf;
info.keynr = active_index; info.keynr = tokudb_active_index;
ir_info.smart_dbt_info = info; ir_info.smart_dbt_info = info;
ir_info.cmp = 0; ir_info.cmp = 0;
...@@ -4721,7 +4730,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4721,7 +4730,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
flags = SET_PRELOCK_FLAG(0); flags = SET_PRELOCK_FLAG(0);
switch (find_flag) { switch (find_flag) {
case HA_READ_KEY_EXACT: /* Find first record else error */ case HA_READ_KEY_EXACT: /* Find first record else error */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_NEG_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_NEG_INF);
ir_info.orig_key = &lookup_key; ir_info.orig_key = &lookup_key;
error = cursor->c_getf_set_range(cursor, flags, error = cursor->c_getf_set_range(cursor, flags,
...@@ -4731,17 +4740,17 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4731,17 +4740,17 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
} }
break; break;
case HA_READ_AFTER_KEY: /* Find next rec. after key-record */ case HA_READ_AFTER_KEY: /* Find next rec. after key-record */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_POS_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_POS_INF);
error = cursor->c_getf_set_range(cursor, flags, error = cursor->c_getf_set_range(cursor, flags,
&lookup_key, SMART_DBT_CALLBACK, &info); &lookup_key, SMART_DBT_CALLBACK, &info);
break; break;
case HA_READ_BEFORE_KEY: /* Find next rec. before key-record */ case HA_READ_BEFORE_KEY: /* Find next rec. before key-record */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_NEG_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_NEG_INF);
error = cursor->c_getf_set_range_reverse(cursor, flags, error = cursor->c_getf_set_range_reverse(cursor, flags,
&lookup_key, SMART_DBT_CALLBACK, &info); &lookup_key, SMART_DBT_CALLBACK, &info);
break; break;
case HA_READ_KEY_OR_NEXT: /* Record or next record */ case HA_READ_KEY_OR_NEXT: /* Record or next record */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_NEG_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_NEG_INF);
error = cursor->c_getf_set_range(cursor, flags, error = cursor->c_getf_set_range(cursor, flags,
&lookup_key, SMART_DBT_CALLBACK, &info); &lookup_key, SMART_DBT_CALLBACK, &info);
break; break;
...@@ -4749,7 +4758,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4749,7 +4758,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
// This case does not seem to ever be used, it is ok for it to be slow // This case does not seem to ever be used, it is ok for it to be slow
// //
case HA_READ_KEY_OR_PREV: /* Record or previous */ case HA_READ_KEY_OR_PREV: /* Record or previous */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_NEG_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_NEG_INF);
ir_info.orig_key = &lookup_key; ir_info.orig_key = &lookup_key;
error = cursor->c_getf_set_range(cursor, flags, error = cursor->c_getf_set_range(cursor, flags,
&lookup_key, SMART_DBT_IR_CALLBACK, &ir_info); &lookup_key, SMART_DBT_IR_CALLBACK, &ir_info);
...@@ -4761,12 +4770,12 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4761,12 +4770,12 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
} }
break; break;
case HA_READ_PREFIX_LAST_OR_PREV: /* Last or prev key with the same prefix */ case HA_READ_PREFIX_LAST_OR_PREV: /* Last or prev key with the same prefix */
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_POS_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_POS_INF);
error = cursor->c_getf_set_range_reverse(cursor, flags, error = cursor->c_getf_set_range_reverse(cursor, flags,
&lookup_key, SMART_DBT_CALLBACK, &info); &lookup_key, SMART_DBT_CALLBACK, &info);
break; break;
case HA_READ_PREFIX_LAST: case HA_READ_PREFIX_LAST:
pack_key(&lookup_key, active_index, key_buff3, key, key_len, COL_POS_INF); pack_key(&lookup_key, tokudb_active_index, key_buff3, key, key_len, COL_POS_INF);
ir_info.orig_key = &lookup_key; ir_info.orig_key = &lookup_key;
error = cursor->c_getf_set_range_reverse(cursor, flags, &lookup_key, SMART_DBT_IR_CALLBACK, &ir_info); error = cursor->c_getf_set_range_reverse(cursor, flags, &lookup_key, SMART_DBT_IR_CALLBACK, &ir_info);
if (ir_info.cmp) { if (ir_info.cmp) {
...@@ -4778,8 +4787,8 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -4778,8 +4787,8 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
error = HA_ERR_UNSUPPORTED; error = HA_ERR_UNSUPPORTED;
break; break;
} }
error = handle_cursor_error(error,HA_ERR_KEY_NOT_FOUND,active_index); error = handle_cursor_error(error,HA_ERR_KEY_NOT_FOUND,tokudb_active_index);
if (!error && !key_read && active_index != primary_key && !(table->key_info[active_index].flags & HA_CLUSTERING)) { if (!error && !key_read && tokudb_active_index != primary_key && !(table->key_info[tokudb_active_index].flags & HA_CLUSTERING)) {
error = read_full_row(buf); error = read_full_row(buf);
} }
...@@ -4813,8 +4822,8 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) { ...@@ -4813,8 +4822,8 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) {
// if this is a covering index, this is all we need // if this is a covering index, this is all we need
if (this->key_read) { if (this->key_read) {
assert(!need_val); assert(!need_val);
extract_hidden_primary_key(active_index, &curr_key); extract_hidden_primary_key(tokudb_active_index, &curr_key);
read_key_only(buf, active_index, &curr_key); read_key_only(buf, tokudb_active_index, &curr_key);
error = 0; error = 0;
} }
// we need to get more data // we need to get more data
...@@ -4827,11 +4836,11 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) { ...@@ -4827,11 +4836,11 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) {
if (!need_val) { if (!need_val) {
curr_val.data = curr_val_buff; curr_val.data = curr_val_buff;
curr_val.size = val_size; curr_val.size = val_size;
extract_hidden_primary_key(active_index, &curr_key); extract_hidden_primary_key(tokudb_active_index, &curr_key);
error = read_primary_key( buf, active_index, &curr_val, &curr_key); error = read_primary_key( buf, tokudb_active_index, &curr_val, &curr_key);
} }
else { else {
extract_hidden_primary_key(active_index, &curr_key); extract_hidden_primary_key(tokudb_active_index, &curr_key);
// need to extract a val and place it into buf // need to extract a val and place it into buf
if (unpack_entire_row) { if (unpack_entire_row) {
// get val info // get val info
...@@ -4841,11 +4850,11 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) { ...@@ -4841,11 +4850,11 @@ int ha_tokudb::read_data_from_range_query_buff(uchar* buf, bool need_val) {
curr_pos += val_size; curr_pos += val_size;
curr_val.data = curr_val_buff; curr_val.data = curr_val_buff;
curr_val.size = val_size; curr_val.size = val_size;
error = unpack_row(buf,&curr_val, &curr_key, active_index); error = unpack_row(buf,&curr_val, &curr_key, tokudb_active_index);
} }
else { else {
if (!(hidden_primary_key && active_index == primary_key)) { if (!(hidden_primary_key && tokudb_active_index == primary_key)) {
unpack_key(buf,&curr_key,active_index); unpack_key(buf,&curr_key,tokudb_active_index);
} }
// read rows we care about // read rows we care about
...@@ -4978,8 +4987,8 @@ int ha_tokudb::fill_range_query_buf( ...@@ -4978,8 +4987,8 @@ int ha_tokudb::fill_range_query_buf(
const uchar* var_field_offset_ptr = NULL; const uchar* var_field_offset_ptr = NULL;
const uchar* var_field_data_ptr = NULL; const uchar* var_field_data_ptr = NULL;
var_field_offset_ptr = fixed_field_ptr + share->kc_info.mcp_info[active_index].fixed_field_size; var_field_offset_ptr = fixed_field_ptr + share->kc_info.mcp_info[tokudb_active_index].fixed_field_size;
var_field_data_ptr = var_field_offset_ptr + share->kc_info.mcp_info[active_index].len_of_offsets; var_field_data_ptr = var_field_offset_ptr + share->kc_info.mcp_info[tokudb_active_index].len_of_offsets;
// first the null bytes // first the null bytes
memcpy(curr_pos, row->data, table_share->null_bytes); memcpy(curr_pos, row->data, table_share->null_bytes);
...@@ -4992,7 +5001,7 @@ int ha_tokudb::fill_range_query_buf( ...@@ -4992,7 +5001,7 @@ int ha_tokudb::fill_range_query_buf(
uint field_index = fixed_cols_for_query[i]; uint field_index = fixed_cols_for_query[i];
memcpy( memcpy(
curr_pos, curr_pos,
fixed_field_ptr + share->kc_info.cp_info[active_index][field_index].col_pack_val, fixed_field_ptr + share->kc_info.cp_info[tokudb_active_index][field_index].col_pack_val,
share->kc_info.field_lengths[field_index] share->kc_info.field_lengths[field_index]
); );
curr_pos += share->kc_info.field_lengths[field_index]; curr_pos += share->kc_info.field_lengths[field_index];
...@@ -5003,7 +5012,7 @@ int ha_tokudb::fill_range_query_buf( ...@@ -5003,7 +5012,7 @@ int ha_tokudb::fill_range_query_buf(
// //
for (uint32_t i = 0; i < num_var_cols_for_query; i++) { for (uint32_t i = 0; i < num_var_cols_for_query; i++) {
uint field_index = var_cols_for_query[i]; uint field_index = var_cols_for_query[i];
uint32_t var_field_index = share->kc_info.cp_info[active_index][field_index].col_pack_val; uint32_t var_field_index = share->kc_info.cp_info[tokudb_active_index][field_index].col_pack_val;
uint32_t data_start_offset; uint32_t data_start_offset;
uint32_t field_len; uint32_t field_len;
...@@ -5028,7 +5037,7 @@ int ha_tokudb::fill_range_query_buf( ...@@ -5028,7 +5037,7 @@ int ha_tokudb::fill_range_query_buf(
// //
get_blob_field_info( get_blob_field_info(
&blob_offset, &blob_offset,
share->kc_info.mcp_info[active_index].len_of_offsets, share->kc_info.mcp_info[tokudb_active_index].len_of_offsets,
var_field_data_ptr, var_field_data_ptr,
share->kc_info.num_offset_bytes share->kc_info.num_offset_bytes
); );
...@@ -5082,7 +5091,7 @@ int ha_tokudb::fill_range_query_buf( ...@@ -5082,7 +5091,7 @@ int ha_tokudb::fill_range_query_buf(
right_range.size = prelocked_right_range_size; right_range.size = prelocked_right_range_size;
right_range.data = prelocked_right_range; right_range.data = prelocked_right_range;
int cmp = tokudb_cmp_dbt_key( int cmp = tokudb_cmp_dbt_key(
share->key_file[active_index], share->key_file[tokudb_active_index],
key, key,
&right_range &right_range
); );
...@@ -5100,7 +5109,7 @@ int ha_tokudb::fill_range_query_buf( ...@@ -5100,7 +5109,7 @@ int ha_tokudb::fill_range_query_buf(
left_range.size = prelocked_left_range_size; left_range.size = prelocked_left_range_size;
left_range.data = prelocked_left_range; left_range.data = prelocked_left_range;
int cmp = tokudb_cmp_dbt_key( int cmp = tokudb_cmp_dbt_key(
share->key_file[active_index], share->key_file[tokudb_active_index],
key, key,
&left_range &left_range
); );
...@@ -5122,8 +5131,8 @@ int ha_tokudb::get_next(uchar* buf, int direction) { ...@@ -5122,8 +5131,8 @@ int ha_tokudb::get_next(uchar* buf, int direction) {
// we do NOT have a covering index AND we are using a clustering secondary // we do NOT have a covering index AND we are using a clustering secondary
// key // key
need_val = (this->key_read == 0) && need_val = (this->key_read == 0) &&
(active_index == primary_key || (tokudb_active_index == primary_key ||
table->key_info[active_index].flags & HA_CLUSTERING table->key_info[tokudb_active_index].flags & HA_CLUSTERING
); );
if ((bytes_used_in_range_query_buff - curr_range_query_buff_offset) > 0) { if ((bytes_used_in_range_query_buff - curr_range_query_buff_offset) > 0) {
...@@ -5151,7 +5160,7 @@ int ha_tokudb::get_next(uchar* buf, int direction) { ...@@ -5151,7 +5160,7 @@ int ha_tokudb::get_next(uchar* buf, int direction) {
bulk_fetch_iteration++; bulk_fetch_iteration++;
} }
error = handle_cursor_error(error, HA_ERR_END_OF_FILE,active_index); error = handle_cursor_error(error, HA_ERR_END_OF_FILE,tokudb_active_index);
if (error) { goto cleanup; } if (error) { goto cleanup; }
// //
...@@ -5163,14 +5172,14 @@ int ha_tokudb::get_next(uchar* buf, int direction) { ...@@ -5163,14 +5172,14 @@ int ha_tokudb::get_next(uchar* buf, int direction) {
struct smart_dbt_info info; struct smart_dbt_info info;
info.ha = this; info.ha = this;
info.buf = buf; info.buf = buf;
info.keynr = active_index; info.keynr = tokudb_active_index;
if (direction > 0) { if (direction > 0) {
error = cursor->c_getf_next(cursor, flags, SMART_DBT_CALLBACK, &info); error = cursor->c_getf_next(cursor, flags, SMART_DBT_CALLBACK, &info);
} else { } else {
error = cursor->c_getf_prev(cursor, flags, SMART_DBT_CALLBACK, &info); error = cursor->c_getf_prev(cursor, flags, SMART_DBT_CALLBACK, &info);
} }
error = handle_cursor_error(error, HA_ERR_END_OF_FILE, active_index); error = handle_cursor_error(error, HA_ERR_END_OF_FILE, tokudb_active_index);
} }
} }
...@@ -5183,7 +5192,7 @@ int ha_tokudb::get_next(uchar* buf, int direction) { ...@@ -5183,7 +5192,7 @@ int ha_tokudb::get_next(uchar* buf, int direction) {
// main table. // main table.
// //
if (!error && !key_read && (active_index != primary_key) && !(table->key_info[active_index].flags & HA_CLUSTERING) ) { if (!error && !key_read && (tokudb_active_index != primary_key) && !(table->key_info[tokudb_active_index].flags & HA_CLUSTERING) ) {
error = read_full_row(buf); error = read_full_row(buf);
} }
trx->stmt_progress.queried++; trx->stmt_progress.queried++;
...@@ -5254,17 +5263,17 @@ int ha_tokudb::index_first(uchar * buf) { ...@@ -5254,17 +5263,17 @@ int ha_tokudb::index_first(uchar * buf) {
info.ha = this; info.ha = this;
info.buf = buf; info.buf = buf;
info.keynr = active_index; info.keynr = tokudb_active_index;
error = cursor->c_getf_first(cursor, flags, error = cursor->c_getf_first(cursor, flags,
SMART_DBT_CALLBACK, &info); SMART_DBT_CALLBACK, &info);
error = handle_cursor_error(error,HA_ERR_END_OF_FILE,active_index); error = handle_cursor_error(error,HA_ERR_END_OF_FILE,tokudb_active_index);
// //
// still need to get entire contents of the row if operation done on // still need to get entire contents of the row if operation done on
// secondary DB and it was NOT a covering index // secondary DB and it was NOT a covering index
// //
if (!error && !key_read && (active_index != primary_key) && !(table->key_info[active_index].flags & HA_CLUSTERING) ) { if (!error && !key_read && (tokudb_active_index != primary_key) && !(table->key_info[tokudb_active_index].flags & HA_CLUSTERING) ) {
error = read_full_row(buf); error = read_full_row(buf);
} }
trx->stmt_progress.queried++; trx->stmt_progress.queried++;
...@@ -5297,16 +5306,16 @@ int ha_tokudb::index_last(uchar * buf) { ...@@ -5297,16 +5306,16 @@ int ha_tokudb::index_last(uchar * buf) {
info.ha = this; info.ha = this;
info.buf = buf; info.buf = buf;
info.keynr = active_index; info.keynr = tokudb_active_index;
error = cursor->c_getf_last(cursor, flags, error = cursor->c_getf_last(cursor, flags,
SMART_DBT_CALLBACK, &info); SMART_DBT_CALLBACK, &info);
error = handle_cursor_error(error,HA_ERR_END_OF_FILE,active_index); error = handle_cursor_error(error,HA_ERR_END_OF_FILE,tokudb_active_index);
// //
// still need to get entire contents of the row if operation done on // still need to get entire contents of the row if operation done on
// secondary DB and it was NOT a covering index // secondary DB and it was NOT a covering index
// //
if (!error && !key_read && (active_index != primary_key) && !(table->key_info[active_index].flags & HA_CLUSTERING) ) { if (!error && !key_read && (tokudb_active_index != primary_key) && !(table->key_info[tokudb_active_index].flags & HA_CLUSTERING) ) {
error = read_full_row(buf); error = read_full_row(buf);
} }
...@@ -5330,7 +5339,7 @@ int ha_tokudb::rnd_init(bool scan) { ...@@ -5330,7 +5339,7 @@ int ha_tokudb::rnd_init(bool scan) {
TOKUDB_DBUG_ENTER("ha_tokudb::rnd_init"); TOKUDB_DBUG_ENTER("ha_tokudb::rnd_init");
int error = 0; int error = 0;
range_lock_grabbed = false; range_lock_grabbed = false;
error = index_init(primary_key, 0); error = index_init(MAX_KEY, 0);
if (error) { goto cleanup;} if (error) { goto cleanup;}
if (scan) { if (scan) {
...@@ -5454,7 +5463,7 @@ int ha_tokudb::rnd_pos(uchar * buf, uchar * pos) { ...@@ -5454,7 +5463,7 @@ int ha_tokudb::rnd_pos(uchar * buf, uchar * pos) {
unpack_entire_row = true; unpack_entire_row = true;
statistic_increment(table->in_use->status_var.ha_read_rnd_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_rnd_count, &LOCK_status);
active_index = MAX_KEY; tokudb_active_index = MAX_KEY;
info.ha = this; info.ha = this;
info.buf = buf; info.buf = buf;
...@@ -5490,10 +5499,10 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k ...@@ -5490,10 +5499,10 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k
if (start_key) { if (start_key) {
switch (start_key->flag) { switch (start_key->flag) {
case HA_READ_AFTER_KEY: case HA_READ_AFTER_KEY:
pack_key(&start_dbt_key, active_index, start_key_buff, start_key->key, start_key->length, COL_POS_INF); pack_key(&start_dbt_key, tokudb_active_index, start_key_buff, start_key->key, start_key->length, COL_POS_INF);
break; break;
default: default:
pack_key(&start_dbt_key, active_index, start_key_buff, start_key->key, start_key->length, COL_NEG_INF); pack_key(&start_dbt_key, tokudb_active_index, start_key_buff, start_key->key, start_key->length, COL_NEG_INF);
break; break;
} }
prelocked_left_range_size = start_dbt_key.size; prelocked_left_range_size = start_dbt_key.size;
...@@ -5505,10 +5514,10 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k ...@@ -5505,10 +5514,10 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k
if (end_key) { if (end_key) {
switch (end_key->flag) { switch (end_key->flag) {
case HA_READ_BEFORE_KEY: case HA_READ_BEFORE_KEY:
pack_key(&end_dbt_key, active_index, end_key_buff, end_key->key, end_key->length, COL_NEG_INF); pack_key(&end_dbt_key, tokudb_active_index, end_key_buff, end_key->key, end_key->length, COL_NEG_INF);
break; break;
default: default:
pack_key(&end_dbt_key, active_index, end_key_buff, end_key->key, end_key->length, COL_POS_INF); pack_key(&end_dbt_key, tokudb_active_index, end_key_buff, end_key->key, end_key->length, COL_POS_INF);
break; break;
} }
prelocked_right_range_size = end_dbt_key.size; prelocked_right_range_size = end_dbt_key.size;
...@@ -5519,8 +5528,8 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k ...@@ -5519,8 +5528,8 @@ int ha_tokudb::prelock_range( const key_range *start_key, const key_range *end_k
error = cursor->c_pre_acquire_range_lock( error = cursor->c_pre_acquire_range_lock(
cursor, cursor,
start_key ? &start_dbt_key : share->key_file[active_index]->dbt_neg_infty(), start_key ? &start_dbt_key : share->key_file[tokudb_active_index]->dbt_neg_infty(),
end_key ? &end_dbt_key : share->key_file[active_index]->dbt_pos_infty() end_key ? &end_dbt_key : share->key_file[tokudb_active_index]->dbt_pos_infty()
); );
if (error){ if (error){
last_cursor_error = error; last_cursor_error = error;
......
...@@ -388,6 +388,9 @@ private: ...@@ -388,6 +388,9 @@ private:
bool is_add bool is_add
); );
// 0 <= active_index < table_share->keys || active_index == MAX_KEY
// tokudb_active_index = active_index if active_index < table_share->keys, else tokudb_active_index = primary_key = table_share->keys
uint tokudb_active_index;
public: public:
ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg); ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg);
......
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