mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.4 into 10.5
This commit is contained in:
@ -11601,6 +11601,13 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
||||
if (i != join->const_tables && tab->use_quick != 2 &&
|
||||
!tab->first_inner)
|
||||
{ /* Read with cache */
|
||||
/*
|
||||
TODO: the execution also gets here when we will not be using
|
||||
join buffer. Review these cases and perhaps, remove this call.
|
||||
(The final decision whether to use join buffer is made in
|
||||
check_join_cache_usage, so we should only call make_scan_filter()
|
||||
there, too).
|
||||
*/
|
||||
if (tab->make_scan_filter())
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
@ -12577,6 +12584,9 @@ uint check_join_cache_usage(JOIN_TAB *tab,
|
||||
if ((tab->cache= new (root) JOIN_CACHE_BNL(join, tab, prev_cache)))
|
||||
{
|
||||
tab->icp_other_tables_ok= FALSE;
|
||||
/* If make_join_select() hasn't called make_scan_filter(), do it now */
|
||||
if (!tab->cache_select && tab->make_scan_filter())
|
||||
goto no_join_cache;
|
||||
return (2 - MY_TEST(!prev_cache));
|
||||
}
|
||||
goto no_join_cache;
|
||||
@ -15250,12 +15260,15 @@ static int compare_fields_by_table_order(Item *field1,
|
||||
{
|
||||
int cmp= 0;
|
||||
bool outer_ref= 0;
|
||||
Item_field *f1= (Item_field *) (field1->real_item());
|
||||
Item_field *f2= (Item_field *) (field2->real_item());
|
||||
if (field1->const_item() || f1->const_item())
|
||||
Item *field1_real= field1->real_item();
|
||||
Item *field2_real= field2->real_item();
|
||||
|
||||
if (field1->const_item() || field1_real->const_item())
|
||||
return -1;
|
||||
if (field2->const_item() || f2->const_item())
|
||||
if (field2->const_item() || field2_real->const_item())
|
||||
return 1;
|
||||
Item_field *f1= (Item_field *) field1_real;
|
||||
Item_field *f2= (Item_field *) field2_real;
|
||||
if (f1->used_tables() & OUTER_REF_TABLE_BIT)
|
||||
{
|
||||
outer_ref= 1;
|
||||
@ -23354,6 +23367,19 @@ check_reverse_order:
|
||||
join_read_first:join_read_last;
|
||||
tab->type=JT_NEXT; // Read with index_first(), index_next()
|
||||
|
||||
/*
|
||||
Currently usage of rowid filters is not supported in InnoDB
|
||||
if the table is accessed by the primary key
|
||||
*/
|
||||
if (tab->rowid_filter &&
|
||||
tab->index == table->s->primary_key &&
|
||||
table->file->primary_key_is_clustered())
|
||||
{
|
||||
tab->range_rowid_filter_info= 0;
|
||||
delete tab->rowid_filter;
|
||||
tab->rowid_filter= 0;
|
||||
}
|
||||
|
||||
if (tab->pre_idx_push_select_cond)
|
||||
{
|
||||
tab->set_cond(tab->pre_idx_push_select_cond);
|
||||
|
Reference in New Issue
Block a user