@ -1291,9 +1291,21 @@ public:
Item * target_expr , Item * target_value ,
Item_bool_func2 * source ,
Item * source_expr , Item * source_const ) const = 0 ;
/*
@ brief
Check if an IN subquery allows materialization or not
@ param
inner expression on the inner side of the IN subquery
outer expression on the outer side of the IN subquery
is_in_predicate SET to true if IN subquery was converted from an
IN predicate or we are checking if materialization
strategy can be used for an IN predicate
*/
virtual bool
subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const = 0 ;
const Item * outer ,
bool is_in_predicate ) const = 0 ;
/**
Make a simple constant replacement item for a constant " src " ,
so the new item can futher be used for comparison with " cmp " , e . g . :
@ -1470,7 +1482,8 @@ public:
}
const Type_handler * type_handler_for_comparison ( ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const
const Item * outer ,
bool is_in_predicate ) const
{
DBUG_ASSERT ( 0 ) ;
return false ;
@ -1788,7 +1801,8 @@ public:
virtual ~ Type_handler_real_result ( ) { }
const Type_handler * type_handler_for_comparison ( ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const ;
const Item * outer ,
bool is_in_predicate ) const ;
void make_sort_key ( uchar * to , Item * item , const SORT_FIELD_ATTR * sort_field ,
Sort_param * param ) const ;
void sortlength ( THD * thd ,
@ -1857,7 +1871,8 @@ public:
virtual ~ Type_handler_decimal_result ( ) { } ;
const Type_handler * type_handler_for_comparison ( ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const ;
const Item * outer ,
bool is_in_predicate ) const ;
Field * make_num_distinct_aggregator_field ( MEM_ROOT * , const Item * ) const ;
void make_sort_key ( uchar * to , Item * item , const SORT_FIELD_ATTR * sort_field ,
Sort_param * param ) const ;
@ -2060,7 +2075,8 @@ public:
virtual ~ Type_handler_int_result ( ) { }
const Type_handler * type_handler_for_comparison ( ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const ;
const Item * outer ,
bool is_in_predicate ) const ;
Field * make_num_distinct_aggregator_field ( MEM_ROOT * , const Item * ) const ;
void make_sort_key ( uchar * to , Item * item , const SORT_FIELD_ATTR * sort_field ,
Sort_param * param ) const ;
@ -2156,7 +2172,8 @@ public:
Item_bool_func2 * source ,
Item * source_expr , Item * source_const ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const ;
const Item * outer ,
bool is_in_predicate ) const ;
bool Item_func_min_max_fix_attributes ( THD * thd , Item_func_min_max * func ,
Item * * items , uint nitems ) const ;
bool Item_sum_hybrid_fix_length_and_dec ( Item_sum_hybrid * func ) const ;
@ -2266,7 +2283,8 @@ public:
Item_bool_func2 * source ,
Item * source_expr , Item * source_const ) const ;
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const ;
const Item * outer ,
bool is_in_predicate ) const ;
Item * make_const_item_for_comparison ( THD * , Item * src , const Item * cmp ) const ;
Item_cache * Item_get_cache ( THD * thd , const Item * item ) const ;
bool set_comparator_func ( Arg_comparator * cmp ) const ;
@ -3236,7 +3254,8 @@ public:
return blob_type_handler ( item ) ;
}
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const
const Item * outer ,
bool is_in_predicate ) const
{
return false ; / / Materialization does not work with BLOB columns
}
@ -3341,7 +3360,8 @@ public:
return true ;
}
bool subquery_type_allows_materialization ( const Item * inner ,
const Item * outer ) const
const Item * outer ,
bool is_in_predicate ) const
{
return false ; / / Materialization does not work with GEOMETRY columns
}