mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge 10.0-base -> mwl253
This commit is contained in:
@ -133,7 +133,12 @@
|
||||
|
||||
static int sel_cmp(Field *f,uchar *a,uchar *b,uint8 a_flag,uint8 b_flag);
|
||||
|
||||
static uchar is_null_string[2]= {1,0};
|
||||
/*
|
||||
this should be long enough so that any memcmp with a string that
|
||||
starts from '\0' won't cross is_null_string boundaries, even
|
||||
if the memcmp is optimized to compare 4- 8- or 16- bytes at once
|
||||
*/
|
||||
static uchar is_null_string[20]= {1,0};
|
||||
|
||||
class RANGE_OPT_PARAM;
|
||||
/*
|
||||
@ -2001,7 +2006,7 @@ int QUICK_ROR_INTERSECT_SELECT::init()
|
||||
1 error
|
||||
*/
|
||||
|
||||
int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler, MEM_ROOT *alloc)
|
||||
{
|
||||
handler *save_file= file, *org_file;
|
||||
my_bool org_key_read;
|
||||
@ -2029,7 +2034,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (!(file= head->file->clone(head->s->normalized_path.str, thd->mem_root)))
|
||||
if (!(file= head->file->clone(head->s->normalized_path.str, alloc)))
|
||||
{
|
||||
/*
|
||||
Manually set the error flag. Note: there seems to be quite a few
|
||||
@ -2130,7 +2135,8 @@ failure:
|
||||
0 OK
|
||||
other error code
|
||||
*/
|
||||
int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler,
|
||||
MEM_ROOT *alloc)
|
||||
{
|
||||
List_iterator_fast<QUICK_SELECT_WITH_RECORD> quick_it(quick_selects);
|
||||
QUICK_SELECT_WITH_RECORD *cur;
|
||||
@ -2147,7 +2153,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
There is no use of this->file. Use it for the first of merged range
|
||||
selects.
|
||||
*/
|
||||
int error= quick->init_ror_merged_scan(TRUE);
|
||||
int error= quick->init_ror_merged_scan(TRUE, alloc);
|
||||
if (error)
|
||||
DBUG_RETURN(error);
|
||||
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
||||
@ -2159,7 +2165,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
const MY_BITMAP * const save_read_set= quick->head->read_set;
|
||||
const MY_BITMAP * const save_write_set= quick->head->write_set;
|
||||
#endif
|
||||
if (quick->init_ror_merged_scan(FALSE))
|
||||
if (quick->init_ror_merged_scan(FALSE, alloc))
|
||||
DBUG_RETURN(1);
|
||||
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
||||
|
||||
@ -2193,7 +2199,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
int QUICK_ROR_INTERSECT_SELECT::reset()
|
||||
{
|
||||
DBUG_ENTER("QUICK_ROR_INTERSECT_SELECT::reset");
|
||||
if (!scans_inited && init_ror_merged_scan(TRUE))
|
||||
if (!scans_inited && init_ror_merged_scan(TRUE, &alloc))
|
||||
DBUG_RETURN(1);
|
||||
scans_inited= TRUE;
|
||||
List_iterator_fast<QUICK_SELECT_WITH_RECORD> it(quick_selects);
|
||||
@ -2330,7 +2336,7 @@ int QUICK_ROR_UNION_SELECT::reset()
|
||||
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
||||
while ((quick= it++))
|
||||
{
|
||||
if (quick->init_ror_merged_scan(FALSE))
|
||||
if (quick->init_ror_merged_scan(FALSE, &alloc))
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
scans_inited= TRUE;
|
||||
@ -7622,8 +7628,10 @@ static SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param,COND *cond)
|
||||
DBUG_RETURN(tree);
|
||||
}
|
||||
/* Here when simple cond */
|
||||
if (cond->const_item() && !cond->is_expensive())
|
||||
if (cond->const_item())
|
||||
{
|
||||
if (cond->is_expensive())
|
||||
DBUG_RETURN(0);
|
||||
/*
|
||||
During the cond->val_int() evaluation we can come across a subselect
|
||||
item which may allocate memory on the thd->mem_root and assumes
|
||||
|
Reference in New Issue
Block a user