mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merging 4.1 to 5.0.
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union client/mysqltest.c: Auto merged configure.in: Auto merged include/my_sys.h: Auto merged include/mysql_com.h: Auto merged libmysql/libmysql.c: Auto merged libmysqld/Makefile.am: Auto merged libmysqld/lib_sql.cc: Auto merged myisam/mi_check.c: Auto merged myisam/myisamchk.c: Auto merged myisam/myisamdef.h: Auto merged mysql-test/r/func_group.result: Auto merged mysql-test/r/func_time.result: Auto merged mysql-test/r/null.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/rpl_server_id2.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/rpl000015.test: Auto merged mysql-test/t/rpl_error_ignored_table.test: Auto merged mysql-test/t/rpl_log.test: Auto merged mysql-test/t/rpl_log_pos.test: Auto merged mysql-test/t/rpl_max_relay_size.test: Auto merged mysql-test/t/rpl_relayrotate.test: Auto merged mysql-test/t/rpl_rotate_logs.test: Auto merged mysql-test/t/rpl_server_id2.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/variables.test: Auto merged mysys/my_pthread.c: Auto merged netware/BUILD/compile-netware-all: Auto merged netware/BUILD/compile-netware-standard: Auto merged netware/BUILD/mwenv: Auto merged netware/Makefile.am: Auto merged netware/my_manage.c: Auto merged netware/my_manage.h: Auto merged netware/mysql_test_run.c: Auto merged scripts/mysql_install_db.sh: Auto merged sql/Makefile.am: Auto merged sql/ha_berkeley.cc: Auto merged sql/ha_berkeley.h: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_innodb.h: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/item_subselect.cc: Auto merged sql/item_subselect.h: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/item_timefunc.cc: Auto merged sql/lock.cc: Auto merged sql/mysql_priv.h: Auto merged sql/opt_range.cc: Auto merged sql/protocol.cc: Auto merged sql/protocol.h: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_db.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_show.cc: Auto merged sql/sql_string.cc: Auto merged sql/sql_string.h: Auto merged sql/sql_table.cc: Auto merged sql/sql_union.cc: Auto merged sql/sql_yacc.yy: Auto merged tests/client_test.c: Auto merged
This commit is contained in:
@ -2220,7 +2220,7 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag)
|
||||
{
|
||||
if (key1->part > key2->part)
|
||||
{
|
||||
swap(SEL_ARG *,key1,key2);
|
||||
swap_variables(SEL_ARG *, key1, key2);
|
||||
clone_flag=swap_clone_flag(clone_flag);
|
||||
}
|
||||
// key1->part < key2->part
|
||||
@ -2236,7 +2236,7 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag)
|
||||
key2->type != SEL_ARG::MAYBE_KEY) ||
|
||||
key1->type == SEL_ARG::MAYBE_KEY)
|
||||
{ // Put simple key in key2
|
||||
swap(SEL_ARG *,key1,key2);
|
||||
swap_variables(SEL_ARG *, key1, key2);
|
||||
clone_flag=swap_clone_flag(clone_flag);
|
||||
}
|
||||
|
||||
@ -2378,7 +2378,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2)
|
||||
{
|
||||
if (key2->use_count == 0 || key1->elements > key2->elements)
|
||||
{
|
||||
swap(SEL_ARG *,key1,key2);
|
||||
swap_variables(SEL_ARG *,key1,key2);
|
||||
}
|
||||
else if (!(key1=key1->clone_tree()))
|
||||
return 0; // OOM
|
||||
@ -2619,8 +2619,8 @@ SEL_ARG *
|
||||
SEL_ARG::insert(SEL_ARG *key)
|
||||
{
|
||||
SEL_ARG *element,**par,*last_element;
|
||||
|
||||
LINT_INIT(par); LINT_INIT(last_element);
|
||||
|
||||
for (element= this; element != &null_element ; )
|
||||
{
|
||||
last_element=element;
|
||||
@ -3115,26 +3115,32 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
|
||||
{
|
||||
if (tmp_min_flag & GEOM_FLAG)
|
||||
{
|
||||
tmp= param->table->file->
|
||||
records_in_range((int) keynr, (byte*)(param->min_key),
|
||||
min_key_length,
|
||||
(ha_rkey_function)(tmp_min_flag ^ GEOM_FLAG),
|
||||
(byte *)NullS, 0, HA_READ_KEY_EXACT);
|
||||
key_range min_range;
|
||||
min_range.key= (byte*) param->min_key;
|
||||
min_range.length= min_key_length;
|
||||
/* In this case tmp_min_flag contains the handler-read-function */
|
||||
min_range.flag= (ha_rkey_function) (tmp_min_flag ^ GEOM_FLAG);
|
||||
|
||||
tmp= param->table->file->records_in_range(keynr, &min_range,
|
||||
(key_range*) 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp=param->table->file->
|
||||
records_in_range((int) keynr,
|
||||
(byte*) (!min_key_length ? NullS :
|
||||
param->min_key),
|
||||
min_key_length,
|
||||
tmp_min_flag & NEAR_MIN ?
|
||||
HA_READ_AFTER_KEY : HA_READ_KEY_EXACT,
|
||||
(byte*) (!max_key_length ? NullS :
|
||||
param->max_key),
|
||||
max_key_length,
|
||||
(tmp_max_flag & NEAR_MAX ?
|
||||
HA_READ_BEFORE_KEY : HA_READ_AFTER_KEY));
|
||||
key_range min_range, max_range;
|
||||
|
||||
min_range.key= (byte*) param->min_key;
|
||||
min_range.length= min_key_length;
|
||||
min_range.flag= (tmp_min_flag & NEAR_MIN ? HA_READ_AFTER_KEY :
|
||||
HA_READ_KEY_EXACT);
|
||||
max_range.key= (byte*) param->max_key;
|
||||
max_range.length= max_key_length;
|
||||
max_range.flag= (tmp_max_flag & NEAR_MAX ?
|
||||
HA_READ_BEFORE_KEY : HA_READ_AFTER_KEY);
|
||||
tmp=param->table->file->records_in_range(keynr,
|
||||
(min_key_length ? &min_range :
|
||||
(key_range*) 0),
|
||||
(max_key_length ? &max_range :
|
||||
(key_range*) 0));
|
||||
}
|
||||
}
|
||||
end:
|
||||
@ -3563,7 +3569,7 @@ int QUICK_RANGE_SELECT::get_next()
|
||||
if (range)
|
||||
{
|
||||
// Already read through key
|
||||
result= file->read_range_next(test(range->flag & EQ_RANGE));
|
||||
result= file->read_range_next();
|
||||
if (result != HA_ERR_END_OF_FILE)
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
@ -3594,6 +3600,7 @@ int QUICK_RANGE_SELECT::get_next()
|
||||
|
||||
result= file->read_range_first(range->min_length ? &start_key : 0,
|
||||
range->max_length ? &end_key : 0,
|
||||
test(range->flag & EQ_RANGE),
|
||||
sorted);
|
||||
if (range->flag == (UNIQUE_RANGE | EQ_RANGE))
|
||||
range=0; // Stop searching
|
||||
@ -3871,40 +3878,15 @@ int QUICK_RANGE_SELECT::cmp_next(QUICK_RANGE *range_arg)
|
||||
|
||||
int QUICK_RANGE_SELECT::cmp_prev(QUICK_RANGE *range_arg)
|
||||
{
|
||||
int cmp;
|
||||
if (range_arg->flag & NO_MIN_RANGE)
|
||||
return 0; /* key can't be to small */
|
||||
|
||||
KEY_PART *key_part = key_parts;
|
||||
uint store_length;
|
||||
|
||||
for (char *key = range_arg->min_key, *end = key + range_arg->min_length;
|
||||
key < end;
|
||||
key += store_length, key_part++)
|
||||
{
|
||||
int cmp;
|
||||
store_length= key_part->store_length;
|
||||
if (key_part->null_bit)
|
||||
{
|
||||
// this key part allows null values; NULL is lower than everything else
|
||||
if (*key)
|
||||
{
|
||||
// the range is expecting a null value
|
||||
if (!key_part->field->is_null())
|
||||
return 0; // not null -- still inside the range
|
||||
continue; // null -- exact match, go to next key part
|
||||
}
|
||||
else if (key_part->field->is_null())
|
||||
return 1; // null -- outside the range
|
||||
key++;
|
||||
store_length--;
|
||||
}
|
||||
if ((cmp = key_part->field->key_cmp((byte*) key,
|
||||
key_part->length)) > 0)
|
||||
return 0;
|
||||
if (cmp < 0)
|
||||
return 1;
|
||||
}
|
||||
return (range_arg->flag & NEAR_MIN) ? 1 : 0; // Exact match
|
||||
cmp= key_cmp(key_part_info, (byte*) range_arg->min_key,
|
||||
range_arg->min_length);
|
||||
if (cmp > 0 || cmp == 0 && !(range_arg->flag & NEAR_MIN))
|
||||
return 0;
|
||||
return 1; // outside of range
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user