mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-16592 Change Item::with_sum_func from a member to a virtual method
This commit is contained in:
@ -1046,7 +1046,7 @@ JOIN::prepare(TABLE_LIST *tables_init,
|
||||
|
||||
while ((select_el= select_it++))
|
||||
{
|
||||
if (select_el->with_sum_func)
|
||||
if (select_el->with_sum_func())
|
||||
found_sum_func_elem= true;
|
||||
if (select_el->with_field)
|
||||
found_field_elem= true;
|
||||
@ -1214,14 +1214,14 @@ JOIN::prepare(TABLE_LIST *tables_init,
|
||||
item->max_length)))
|
||||
real_order= TRUE;
|
||||
|
||||
if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM)
|
||||
if (item->with_sum_func() && item->type() != Item::SUM_FUNC_ITEM)
|
||||
item->split_sum_func(thd, ref_ptrs, all_fields, 0);
|
||||
}
|
||||
if (!real_order)
|
||||
order= NULL;
|
||||
}
|
||||
|
||||
if (having && having->with_sum_func)
|
||||
if (having && having->with_sum_func())
|
||||
having->split_sum_func2(thd, ref_ptrs, all_fields,
|
||||
&having, SPLIT_SUM_SKIP_REGISTERED);
|
||||
if (select_lex->inner_sum_func_list)
|
||||
@ -2439,7 +2439,7 @@ int JOIN::optimize_stage2()
|
||||
elements may be lost during further having
|
||||
condition transformation in JOIN::exec.
|
||||
*/
|
||||
if (having && const_table_map && !having->with_sum_func)
|
||||
if (having && const_table_map && !having->with_sum_func())
|
||||
{
|
||||
having->update_used_tables();
|
||||
having= having->remove_eq_conds(thd, &select_lex->having_value, true);
|
||||
@ -12967,7 +12967,7 @@ static void update_depend_map_for_order(JOIN *join, ORDER *order)
|
||||
order->used= 0;
|
||||
// Not item_sum(), RAND() and no reference to table outside of sub select
|
||||
if (!(order->depend_map & (OUTER_REF_TABLE_BIT | RAND_TABLE_BIT))
|
||||
&& !order->item[0]->with_sum_func &&
|
||||
&& !order->item[0]->with_sum_func() &&
|
||||
join->join_tab)
|
||||
{
|
||||
for (JOIN_TAB **tab=join->map2table;
|
||||
@ -13058,7 +13058,7 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond,
|
||||
for (order=first_order; order ; order=order->next)
|
||||
{
|
||||
table_map order_tables=order->item[0]->used_tables();
|
||||
if (order->item[0]->with_sum_func ||
|
||||
if (order->item[0]->with_sum_func() ||
|
||||
/*
|
||||
If the outer table of an outer join is const (either by itself or
|
||||
after applying WHERE condition), grouping on a field from such a
|
||||
@ -13234,7 +13234,7 @@ ORDER *simple_remove_const(ORDER *order, COND *where)
|
||||
ORDER *first= NULL, *prev= NULL;
|
||||
for (; order; order= order->next)
|
||||
{
|
||||
DBUG_ASSERT(!order->item[0]->with_sum_func); // should never happen
|
||||
DBUG_ASSERT(!order->item[0]->with_sum_func()); // should never happen
|
||||
if (!const_expression_in_where(where, order->item[0]))
|
||||
{
|
||||
if (!first)
|
||||
@ -17169,7 +17169,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
}
|
||||
if (not_all_columns)
|
||||
{
|
||||
if (item->with_sum_func && type != Item::SUM_FUNC_ITEM)
|
||||
if (item->with_sum_func() && type != Item::SUM_FUNC_ITEM)
|
||||
{
|
||||
if (item->used_tables() & OUTER_REF_TABLE_BIT)
|
||||
item->update_used_tables();
|
||||
@ -23058,7 +23058,7 @@ setup_group(THD *thd, Ref_ptr_array ref_pointer_array, TABLE_LIST *tables,
|
||||
all_fields, true, true, from_window_spec))
|
||||
return 1;
|
||||
(*ord->item)->marker= UNDEF_POS; /* Mark found */
|
||||
if ((*ord->item)->with_sum_func && context_analysis_place == IN_GROUP_BY)
|
||||
if ((*ord->item)->with_sum_func() && context_analysis_place == IN_GROUP_BY)
|
||||
{
|
||||
my_error(ER_WRONG_GROUP_FIELD, MYF(0), (*ord->item)->full_name());
|
||||
return 1;
|
||||
@ -23216,7 +23216,7 @@ create_distinct_group(THD *thd, Ref_ptr_array ref_pointer_array,
|
||||
li.rewind();
|
||||
while ((item=li++))
|
||||
{
|
||||
if (!item->const_item() && !item->with_sum_func && !item->marker)
|
||||
if (!item->const_item() && !item->with_sum_func() && !item->marker)
|
||||
{
|
||||
/*
|
||||
Don't put duplicate columns from the SELECT list into the
|
||||
@ -23313,9 +23313,11 @@ count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
|
||||
}
|
||||
else
|
||||
{
|
||||
With_sum_func_cache *cache= field->get_with_sum_func_cache();
|
||||
param->func_count++;
|
||||
if (reset_with_sum_func)
|
||||
field->with_sum_func=0;
|
||||
// "field" can point to Item_std_field, so "cache" can be NULL here.
|
||||
if (reset_with_sum_func && cache)
|
||||
cache->reset_with_sum_func();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -23719,7 +23721,7 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
||||
real_pos->real_type() == Item::SUBSELECT_ITEM ||
|
||||
real_pos->type() == Item::CACHE_ITEM ||
|
||||
real_pos->type() == Item::COND_ITEM) &&
|
||||
!real_pos->with_sum_func)
|
||||
!real_pos->with_sum_func())
|
||||
{ // Save for send fields
|
||||
pos= real_pos;
|
||||
/* TODO:
|
||||
@ -23926,7 +23928,7 @@ change_to_use_tmp_fields(THD *thd, Ref_ptr_array ref_pointer_array,
|
||||
for (uint i= 0; (item= it++); i++)
|
||||
{
|
||||
Field *field;
|
||||
if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM)
|
||||
if (item->with_sum_func() && item->type() != Item::SUM_FUNC_ITEM)
|
||||
item_field= item;
|
||||
else if (item->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
@ -24453,7 +24455,7 @@ bool JOIN::rollup_init()
|
||||
Marking the expression item as 'with_sum_func' will ensure this.
|
||||
*/
|
||||
if (changed)
|
||||
item->with_sum_func= 1;
|
||||
item->get_with_sum_func_cache()->set_with_sum_func();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user