Commit 10f17e61 authored by Mattias Jonsson's avatar Mattias Jonsson

merge

parents ea174a1a 9337f49d
...@@ -480,9 +480,9 @@ class SEL_ARG :public Sql_alloc ...@@ -480,9 +480,9 @@ class SEL_ARG :public Sql_alloc
(*range_key_flag)|= key_tree->max_flag; (*range_key_flag)|= key_tree->max_flag;
if (key_tree->next_key_part && if (key_tree->next_key_part &&
key_tree->part != last_part && key_tree->part != last_part &&
key_tree->next_key_part->part == key_tree->part+1 && key_tree->next_key_part->part == key_tree->part+1 &&
!(*range_key_flag & (NO_MAX_RANGE | NEAR_MAX)) && !(*range_key_flag & (NO_MAX_RANGE | NEAR_MAX)) &&
key_tree->next_key_part->type == SEL_ARG::KEY_RANGE) key_tree->next_key_part->type == SEL_ARG::KEY_RANGE)
res+= key_tree->next_key_part->store_max_key(key, res+= key_tree->next_key_part->store_max_key(key,
range_key, range_key,
range_key_flag, range_key_flag,
...@@ -3137,8 +3137,9 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree) ...@@ -3137,8 +3137,9 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
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;
RANGE_OPT_PARAM *range_par= &(ppar->range_param);
if (check_stack_overrun(ppar->range_param.thd, 3*STACK_MIN_SIZE, NULL)) if (check_stack_overrun(range_par->thd, 3*STACK_MIN_SIZE, NULL))
return -1; return -1;
if (key_tree->left != &null_element) if (key_tree->left != &null_element)
...@@ -3234,11 +3235,11 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree) ...@@ -3234,11 +3235,11 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
else else
flag= key_tree->min_flag | key_tree->max_flag; flag= key_tree->min_flag | key_tree->max_flag;
if (tmp_min_key != ppar->range_param.min_key) if (tmp_min_key != range_par->min_key)
flag&= ~NO_MIN_RANGE; flag&= ~NO_MIN_RANGE;
else else
flag|= NO_MIN_RANGE; flag|= NO_MIN_RANGE;
if (tmp_max_key != ppar->range_param.max_key) if (tmp_max_key != range_par->max_key)
flag&= ~NO_MAX_RANGE; flag&= ~NO_MAX_RANGE;
else else
flag|= NO_MAX_RANGE; flag|= NO_MAX_RANGE;
...@@ -3265,10 +3266,10 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree) ...@@ -3265,10 +3266,10 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
get_part_iter_for_interval(ppar->part_info, get_part_iter_for_interval(ppar->part_info,
FALSE, FALSE,
store_length_array, store_length_array,
ppar->range_param.min_key, range_par->min_key,
ppar->range_param.max_key, range_par->max_key,
tmp_min_key - ppar->range_param.min_key, tmp_min_key - range_par->min_key,
tmp_max_key - ppar->range_param.max_key, tmp_max_key - range_par->max_key,
flag, flag,
&ppar->part_iter); &ppar->part_iter);
if (!res) if (!res)
...@@ -3304,8 +3305,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree) ...@@ -3304,8 +3305,7 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
{ {
PARTITION_ITERATOR subpart_iter; PARTITION_ITERATOR subpart_iter;
DBUG_EXECUTE("info", dbug_print_segment_range(key_tree, DBUG_EXECUTE("info", dbug_print_segment_range(key_tree,
ppar->range_param. range_par->key_parts););
key_parts););
res= ppar->part_info-> res= ppar->part_info->
get_subpart_iter_for_interval(ppar->part_info, get_subpart_iter_for_interval(ppar->part_info,
TRUE, TRUE,
...@@ -7649,13 +7649,13 @@ check_quick_keys(PARAM *param, uint idx, SEL_ARG *key_tree, ...@@ -7649,13 +7649,13 @@ check_quick_keys(PARAM *param, uint idx, SEL_ARG *key_tree,
tmp_min_keypart+= tmp_min_keypart+=
key_tree->next_key_part->store_min_key(param->key[idx], key_tree->next_key_part->store_min_key(param->key[idx],
&tmp_min_key, &tmp_min_key,
&tmp_min_flag, &tmp_min_flag,
MAX_KEY); MAX_KEY);
if (!tmp_max_flag) if (!tmp_max_flag)
tmp_max_keypart+= tmp_max_keypart+=
key_tree->next_key_part->store_max_key(param->key[idx], key_tree->next_key_part->store_max_key(param->key[idx],
&tmp_max_key, &tmp_max_key,
&tmp_max_flag, &tmp_max_flag,
MAX_KEY); MAX_KEY);
min_key_length= (uint) (tmp_min_key - param->min_key); min_key_length= (uint) (tmp_min_key - param->min_key);
max_key_length= (uint) (tmp_max_key - param->max_key); max_key_length= (uint) (tmp_max_key - param->max_key);
......
/* Copyright (C) 2006-2008 MySQL AB, Sun Microsystems Inc. 2008-2009 /* 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
......
...@@ -3169,7 +3169,7 @@ int get_partition_id_range_col(partition_info *part_info, ...@@ -3169,7 +3169,7 @@ int get_partition_id_range_col(partition_info *part_info,
{ {
loc_part_id= (max_part_id + min_part_id + 1) >> 1; loc_part_id= (max_part_id + min_part_id + 1) >> 1;
if (cmp_rec_and_tuple(range_col_array + loc_part_id*num_columns, if (cmp_rec_and_tuple(range_col_array + loc_part_id*num_columns,
num_columns) >= 0) num_columns) >= 0)
min_part_id= loc_part_id + 1; min_part_id= loc_part_id + 1;
else else
max_part_id= loc_part_id - 1; max_part_id= loc_part_id - 1;
...@@ -7006,12 +7006,12 @@ uint32 store_tuple_to_record(Field **pfield, ...@@ -7006,12 +7006,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 the MAX_VALUE The value bound always is a full tuple (but may include the MAXVALUE
special value). 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 MAX_VALUE hold MAXVALUE
*/ */
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)
......
/* Copyright (C) 2006-2008 MySQL AB, Sun Microsystems Inc. 2008-2009 /* 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
...@@ -171,16 +171,16 @@ typedef struct st_partition_iter ...@@ -171,16 +171,16 @@ typedef struct st_partition_iter
SYNOPSIS SYNOPSIS
get_partitions_in_range_iter() get_partitions_in_range_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
Functions with this signature are used to perform "Partitioning Interval Functions with this signature are used to perform "Partitioning Interval
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment