mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Post review changes for the fix of bug #16504.
This commit is contained in:
@ -3740,7 +3740,7 @@ void Item_equal::sort(Item_field_cmpfunc cmp, void *arg)
|
|||||||
Check appearance of new constant items in the multiple equality object
|
Check appearance of new constant items in the multiple equality object
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
check()
|
update_const()
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
The function checks appearance of new constant items among
|
The function checks appearance of new constant items among
|
||||||
@ -3753,7 +3753,7 @@ void Item_equal::sort(Item_field_cmpfunc cmp, void *arg)
|
|||||||
none
|
none
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Item_equal::check_const()
|
void Item_equal::update_const()
|
||||||
{
|
{
|
||||||
List_iterator<Item_field> it(fields);
|
List_iterator<Item_field> it(fields);
|
||||||
Item *item;
|
Item *item;
|
||||||
|
@ -1196,7 +1196,7 @@ public:
|
|||||||
bool contains(Field *field);
|
bool contains(Field *field);
|
||||||
Item_field* get_first() { return fields.head(); }
|
Item_field* get_first() { return fields.head(); }
|
||||||
void merge(Item_equal *item);
|
void merge(Item_equal *item);
|
||||||
void check_const();
|
void update_const();
|
||||||
enum Functype functype() const { return MULT_EQUAL_FUNC; }
|
enum Functype functype() const { return MULT_EQUAL_FUNC; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "multiple equal"; }
|
const char *func_name() const { return "multiple equal"; }
|
||||||
|
@ -136,7 +136,7 @@ static enum_nested_loop_state
|
|||||||
end_write_group(JOIN *join, JOIN_TAB *join_tab, bool end_of_records);
|
end_write_group(JOIN *join, JOIN_TAB *join_tab, bool end_of_records);
|
||||||
|
|
||||||
static int test_if_group_changed(List<Cached_item> &list);
|
static int test_if_group_changed(List<Cached_item> &list);
|
||||||
static int join_read_const_table(JOIN *join, JOIN_TAB *tab, POSITION *pos);
|
static int join_read_const_table(JOIN_TAB *tab, POSITION *pos);
|
||||||
static int join_read_system(JOIN_TAB *tab);
|
static int join_read_system(JOIN_TAB *tab);
|
||||||
static int join_read_const(JOIN_TAB *tab);
|
static int join_read_const(JOIN_TAB *tab);
|
||||||
static int join_read_key(JOIN_TAB *tab);
|
static int join_read_key(JOIN_TAB *tab);
|
||||||
@ -2111,7 +2111,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
|
|||||||
s= p_pos->table;
|
s= p_pos->table;
|
||||||
s->type=JT_SYSTEM;
|
s->type=JT_SYSTEM;
|
||||||
join->const_table_map|=s->table->map;
|
join->const_table_map|=s->table->map;
|
||||||
if ((tmp=join_read_const_table(join, s, p_pos)))
|
if ((tmp=join_read_const_table(s, p_pos)))
|
||||||
{
|
{
|
||||||
if (tmp > 0)
|
if (tmp > 0)
|
||||||
DBUG_RETURN(1); // Fatal error
|
DBUG_RETURN(1); // Fatal error
|
||||||
@ -2148,8 +2148,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
|
|||||||
s->type=JT_SYSTEM;
|
s->type=JT_SYSTEM;
|
||||||
join->const_table_map|=table->map;
|
join->const_table_map|=table->map;
|
||||||
set_position(join,const_count++,s,(KEYUSE*) 0);
|
set_position(join,const_count++,s,(KEYUSE*) 0);
|
||||||
if ((tmp= join_read_const_table(join, s,
|
if ((tmp= join_read_const_table(s, join->positions+const_count-1)))
|
||||||
join->positions+const_count-1)))
|
|
||||||
{
|
{
|
||||||
if (tmp > 0)
|
if (tmp > 0)
|
||||||
DBUG_RETURN(1); // Fatal error
|
DBUG_RETURN(1); // Fatal error
|
||||||
@ -2201,8 +2200,8 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
|
|||||||
if (create_ref_for_key(join, s, start_keyuse,
|
if (create_ref_for_key(join, s, start_keyuse,
|
||||||
found_const_table_map))
|
found_const_table_map))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
if ((tmp=join_read_const_table(join, s,
|
if ((tmp=join_read_const_table(s,
|
||||||
join->positions+const_count-1)))
|
join->positions+const_count-1)))
|
||||||
{
|
{
|
||||||
if (tmp > 0)
|
if (tmp > 0)
|
||||||
DBUG_RETURN(1); // Fatal error
|
DBUG_RETURN(1); // Fatal error
|
||||||
@ -7183,7 +7182,7 @@ static COND* substitute_for_best_equal_field(COND *cond,
|
|||||||
of a condition after reading a constant table
|
of a condition after reading a constant table
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
check_const_equal_item()
|
update_const_equal_items()
|
||||||
cond condition whose multiple equalities are to be checked
|
cond condition whose multiple equalities are to be checked
|
||||||
table constant table that has been read
|
table constant table that has been read
|
||||||
|
|
||||||
@ -7194,8 +7193,7 @@ static COND* substitute_for_best_equal_field(COND *cond,
|
|||||||
the multiple equality appropriately.
|
the multiple equality appropriately.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void check_const_equal_items(COND *cond,
|
static void update_const_equal_items(COND *cond, JOIN_TAB *tab)
|
||||||
JOIN_TAB *tab)
|
|
||||||
{
|
{
|
||||||
if (!(cond->used_tables() & tab->table->map))
|
if (!(cond->used_tables() & tab->table->map))
|
||||||
return;
|
return;
|
||||||
@ -7206,13 +7204,13 @@ static void check_const_equal_items(COND *cond,
|
|||||||
List_iterator_fast<Item> li(*cond_list);
|
List_iterator_fast<Item> li(*cond_list);
|
||||||
Item *item;
|
Item *item;
|
||||||
while ((item= li++))
|
while ((item= li++))
|
||||||
check_const_equal_items(item, tab);
|
update_const_equal_items(item, tab);
|
||||||
}
|
}
|
||||||
else if (cond->type() == Item::FUNC_ITEM &&
|
else if (cond->type() == Item::FUNC_ITEM &&
|
||||||
((Item_cond*) cond)->functype() == Item_func::MULT_EQUAL_FUNC)
|
((Item_cond*) cond)->functype() == Item_func::MULT_EQUAL_FUNC)
|
||||||
{
|
{
|
||||||
Item_equal *item_equal= (Item_equal *) cond;
|
Item_equal *item_equal= (Item_equal *) cond;
|
||||||
item_equal->check_const();
|
item_equal->update_const();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10139,7 +10137,7 @@ int safe_index_read(JOIN_TAB *tab)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
join_read_const_table(JOIN *join, JOIN_TAB *tab, POSITION *pos)
|
join_read_const_table(JOIN_TAB *tab, POSITION *pos)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
DBUG_ENTER("join_read_const_table");
|
DBUG_ENTER("join_read_const_table");
|
||||||
@ -10193,8 +10191,9 @@ join_read_const_table(JOIN *join, JOIN_TAB *tab, POSITION *pos)
|
|||||||
table->maybe_null=0;
|
table->maybe_null=0;
|
||||||
|
|
||||||
/* Check appearance of new constant items in Item_equal objects */
|
/* Check appearance of new constant items in Item_equal objects */
|
||||||
|
JOIN *join= tab->join;
|
||||||
if (join->conds)
|
if (join->conds)
|
||||||
check_const_equal_items(join->conds, tab);
|
update_const_equal_items(join->conds, tab);
|
||||||
TABLE_LIST *tbl;
|
TABLE_LIST *tbl;
|
||||||
for (tbl= join->select_lex->leaf_tables; tbl; tbl= tbl->next_leaf)
|
for (tbl= join->select_lex->leaf_tables; tbl; tbl= tbl->next_leaf)
|
||||||
{
|
{
|
||||||
@ -10204,7 +10203,7 @@ join_read_const_table(JOIN *join, JOIN_TAB *tab, POSITION *pos)
|
|||||||
{
|
{
|
||||||
embedded= embedding;
|
embedded= embedding;
|
||||||
if (embedded->on_expr)
|
if (embedded->on_expr)
|
||||||
check_const_equal_items(embedded->on_expr, tab);
|
update_const_equal_items(embedded->on_expr, tab);
|
||||||
embedding= embedded->embedding;
|
embedding= embedded->embedding;
|
||||||
}
|
}
|
||||||
while (embedding &&
|
while (embedding &&
|
||||||
|
Reference in New Issue
Block a user