mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3
TODO: enable MDEV-13049 optimization for 10.3
This commit is contained in:
@ -809,7 +809,7 @@ JOIN::prepare(TABLE_LIST *tables_init,
|
||||
thd->lex->current_select->context_analysis_place;
|
||||
thd->lex->current_select->context_analysis_place= SELECT_LIST;
|
||||
if (setup_fields(thd, ref_ptrs, fields_list, MARK_COLUMNS_READ,
|
||||
&all_fields, 1))
|
||||
&all_fields, &select_lex->pre_fix, 1))
|
||||
DBUG_RETURN(-1);
|
||||
thd->lex->current_select->context_analysis_place= save_place;
|
||||
|
||||
@ -6144,7 +6144,7 @@ double matching_candidates_in_table(JOIN_TAB *s, bool with_found_constraint,
|
||||
{
|
||||
TABLE *table= s->table;
|
||||
double sel= table->cond_selectivity;
|
||||
double table_records= table->stat_records();
|
||||
double table_records= (double)table->stat_records();
|
||||
dbl_records= table_records * sel;
|
||||
return dbl_records;
|
||||
}
|
||||
@ -6170,7 +6170,7 @@ double matching_candidates_in_table(JOIN_TAB *s, bool with_found_constraint,
|
||||
if (s->table->quick_condition_rows != s->found_records)
|
||||
records= s->table->quick_condition_rows;
|
||||
|
||||
dbl_records= records;
|
||||
dbl_records= (double)records;
|
||||
return dbl_records;
|
||||
}
|
||||
|
||||
@ -6861,7 +6861,7 @@ static void choose_initial_table_order(JOIN *join)
|
||||
if ((emb_subq= get_emb_subq(*tab)))
|
||||
break;
|
||||
}
|
||||
uint n_subquery_tabs= tabs_end - tab;
|
||||
uint n_subquery_tabs= (uint)(tabs_end - tab);
|
||||
|
||||
if (!n_subquery_tabs)
|
||||
DBUG_VOID_RETURN;
|
||||
@ -6889,7 +6889,7 @@ static void choose_initial_table_order(JOIN *join)
|
||||
last_tab_for_subq < subq_tabs_end &&
|
||||
get_emb_subq(*last_tab_for_subq) == cur_subq_nest;
|
||||
last_tab_for_subq++) {}
|
||||
uint n_subquery_tables= last_tab_for_subq - subq_tab;
|
||||
uint n_subquery_tables= (uint)(last_tab_for_subq - subq_tab);
|
||||
|
||||
/*
|
||||
Walk the original array and find where this subquery would have been
|
||||
@ -6907,7 +6907,7 @@ static void choose_initial_table_order(JOIN *join)
|
||||
if (!need_tables)
|
||||
{
|
||||
/* Move away the top-level tables that are after top_level_tab */
|
||||
uint top_tail_len= last_top_level_tab - top_level_tab - 1;
|
||||
size_t top_tail_len= last_top_level_tab - top_level_tab - 1;
|
||||
memmove(top_level_tab + 1 + n_subquery_tables, top_level_tab + 1,
|
||||
sizeof(JOIN_TAB*)*top_tail_len);
|
||||
last_top_level_tab += n_subquery_tables;
|
||||
@ -7653,7 +7653,7 @@ double JOIN::get_examined_rows()
|
||||
JOIN_TAB *tab= first_breadth_first_tab();
|
||||
JOIN_TAB *prev_tab= tab;
|
||||
|
||||
examined_rows= tab->get_examined_rows();
|
||||
examined_rows= (double)tab->get_examined_rows();
|
||||
|
||||
while ((tab= next_breadth_first_tab(first_breadth_first_tab(),
|
||||
top_join_tab_count, tab)))
|
||||
@ -7951,7 +7951,7 @@ double table_cond_selectivity(JOIN *join, uint idx, JOIN_TAB *s,
|
||||
}
|
||||
if (keyparts > 1)
|
||||
{
|
||||
ref_keyuse_steps[keyparts-2]= keyuse - prev_ref_keyuse;
|
||||
ref_keyuse_steps[keyparts-2]= (uint16)(keyuse - prev_ref_keyuse);
|
||||
prev_ref_keyuse= keyuse;
|
||||
}
|
||||
}
|
||||
@ -8192,9 +8192,11 @@ best_extension_by_limited_search(JOIN *join,
|
||||
best_access_path(join, s, remaining_tables, idx, disable_jbuf,
|
||||
record_count, join->positions + idx, &loose_scan_pos);
|
||||
|
||||
/* Compute the cost of extending the plan with 's' */
|
||||
|
||||
current_record_count= record_count * position->records_read;
|
||||
/* Compute the cost of extending the plan with 's', avoid overflow */
|
||||
if (position->records_read < DBL_MAX / record_count)
|
||||
current_record_count= record_count * position->records_read;
|
||||
else
|
||||
current_record_count= DBL_MAX;
|
||||
current_read_time=read_time + position->read_time +
|
||||
current_record_count / (double) TIME_FOR_COMPARE;
|
||||
|
||||
@ -9313,8 +9315,8 @@ bool JOIN::get_best_combination()
|
||||
j= j->bush_root_tab;
|
||||
}
|
||||
|
||||
top_join_tab_count= join_tab_ranges.head()->end -
|
||||
join_tab_ranges.head()->start;
|
||||
top_join_tab_count= (uint)(join_tab_ranges.head()->end -
|
||||
join_tab_ranges.head()->start);
|
||||
|
||||
update_depend_map(this);
|
||||
DBUG_RETURN(0);
|
||||
@ -10891,7 +10893,7 @@ static uint make_join_orderinfo(JOIN *join)
|
||||
if (join->need_tmp)
|
||||
return join->table_count;
|
||||
tab= join->get_sort_by_join_tab();
|
||||
return tab ? tab-join->join_tab : join->table_count;
|
||||
return tab ? (uint)(tab-join->join_tab) : join->table_count;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -11908,8 +11910,8 @@ make_join_readinfo(JOIN *join, ulonglong options, uint no_jbuf_after)
|
||||
str.append(" final_pushdown_cond");
|
||||
print_where(tab->select_cond, str.c_ptr_safe(), QT_ORDINARY););
|
||||
}
|
||||
uint n_top_tables= join->join_tab_ranges.head()->end -
|
||||
join->join_tab_ranges.head()->start;
|
||||
uint n_top_tables= (uint)(join->join_tab_ranges.head()->end -
|
||||
join->join_tab_ranges.head()->start);
|
||||
|
||||
join->join_tab[n_top_tables - 1].next_select=0; /* Set by do_select */
|
||||
|
||||
@ -12133,7 +12135,7 @@ ha_rows JOIN_TAB::get_examined_rows()
|
||||
SQL_SELECT *sel= filesort? filesort->select : this->select;
|
||||
|
||||
if (sel && sel->quick && use_quick != 2)
|
||||
examined_rows= sel->quick->records;
|
||||
examined_rows= (double)sel->quick->records;
|
||||
else if (type == JT_NEXT || type == JT_ALL ||
|
||||
type == JT_HASH || type ==JT_HASH_NEXT)
|
||||
{
|
||||
@ -12143,19 +12145,19 @@ ha_rows JOIN_TAB::get_examined_rows()
|
||||
@todo This estimate is wrong, a LIMIT query may examine much more rows
|
||||
than the LIMIT itself.
|
||||
*/
|
||||
examined_rows= limit;
|
||||
examined_rows= (double)limit;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (table->is_filled_at_execution())
|
||||
examined_rows= records;
|
||||
examined_rows= (double)records;
|
||||
else
|
||||
{
|
||||
/*
|
||||
handler->info(HA_STATUS_VARIABLE) has been called in
|
||||
make_join_statistics()
|
||||
*/
|
||||
examined_rows= table->stat_records();
|
||||
examined_rows= (double)table->stat_records();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -13984,7 +13986,7 @@ static int compare_fields_by_table_order(Item *field1,
|
||||
tab2= tab2->bush_root_tab;
|
||||
}
|
||||
|
||||
cmp= tab1 - tab2;
|
||||
cmp= (int)(tab1 - tab2);
|
||||
|
||||
if (!cmp)
|
||||
{
|
||||
@ -15008,10 +15010,23 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
|
||||
nested_join= table->nested_join;
|
||||
if (table->sj_on_expr && !in_sj)
|
||||
{
|
||||
/*
|
||||
If this is a semi-join that is not contained within another semi-join,
|
||||
leave it intact (otherwise it is flattened)
|
||||
*/
|
||||
/*
|
||||
If this is a semi-join that is not contained within another semi-join
|
||||
leave it intact (otherwise it is flattened)
|
||||
*/
|
||||
/*
|
||||
Make sure that any semi-join appear in
|
||||
the join->select_lex->sj_nests list only once
|
||||
*/
|
||||
List_iterator_fast<TABLE_LIST> sj_it(join->select_lex->sj_nests);
|
||||
TABLE_LIST *sj_nest;
|
||||
while ((sj_nest= sj_it++))
|
||||
{
|
||||
if (table == sj_nest)
|
||||
break;
|
||||
}
|
||||
if (sj_nest)
|
||||
continue;
|
||||
join->select_lex->sj_nests.push_back(table, join->thd->mem_root);
|
||||
|
||||
/*
|
||||
@ -17146,7 +17161,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
share->default_values= table->record[1]+alloc_length;
|
||||
}
|
||||
copy_func[0]=0; // End marker
|
||||
param->func_count= copy_func - param->items_to_copy;
|
||||
param->func_count= (uint)(copy_func - param->items_to_copy);
|
||||
|
||||
setup_tmp_table_column_bitmaps(table, bitmaps);
|
||||
|
||||
@ -17830,7 +17845,7 @@ bool create_internal_tmp_table(TABLE *table, KEY *keyinfo,
|
||||
Emulate behaviour by making column not-nullable when creating the
|
||||
table.
|
||||
*/
|
||||
uint cols= (*recinfo-start_recinfo);
|
||||
uint cols= (uint)(*recinfo-start_recinfo);
|
||||
start_recinfo[cols-1].null_bit= 0;
|
||||
}
|
||||
}
|
||||
@ -21055,7 +21070,7 @@ static int test_if_order_by_key(JOIN *join,
|
||||
(1) this is an extended key
|
||||
(2) we've reached its end
|
||||
*/
|
||||
key_parts= (key_part - table->key_info[idx].key_part);
|
||||
key_parts= (uint)(key_part - table->key_info[idx].key_part);
|
||||
if (have_pk_suffix &&
|
||||
reverse == 0 && // all were =const so far
|
||||
key_parts == table->key_info[idx].ext_key_parts &&
|
||||
@ -24696,7 +24711,7 @@ void JOIN_TAB::save_explain_data(Explain_table_access *eta,
|
||||
}
|
||||
else
|
||||
{
|
||||
double examined_rows= get_examined_rows();
|
||||
double examined_rows= (double)get_examined_rows();
|
||||
|
||||
eta->rows_set= true;
|
||||
eta->rows= (ha_rows) examined_rows;
|
||||
@ -26081,8 +26096,8 @@ static bool get_range_limit_read_cost(const JOIN_TAB *tab,
|
||||
Start from quick select's rows and cost. These are always cheaper than
|
||||
full index scan/cost.
|
||||
*/
|
||||
double best_rows= table->quick_rows[keynr];
|
||||
double best_cost= table->quick_costs[keynr];
|
||||
double best_rows= (double)table->quick_rows[keynr];
|
||||
double best_cost= (double)table->quick_costs[keynr];
|
||||
|
||||
/*
|
||||
Check if ref(const) access was possible on this index.
|
||||
@ -26116,7 +26131,7 @@ static bool get_range_limit_read_cost(const JOIN_TAB *tab,
|
||||
|
||||
if (ref_rows > 0)
|
||||
{
|
||||
double tmp= ref_rows;
|
||||
double tmp= (double)ref_rows;
|
||||
/* Reuse the cost formula from best_access_path: */
|
||||
set_if_smaller(tmp, (double) tab->join->thd->variables.max_seeks_for_key);
|
||||
if (table->covering_keys.is_set(keynr))
|
||||
@ -26127,7 +26142,7 @@ static bool get_range_limit_read_cost(const JOIN_TAB *tab,
|
||||
if (tmp < best_cost)
|
||||
{
|
||||
best_cost= tmp;
|
||||
best_rows= ref_rows;
|
||||
best_rows= (double)ref_rows;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -26240,7 +26255,7 @@ test_if_cheaper_ordering(const JOIN_TAB *tab, ORDER *order, TABLE *table,
|
||||
|
||||
if (join)
|
||||
{
|
||||
uint tablenr= tab - join->join_tab;
|
||||
uint tablenr= (uint)(tab - join->join_tab);
|
||||
read_time= join->best_positions[tablenr].read_time;
|
||||
for (uint i= tablenr+1; i < join->table_count; i++)
|
||||
fanout*= join->best_positions[i].records_read; // fanout is always >= 1
|
||||
|
Reference in New Issue
Block a user