mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge branch '10.1' into 10.2
This commit is contained in:
@@ -833,12 +833,14 @@ bool subquery_types_allow_materialization(Item_in_subselect *in_subs)
|
||||
in_subs->sjm_scan_allowed= FALSE;
|
||||
|
||||
bool all_are_fields= TRUE;
|
||||
uint32 total_key_length = 0;
|
||||
for (uint i= 0; i < elements; i++)
|
||||
{
|
||||
Item *outer= in_subs->left_expr->element_index(i);
|
||||
Item *inner= it++;
|
||||
all_are_fields &= (outer->real_item()->type() == Item::FIELD_ITEM &&
|
||||
inner->real_item()->type() == Item::FIELD_ITEM);
|
||||
total_key_length += inner->max_length;
|
||||
if (outer->cmp_type() != inner->cmp_type())
|
||||
DBUG_RETURN(FALSE);
|
||||
switch (outer->cmp_type()) {
|
||||
@@ -869,6 +871,15 @@ bool subquery_types_allow_materialization(Item_in_subselect *in_subs)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Make sure that create_tmp_table will not fail due to too long keys.
|
||||
See MDEV-7122. This check is performed inside create_tmp_table also and
|
||||
we must do it so that we know the table has keys created.
|
||||
*/
|
||||
if (total_key_length > tmp_table_max_key_length() ||
|
||||
elements > tmp_table_max_key_parts())
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
in_subs->types_allow_materialization= TRUE;
|
||||
in_subs->sjm_scan_allowed= all_are_fields;
|
||||
DBUG_PRINT("info",("subquery_types_allow_materialization: ok, allowed"));
|
||||
@@ -5533,7 +5544,8 @@ bool JOIN::choose_subquery_plan(table_map join_tables)
|
||||
outer join has not been optimized yet).
|
||||
*/
|
||||
if (outer_join && outer_join->table_count > 0 && // (1)
|
||||
outer_join->join_tab) // (2)
|
||||
outer_join->join_tab && // (2)
|
||||
!in_subs->const_item())
|
||||
{
|
||||
/*
|
||||
TODO:
|
||||
|
Reference in New Issue
Block a user