Commit 5d7607f3 authored by Sergei Golubchik's avatar Sergei Golubchik

cleanup: style fixes, sql_join_cache.cc

parent 8246b0ac
......@@ -5609,7 +5609,7 @@ set join_cache_level = default;
set optimizer_switch=@tmp_optimizer_switch;
DROP TABLE t1,t2,t3;
#
# Bug #925985: LEFT JOIN with optimize_join_buffer_size=off +
# lp:925985 LEFT JOIN with optimize_join_buffer_size=off +
# join_buffer_size > join_buffer_space_limit
#
CREATE TABLE t1 (a int);
......
......@@ -3587,7 +3587,7 @@ set optimizer_switch=@tmp_optimizer_switch;
DROP TABLE t1,t2,t3;
--echo #
--echo # Bug #925985: LEFT JOIN with optimize_join_buffer_size=off +
--echo # lp:925985 LEFT JOIN with optimize_join_buffer_size=off +
--echo # join_buffer_size > join_buffer_space_limit
--echo #
......
......@@ -1376,7 +1376,8 @@ uint JOIN_CACHE::write_record_data(uchar * link, bool *is_full)
if (copy->referenced_field_no)
copy->offset= cp-curr_rec_pos;
if (copy->type == CACHE_BLOB)
switch (copy->type) {
case CACHE_BLOB:
{
Field_blob *blob_field= (Field_blob *) copy->field;
if (last_record)
......@@ -1397,10 +1398,8 @@ uint JOIN_CACHE::write_record_data(uchar * link, bool *is_full)
memcpy(cp+copy->length, copy->str, copy->blob_length);
cp+= copy->length+copy->blob_length;
}
break;
}
else
{
switch (copy->type) {
case CACHE_VARSTR1:
/* Copy the significant part of the short varstring field */
len= (uint) copy->str[0] + 1;
......@@ -1461,7 +1460,6 @@ uint JOIN_CACHE::write_record_data(uchar * link, bool *is_full)
cp+= copy->length;
}
}
}
/* Add the offsets of the fields that are referenced from other caches */
if (referenced_fields)
......@@ -1717,7 +1715,7 @@ uint JOIN_CACHE::aux_buffer_incr(ulong recno)
The function reads all flag and data fields of a record from the join
buffer into the corresponding record buffers.
The fields are read starting from the position 'pos' which is
supposed to point to the beginning og the first record field.
supposed to point to the beginning of the first record field.
The function increments the value of 'pos' by the length of the
read data.
......@@ -1811,7 +1809,8 @@ uint JOIN_CACHE::read_record_field(CACHE_FIELD *copy, bool blob_in_rec_buff)
/* Do not copy the field if its value is null */
if (copy->field && copy->field->maybe_null() && copy->field->is_null())
return 0;
if (copy->type == CACHE_BLOB)
switch (copy->type) {
case CACHE_BLOB:
{
Field_blob *blob_field= (Field_blob *) copy->field;
/*
......@@ -1820,19 +1819,17 @@ uint JOIN_CACHE::read_record_field(CACHE_FIELD *copy, bool blob_in_rec_buff)
*/
if (blob_in_rec_buff)
{
blob_field->set_image(pos, copy->length+sizeof(char*),
blob_field->set_image(pos, copy->length + sizeof(char*),
blob_field->charset());
len= copy->length+sizeof(char*);
len= copy->length + sizeof(char*);
}
else
{
blob_field->set_ptr(pos, pos+copy->length);
len= copy->length+blob_field->get_length();
len= copy->length + blob_field->get_length();
}
}
else
{
switch (copy->type) {
break;
case CACHE_VARSTR1:
/* Copy the significant part of the short varstring field */
len= (uint) pos[0] + 1;
......@@ -1862,7 +1859,6 @@ uint JOIN_CACHE::read_record_field(CACHE_FIELD *copy, bool blob_in_rec_buff)
len= copy->length;
memcpy(copy->str, pos, len);
}
}
pos+= len;
return len;
}
......@@ -2718,7 +2714,7 @@ int JOIN_CACHE_HASHED::init(bool for_explain)
data_fields_offset+= copy->length;
}
DBUG_RETURN(rc);
DBUG_RETURN(0);
}
......@@ -3927,9 +3923,9 @@ static
void bka_range_seq_key_info(void *init_params, uint *length,
key_part_map *map)
{
TABLE_REF *ref= &(((JOIN_CACHE*)init_params)->join_tab->ref);
*length= ref->key_length;
*map= (key_part_map(1) << ref->key_parts) - 1;
TABLE_REF *ref= &(((JOIN_CACHE*)init_params)->join_tab->ref);
*length= ref->key_length;
*map= (key_part_map(1) << ref->key_parts) - 1;
}
......@@ -3957,10 +3953,10 @@ RETURN VALUE
static
range_seq_t bka_range_seq_init(void *init_param, uint n_ranges, uint flags)
{
DBUG_ENTER("bka_range_seq_init");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) init_param;
cache->reset(0);
DBUG_RETURN((range_seq_t) init_param);
DBUG_ENTER("bka_range_seq_init");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) init_param;
cache->reset(0);
DBUG_RETURN((range_seq_t) init_param);
}
......@@ -3988,12 +3984,12 @@ RETURN VALUE
static
bool bka_range_seq_next(range_seq_t rseq, KEY_MULTI_RANGE *range)
{
DBUG_ENTER("bka_range_seq_next");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
TABLE_REF *ref= &cache->join_tab->ref;
key_range *start_key= &range->start_key;
if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
{
DBUG_ENTER("bka_range_seq_next");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
TABLE_REF *ref= &cache->join_tab->ref;
key_range *start_key= &range->start_key;
if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
{
start_key->keypart_map= (1 << ref->key_parts) - 1;
start_key->flag= HA_READ_KEY_EXACT;
range->end_key= *start_key;
......@@ -4001,8 +3997,8 @@ if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
range->ptr= (char *) cache->get_curr_rec();
range->range_flag= EQ_RANGE;
DBUG_RETURN(0);
}
DBUG_RETURN(1);
}
DBUG_RETURN(1);
}
......@@ -4034,11 +4030,11 @@ RETURN VALUE
static
bool bka_range_seq_skip_record(range_seq_t rseq, range_id_t range_info, uchar *rowid)
{
DBUG_ENTER("bka_range_seq_skip_record");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
bool res= cache->get_match_flag_by_pos((uchar *) range_info) ==
DBUG_ENTER("bka_range_seq_skip_record");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
bool res= cache->get_match_flag_by_pos((uchar *) range_info) ==
JOIN_CACHE::MATCH_FOUND;
DBUG_RETURN(res);
DBUG_RETURN(res);
}
......@@ -4065,14 +4061,14 @@ RETURN VALUE
static
bool bka_skip_index_tuple(range_seq_t rseq, range_id_t range_info)
{
DBUG_ENTER("bka_skip_index_tuple");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
THD *thd= cache->thd();
bool res;
status_var_increment(thd->status_var.ha_icp_attempts);
if (!(res= cache->skip_index_tuple(range_info)))
DBUG_ENTER("bka_skip_index_tuple");
JOIN_CACHE_BKA *cache= (JOIN_CACHE_BKA *) rseq;
THD *thd= cache->thd();
bool res;
status_var_increment(thd->status_var.ha_icp_attempts);
if (!(res= cache->skip_index_tuple(range_info)))
status_var_increment(thd->status_var.ha_icp_match);
DBUG_RETURN(res);
DBUG_RETURN(res);
}
......@@ -4101,10 +4097,10 @@ RETURN VALUE
bool JOIN_CACHE_BKA::prepare_look_for_matches(bool skip_last)
{
if (!records)
if (!records)
return TRUE;
rem_records= 1;
return FALSE;
rem_records= 1;
return FALSE;
}
......@@ -4133,10 +4129,10 @@ RETURN VALUE
uchar *JOIN_CACHE_BKA::get_next_candidate_for_match()
{
if (!rem_records)
if (!rem_records)
return 0;
rem_records--;
return curr_association;
rem_records--;
return curr_association;
}
......@@ -4161,7 +4157,7 @@ RETURN VALUE
bool JOIN_CACHE_BKA::skip_next_candidate_for_match(uchar *rec_ptr)
{
return join_tab->check_only_first_match() &&
return join_tab->check_only_first_match() &&
(get_match_flag_by_pos(rec_ptr) == MATCH_FOUND);
}
......@@ -4189,7 +4185,7 @@ RETURN VALUE
void JOIN_CACHE_BKA::read_next_candidate_for_match(uchar *rec_ptr)
{
get_record_by_pos(rec_ptr);
get_record_by_pos(rec_ptr);
}
......@@ -4216,30 +4212,29 @@ RETURN VALUE
int JOIN_CACHE_BKA::init(bool for_explain)
{
int res;
bool check_only_first_match= join_tab->check_only_first_match();
int res;
bool check_only_first_match= join_tab->check_only_first_match();
RANGE_SEQ_IF rs_funcs= { bka_range_seq_key_info,
RANGE_SEQ_IF rs_funcs= { bka_range_seq_key_info,
bka_range_seq_init,
bka_range_seq_next,
check_only_first_match ?
bka_range_seq_skip_record : 0,
check_only_first_match ? bka_range_seq_skip_record : 0,
bka_skip_index_tuple };
DBUG_ENTER("JOIN_CACHE_BKA::init");
DBUG_ENTER("JOIN_CACHE_BKA::init");
JOIN_TAB_SCAN_MRR *jsm;
if (!(join_tab_scan= jsm= new JOIN_TAB_SCAN_MRR(join, join_tab,
JOIN_TAB_SCAN_MRR *jsm;
if (!(join_tab_scan= jsm= new JOIN_TAB_SCAN_MRR(join, join_tab,
mrr_mode, rs_funcs)))
DBUG_RETURN(1);
if ((res= JOIN_CACHE::init(for_explain)))
if ((res= JOIN_CACHE::init(for_explain)))
DBUG_RETURN(res);
if (use_emb_key)
if (use_emb_key)
jsm->mrr_mode |= HA_MRR_MATERIALIZED_KEYS;
DBUG_RETURN(0);
DBUG_RETURN(0);
}
......@@ -4278,48 +4273,48 @@ RETURN VALUE
uint JOIN_CACHE_BKA::get_next_key(uchar ** key)
{
uint len;
uint32 rec_len;
uchar *init_pos;
JOIN_CACHE *cache;
uint len;
uint32 rec_len;
uchar *init_pos;
JOIN_CACHE *cache;
start:
/* Any record in a BKA cache is prepended with its length */
DBUG_ASSERT(with_length);
/* Any record in a BKA cache is prepended with its length */
DBUG_ASSERT(with_length);
if ((pos+size_of_rec_len) > last_rec_pos || !records)
if ((pos+size_of_rec_len) > last_rec_pos || !records)
return 0;
/* Read the length of the record */
rec_len= get_rec_length(pos);
pos+= size_of_rec_len;
init_pos= pos;
/* Read the length of the record */
rec_len= get_rec_length(pos);
pos+= size_of_rec_len;
init_pos= pos;
/* Read a reference to the previous cache if any */
if (prev_cache)
/* Read a reference to the previous cache if any */
if (prev_cache)
pos+= prev_cache->get_size_of_rec_offset();
curr_rec_pos= pos;
curr_rec_pos= pos;
/* Read all flag fields of the record */
read_flag_fields();
/* Read all flag fields of the record */
read_flag_fields();
if (with_match_flag &&
if (with_match_flag &&
(Match_flag) curr_rec_pos[0] == MATCH_IMPOSSIBLE )
{
{
pos= init_pos+rec_len;
goto start;
}
}
if (use_emb_key)
{
if (use_emb_key)
{
/* An embedded key is taken directly from the join buffer */
*key= pos;
len= emb_key_length;
}
else
{
}
else
{
/* Read key arguments from previous caches if there are any such fields */
if (external_key_arg_fields)
{
......@@ -4361,11 +4356,11 @@ else
cp_buffer_from_ref(join->thd, join_tab->table, ref);
*key= ref->key_buff;
len= ref->key_length;
}
}
pos= init_pos+rec_len;
pos= init_pos+rec_len;
return len;
return len;
}
......@@ -4407,9 +4402,9 @@ RETURN VALUE
bool JOIN_CACHE_BKA::skip_index_tuple(range_id_t range_info)
{
DBUG_ENTER("JOIN_CACHE_BKA::skip_index_tuple");
get_record_by_pos((uchar*)range_info);
DBUG_RETURN(!join_tab->cache_idx_cond->val_int());
DBUG_ENTER("JOIN_CACHE_BKA::skip_index_tuple");
get_record_by_pos((uchar*)range_info);
DBUG_RETURN(!join_tab->cache_idx_cond->val_int());
}
......@@ -4439,10 +4434,10 @@ RETURN VALUE
static
range_seq_t bkah_range_seq_init(void *init_param, uint n_ranges, uint flags)
{
DBUG_ENTER("bkah_range_seq_init");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) init_param;
cache->reset(0);
DBUG_RETURN((range_seq_t) init_param);
DBUG_ENTER("bkah_range_seq_init");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) init_param;
cache->reset(0);
DBUG_RETURN((range_seq_t) init_param);
}
......@@ -4470,12 +4465,12 @@ RETURN VALUE
static
bool bkah_range_seq_next(range_seq_t rseq, KEY_MULTI_RANGE *range)
{
DBUG_ENTER("bkah_range_seq_next");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
TABLE_REF *ref= &cache->join_tab->ref;
key_range *start_key= &range->start_key;
if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
{
DBUG_ENTER("bkah_range_seq_next");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
TABLE_REF *ref= &cache->join_tab->ref;
key_range *start_key= &range->start_key;
if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
{
start_key->keypart_map= (1 << ref->key_parts) - 1;
start_key->flag= HA_READ_KEY_EXACT;
range->end_key= *start_key;
......@@ -4483,8 +4478,8 @@ if ((start_key->length= cache->get_next_key((uchar **) &start_key->key)))
range->ptr= (char *) cache->get_curr_key_chain();
range->range_flag= EQ_RANGE;
DBUG_RETURN(0);
}
DBUG_RETURN(1);
}
DBUG_RETURN(1);
}
......@@ -4513,13 +4508,12 @@ RETURN VALUE
*/
static
bool bkah_range_seq_skip_record(range_seq_t rseq, range_id_t range_info,
uchar *rowid)
bool bkah_range_seq_skip_record(range_seq_t rseq, range_id_t range_info, uchar *rowid)
{
DBUG_ENTER("bkah_range_seq_skip_record");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
bool res= cache->check_all_match_flags_for_key((uchar *) range_info);
DBUG_RETURN(res);
DBUG_ENTER("bkah_range_seq_skip_record");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
bool res= cache->check_all_match_flags_for_key((uchar *) range_info);
DBUG_RETURN(res);
}
......@@ -4546,14 +4540,14 @@ RETURN VALUE
static
bool bkah_skip_index_tuple(range_seq_t rseq, range_id_t range_info)
{
DBUG_ENTER("bka_unique_skip_index_tuple");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
THD *thd= cache->thd();
bool res;
status_var_increment(thd->status_var.ha_icp_attempts);
if (!(res= cache->skip_index_tuple(range_info)))
DBUG_ENTER("bka_unique_skip_index_tuple");
JOIN_CACHE_BKAH *cache= (JOIN_CACHE_BKAH *) rseq;
THD *thd= cache->thd();
bool res;
status_var_increment(thd->status_var.ha_icp_attempts);
if (!(res= cache->skip_index_tuple(range_info)))
status_var_increment(thd->status_var.ha_icp_match);
DBUG_RETURN(res);
DBUG_RETURN(res);
}
......@@ -4581,8 +4575,8 @@ RETURN VALUE
bool JOIN_CACHE_BKAH::prepare_look_for_matches(bool skip_last)
{
last_matching_rec_ref_ptr= next_matching_rec_ref_ptr= 0;
if (no_association &&
last_matching_rec_ref_ptr= next_matching_rec_ref_ptr= 0;
if (no_association &&
!(curr_matching_chain= get_matching_chain_by_join_key())) //psergey: added '!'
return 1;
last_matching_rec_ref_ptr= get_next_rec_ref(curr_matching_chain);
......
......@@ -10752,6 +10752,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
uint bufsz= 4096;
JOIN_CACHE *prev_cache=0;
JOIN *join= tab->join;
MEM_ROOT *root= join->thd->mem_root;
uint cache_level= tab->used_join_cache_level;
bool force_unlinked_cache=
!(join->allowed_join_cache_types & JOIN_CACHE_INCREMENTAL_BIT);
......@@ -10871,7 +10872,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
case JT_ALL:
if (cache_level == 1)
prev_cache= 0;
if ((tab->cache= new JOIN_CACHE_BNL(join, tab, prev_cache)) &&
if ((tab->cache= new (root) JOIN_CACHE_BNL(join, tab, prev_cache)) &&
!tab->cache->init(options & SELECT_DESCRIBE))
{
tab->icp_other_tables_ok= FALSE;
......@@ -10906,7 +10907,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
goto no_join_cache;
if (cache_level == 3)
prev_cache= 0;
if ((tab->cache= new JOIN_CACHE_BNLH(join, tab, prev_cache)) &&
if ((tab->cache= new (root) JOIN_CACHE_BNLH(join, tab, prev_cache)) &&
!tab->cache->init(options & SELECT_DESCRIBE))
{
tab->icp_other_tables_ok= FALSE;
......@@ -10927,7 +10928,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
{
if (cache_level == 5)
prev_cache= 0;
if ((tab->cache= new JOIN_CACHE_BKA(join, tab, flags, prev_cache)) &&
if ((tab->cache= new (root) JOIN_CACHE_BKA(join, tab, flags, prev_cache)) &&
!tab->cache->init(options & SELECT_DESCRIBE))
return (6 - MY_TEST(!prev_cache));
goto no_join_cache;
......@@ -10936,7 +10937,7 @@ uint check_join_cache_usage(JOIN_TAB *tab,
{
if (cache_level == 7)
prev_cache= 0;
if ((tab->cache= new JOIN_CACHE_BKAH(join, tab, flags, prev_cache)) &&
if ((tab->cache= new (root) JOIN_CACHE_BKAH(join, tab, flags, prev_cache)) &&
!tab->cache->init(options & SELECT_DESCRIBE))
{
tab->idx_cond_fact_out= FALSE;
......
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