Fixed review comments
This commit is contained in:
parent
b216aab1c4
commit
05d7593fe3
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2005-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
/* Copyright 2005-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2005-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
/* Copyright 2005-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
/* Copyright 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -655,8 +655,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
uint real_keynr[MAX_KEY];
|
uint real_keynr[MAX_KEY];
|
||||||
|
|
||||||
/* Used to store 'current key tuples', in both range analysis and
|
/*
|
||||||
* partitioning (list) analysis*/
|
Used to store 'current key tuples', in both range analysis and
|
||||||
|
partitioning (list) analysis
|
||||||
|
*/
|
||||||
uchar min_key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH],
|
uchar min_key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH],
|
||||||
max_key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH];
|
max_key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH];
|
||||||
|
|
||||||
@ -3131,7 +3133,7 @@ static
|
|||||||
int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
||||||
{
|
{
|
||||||
int res, left_res=0, right_res=0;
|
int res, left_res=0, right_res=0;
|
||||||
int partno= (int)key_tree->part;
|
int key_tree_part= (int)key_tree->part;
|
||||||
bool set_full_part_if_bad_ret= FALSE;
|
bool set_full_part_if_bad_ret= FALSE;
|
||||||
bool ignore_part_fields= ppar->ignore_part_fields;
|
bool ignore_part_fields= ppar->ignore_part_fields;
|
||||||
bool did_set_ignore_part_fields= FALSE;
|
bool did_set_ignore_part_fields= FALSE;
|
||||||
@ -3146,8 +3148,8 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Push SEL_ARG's to stack to enable looking backwards as well */
|
/* Push SEL_ARG's to stack to enable looking backwards as well */
|
||||||
ppar->cur_part_fields+= ppar->is_part_keypart[partno];
|
ppar->cur_part_fields+= ppar->is_part_keypart[key_tree_part];
|
||||||
ppar->cur_subpart_fields+= ppar->is_subpart_keypart[partno];
|
ppar->cur_subpart_fields+= ppar->is_subpart_keypart[key_tree_part];
|
||||||
*(ppar->arg_stack_end++)= key_tree;
|
*(ppar->arg_stack_end++)= key_tree;
|
||||||
|
|
||||||
if (key_tree->type == SEL_ARG::KEY_RANGE)
|
if (key_tree->type == SEL_ARG::KEY_RANGE)
|
||||||
@ -3249,6 +3251,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
but this is a harder case we will solve later. For the harder case
|
but this is a harder case we will solve later. For the harder case
|
||||||
this clause then turns into use of all partitions and thus we
|
this clause then turns into use of all partitions and thus we
|
||||||
simply set res= -1 as if the mapper had returned that.
|
simply set res= -1 as if the mapper had returned that.
|
||||||
|
TODO: What to do here is defined in WL#4065.
|
||||||
*/
|
*/
|
||||||
if (ppar->arg_stack[0]->part == 0)
|
if (ppar->arg_stack[0]->part == 0)
|
||||||
{
|
{
|
||||||
@ -3283,7 +3286,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
Save our intent to mark full partition as used if we will not be able
|
Save our intent to mark full partition as used if we will not be able
|
||||||
to obtain further limits on subpartitions
|
to obtain further limits on subpartitions
|
||||||
*/
|
*/
|
||||||
if (partno < ppar->last_part_partno)
|
if (key_tree_part < ppar->last_part_partno)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We need to ignore the rest of the partitioning fields in all
|
We need to ignore the rest of the partitioning fields in all
|
||||||
@ -3296,7 +3299,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
goto process_next_key_part;
|
goto process_next_key_part;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (partno == ppar->last_subpart_partno &&
|
if (key_tree_part == ppar->last_subpart_partno &&
|
||||||
(NULL != ppar->part_info->get_subpart_iter_for_interval))
|
(NULL != ppar->part_info->get_subpart_iter_for_interval))
|
||||||
{
|
{
|
||||||
PARTITION_ITERATOR subpart_iter;
|
PARTITION_ITERATOR subpart_iter;
|
||||||
@ -3338,7 +3341,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
|
|
||||||
if (key_tree->is_singlepoint())
|
if (key_tree->is_singlepoint())
|
||||||
{
|
{
|
||||||
if (partno == ppar->last_part_partno &&
|
if (key_tree_part == ppar->last_part_partno &&
|
||||||
ppar->cur_part_fields == ppar->part_fields &&
|
ppar->cur_part_fields == ppar->part_fields &&
|
||||||
ppar->part_info->get_part_iter_for_interval == NULL)
|
ppar->part_info->get_part_iter_for_interval == NULL)
|
||||||
{
|
{
|
||||||
@ -3369,7 +3372,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
goto process_next_key_part;
|
goto process_next_key_part;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (partno == ppar->last_subpart_partno &&
|
if (key_tree_part == ppar->last_subpart_partno &&
|
||||||
ppar->cur_subpart_fields == ppar->subpart_fields)
|
ppar->cur_subpart_fields == ppar->subpart_fields)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -3406,7 +3409,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
|||||||
we're processing subpartititoning's key parts, this means we'll not be
|
we're processing subpartititoning's key parts, this means we'll not be
|
||||||
able to infer any suitable condition, so bail out.
|
able to infer any suitable condition, so bail out.
|
||||||
*/
|
*/
|
||||||
if (partno >= ppar->last_part_partno)
|
if (key_tree_part >= ppar->last_part_partno)
|
||||||
{
|
{
|
||||||
res= -1;
|
res= -1;
|
||||||
goto pop_and_go_right;
|
goto pop_and_go_right;
|
||||||
@ -3455,8 +3458,8 @@ process_next_key_part:
|
|||||||
pop_and_go_right:
|
pop_and_go_right:
|
||||||
/* Pop this key part info off the "stack" */
|
/* Pop this key part info off the "stack" */
|
||||||
ppar->arg_stack_end--;
|
ppar->arg_stack_end--;
|
||||||
ppar->cur_part_fields-= ppar->is_part_keypart[partno];
|
ppar->cur_part_fields-= ppar->is_part_keypart[key_tree_part];
|
||||||
ppar->cur_subpart_fields-= ppar->is_subpart_keypart[partno];
|
ppar->cur_subpart_fields-= ppar->is_subpart_keypart[key_tree_part];
|
||||||
|
|
||||||
if (res == -1)
|
if (res == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2006-2009 MySQL AB
|
/* Copyright (C) 2006-2008 MySQL AB, Sun Microsystems Inc. 2008-2009
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2006 MySQL AB
|
/* Copyright (C) 2006-2008 MySQL AB, Sun Microsystems Inc. 2008-2009
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -363,7 +363,7 @@ char* partition_info::has_unique_fields()
|
|||||||
for (j= 0; j < num_fields; j++)
|
for (j= 0; j < num_fields; j++)
|
||||||
{
|
{
|
||||||
field_name_inner= it_inner++;
|
field_name_inner= it_inner++;
|
||||||
if (i == j)
|
if (i >= j)
|
||||||
continue;
|
continue;
|
||||||
if (!(my_strcasecmp(system_charset_info,
|
if (!(my_strcasecmp(system_charset_info,
|
||||||
field_name_outer,
|
field_name_outer,
|
||||||
@ -660,7 +660,7 @@ bool partition_info::check_range_constants(THD *thd)
|
|||||||
|
|
||||||
if (column_list)
|
if (column_list)
|
||||||
{
|
{
|
||||||
part_column_list_val* loc_range_col_array;
|
part_column_list_val *loc_range_col_array;
|
||||||
part_column_list_val *current_largest_col_val;
|
part_column_list_val *current_largest_col_val;
|
||||||
uint num_column_values= part_field_list.elements;
|
uint num_column_values= part_field_list.elements;
|
||||||
uint size_entries= sizeof(part_column_list_val) * num_column_values;
|
uint size_entries= sizeof(part_column_list_val) * num_column_values;
|
||||||
@ -669,7 +669,7 @@ bool partition_info::check_range_constants(THD *thd)
|
|||||||
LINT_INIT(current_largest_col_val);
|
LINT_INIT(current_largest_col_val);
|
||||||
if (unlikely(range_col_array == NULL))
|
if (unlikely(range_col_array == NULL))
|
||||||
{
|
{
|
||||||
mem_alloc_error(num_parts * sizeof(longlong));
|
mem_alloc_error(num_parts * size_entries);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
loc_range_col_array= range_col_array;
|
loc_range_col_array= range_col_array;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2006-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2005-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
/* Copyright 2005-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -1406,8 +1406,8 @@ static void set_up_partition_func_pointers(partition_info *part_info)
|
|||||||
DBUG_ASSERT(part_info->get_part_partition_id);
|
DBUG_ASSERT(part_info->get_part_partition_id);
|
||||||
if (!part_info->column_list)
|
if (!part_info->column_list)
|
||||||
{
|
{
|
||||||
part_info->get_part_partition_id=
|
part_info->get_part_partition_id_charset=
|
||||||
part_info->get_part_partition_id_charset;
|
part_info->get_part_partition_id;
|
||||||
part_info->get_part_partition_id= get_part_id_charset_func_part;
|
part_info->get_part_partition_id= get_part_id_charset_func_part;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2673,7 +2673,7 @@ static void restore_part_field_pointers(Field **ptr, uchar **restore_ptr)
|
|||||||
part_info A reference to the partition_info struct where all the
|
part_info A reference to the partition_info struct where all the
|
||||||
desired information is given
|
desired information is given
|
||||||
out:part_id The partition id is returned through this pointer
|
out:part_id The partition id is returned through this pointer
|
||||||
out: func_value Value of partition function (longlong)
|
out:func_value Value of partition function (longlong)
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
part_id Partition id of partition that would contain
|
part_id Partition id of partition that would contain
|
||||||
@ -2731,7 +2731,7 @@ static void restore_part_field_pointers(Field **ptr, uchar **restore_ptr)
|
|||||||
get_partition_id_range_col
|
get_partition_id_range_col
|
||||||
get_partition_id_hash_nosub
|
get_partition_id_hash_nosub
|
||||||
get_partition_id_key_nosub
|
get_partition_id_key_nosub
|
||||||
get_partition_id_linhash_nosub
|
get_partition_id_linear_hash_nosub
|
||||||
get_partition_id_linear_key_nosub
|
get_partition_id_linear_key_nosub
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -2923,12 +2923,12 @@ uint32 get_partition_id_cols_list_for_endpoint(partition_info *part_info,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBUG_RETURN(list_index + test(left_endpoint ^ include_endpoint));
|
DBUG_RETURN(list_index + test(!tailf));
|
||||||
}
|
}
|
||||||
} while (max_list_index >= min_list_index);
|
} while (max_list_index >= min_list_index);
|
||||||
notfound:
|
|
||||||
if (cmp > 0)
|
if (cmp > 0)
|
||||||
list_index++;
|
list_index++;
|
||||||
|
notfound:
|
||||||
DBUG_RETURN(list_index);
|
DBUG_RETURN(list_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3027,7 +3027,6 @@ int get_partition_id_range_col(partition_info *part_info,
|
|||||||
|
|
||||||
DBUG_PRINT("exit",("partition: %d", *part_id));
|
DBUG_PRINT("exit",("partition: %d", *part_id));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6746,13 +6745,28 @@ setup_subparts:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TODO Commenting those functions */
|
/*
|
||||||
|
This function takes a memory of packed fields in opt-range format
|
||||||
|
and stores it in record format. To avoid having to worry about how
|
||||||
|
the length of fields are calculated in opt-range format we send
|
||||||
|
an array of lengths used for each field in store_length_array.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
store_tuple_to_record()
|
||||||
|
pfield Field array
|
||||||
|
store_length_array Array of field lengths
|
||||||
|
value Memory where fields are stored
|
||||||
|
value_end End of memory
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
nparts Number of fields assigned
|
||||||
|
*/
|
||||||
uint32 store_tuple_to_record(Field **pfield,
|
uint32 store_tuple_to_record(Field **pfield,
|
||||||
uint32 *store_length_array,
|
uint32 *store_length_array,
|
||||||
uchar *value,
|
uchar *value,
|
||||||
uchar *value_end)
|
uchar *value_end)
|
||||||
{
|
{
|
||||||
// see store_key_image_to_rec
|
/* This function is inspired by store_key_image_rec. */
|
||||||
uint32 nparts= 0;
|
uint32 nparts= 0;
|
||||||
uchar *loc_value;
|
uchar *loc_value;
|
||||||
while (value < value_end)
|
while (value < value_end)
|
||||||
@ -6779,12 +6793,12 @@ uint32 store_tuple_to_record(Field **pfield,
|
|||||||
/*
|
/*
|
||||||
RANGE(columns) partitioning: compare value bound and probe tuple.
|
RANGE(columns) partitioning: compare value bound and probe tuple.
|
||||||
|
|
||||||
The value bound always is a full tuple (but may include MIN_VALUE and
|
The value bound always is a full tuple (but may include the MAX_VALUE
|
||||||
MAX_VALUE special values).
|
special value).
|
||||||
|
|
||||||
The probe tuple may be a prefix of partitioning tuple. The tail_is_min
|
The probe tuple may be a prefix of partitioning tuple. The tail_is_min
|
||||||
parameter specifies whether the suffix components should be assumed to
|
parameter specifies whether the suffix components should be assumed to
|
||||||
hold MIN_VALUE or MAX_VALUE
|
hold MAX_VALUE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int cmp_rec_and_tuple(part_column_list_val *val, uint32 nvals_in_rec)
|
static int cmp_rec_and_tuple(part_column_list_val *val, uint32 nvals_in_rec)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2006 MySQL AB
|
/* Copyright (C) 2006-2008 MySQL AB, Sun Microsystems Inc. 2008-2009
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -175,12 +175,12 @@ typedef struct st_partition_iter
|
|||||||
part_info Partitioning info
|
part_info Partitioning info
|
||||||
is_subpart
|
is_subpart
|
||||||
store_length_array Length of fields packed in opt_range_key format
|
store_length_array Length of fields packed in opt_range_key format
|
||||||
min_val Left edge, field value in opt_range_key format.
|
min_val Left edge, field value in opt_range_key format
|
||||||
max_val Right edge, field value in opt_range_key format.
|
max_val Right edge, field value in opt_range_key format
|
||||||
min_len Length of minimum value
|
min_len Length of minimum value
|
||||||
max_len Length of maximum value
|
max_len Length of maximum value
|
||||||
flags Some combination of NEAR_MIN, NEAR_MAX, NO_MIN_RANGE,
|
flags Some combination of NEAR_MIN, NEAR_MAX, NO_MIN_RANGE,
|
||||||
NO_MAX_RANGE.
|
NO_MAX_RANGE
|
||||||
part_iter Iterator structure to be initialized
|
part_iter Iterator structure to be initialized
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
Loading…
x
Reference in New Issue
Block a user