1
0
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:
Marko Mäkelä
2020-01-20 16:48:56 +02:00
295 changed files with 4823 additions and 1062 deletions

View File

@ -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);