mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge with 4.1.3-beta
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union VC++Files/libmysqld/libmysqld.dsp: Auto merged VC++Files/sql/mysqld.dsp: Auto merged client/mysql.cc: Auto merged client/mysqlbinlog.cc: Auto merged client/mysqltest.c: Auto merged include/config-netware.h: Auto merged include/my_base.h: Auto merged include/my_global.h: Auto merged include/my_sys.h: Auto merged include/mysql_com.h: Auto merged include/sql_state.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/row/row0sel.c: Auto merged libmysql/libmysql.c: Auto merged libmysqld/lib_sql.cc: Auto merged myisam/mi_check.c: Auto merged mysql-test/r/bdb.result: Auto merged mysql-test/r/connect.result: Auto merged mysql-test/r/ctype_ucs.result: Auto merged mysql-test/r/derived.result: Auto merged mysql-test/r/func_group.result: Auto merged mysql-test/r/func_like.result: Auto merged mysql-test/r/func_sapdb.result: Auto merged mysql-test/r/func_time.result: Auto merged mysql-test/r/insert.result: Auto merged mysql-test/r/insert_select.result: Auto merged mysql-test/r/join_outer.result: Auto merged mysql-test/r/key.result: Auto merged mysql-test/r/multi_update.result: Auto merged mysql-test/r/mysqldump.result: Auto merged mysql-test/r/null.result: Auto merged mysql-test/r/null_key.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/rpl_rotate_logs.result: Auto merged mysql-test/r/rpl_server_id1.result: Auto merged mysql-test/r/rpl_until.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/r/show_check.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/system_mysql_db.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/multi_update.test: Auto merged mysql-test/t/mysqlbinlog.test: Auto merged mysql-test/t/rpl000015.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/variables.test: Auto merged mysys/mf_iocache2.c: Auto merged mysys/my_bitmap.c: Auto merged mysys/my_pthread.c: Auto merged netware/Makefile.am: Auto merged netware/my_manage.c: Auto merged netware/mysql_test_run.c: Auto merged netware/BUILD/compile-linux-tools: Auto merged netware/BUILD/compile-netware-standard: Auto merged netware/BUILD/mwenv: Auto merged netware/BUILD/nwbootstrap: Auto merged scripts/make_binary_distribution.sh: Auto merged scripts/mysql_install_db.sh: Auto merged sql/ha_berkeley.cc: Auto merged sql/ha_berkeley.h: Auto merged sql/ha_heap.h: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_create.cc: Auto merged sql/item_create.h: Auto merged sql/item_func.h: Auto merged sql/item_subselect.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/item_timefunc.h: Auto merged sql/lex.h: Auto merged sql/mysql_priv.h: Auto merged sql/net_serv.cc: Auto merged sql/protocol.cc: Auto merged sql/protocol.h: Auto merged sql/records.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_acl.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_derived.cc: Auto merged sql/sql_load.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_string.cc: Auto merged sql/sql_update.cc: Auto merged sql/structs.h: Auto merged sql-common/client.c: Auto merged configure.in: Merge with 4.1 include/mysqld_error.h: New errors from 4.1 libmysqld/Makefile.am: Merge with 4.1 myisam/myisamchk.c: Merge with 4.1 myisam/myisamdef.h: Merge with 4.1 myisam/sort.c: Merge with 4.1 mysql-test/r/mysqlbinlog.result: Merge with 4.1 mysql-test/r/range.result: Merge with 4.1 mysql-test/r/rpl_flush_log_loop.result: Merge with 4.1 mysql-test/r/rpl_replicate_do.result: Merge with 4.1 mysql-test/r/rpl_temporary.result: Merge with 4.1 mysql-test/r/rpl_user_variables.result: Merge with 4.1 mysql-test/t/func_time.test: Merge with 4.1 scripts/mysql_create_system_tables.sh: Merge with 4.1 scripts/mysql_fix_privilege_tables.sql: Merge with 4.1 sql/Makefile.am: Merge with 4.1 sql/filesort.cc: Merge with 4.1 sql/ha_innodb.cc: Merge with 4.1 sql/ha_innodb.h: Merge with 4.1 sql/ha_myisam.cc: Merge with 4.1 sql/handler.cc: Merge with 4.1 sql/handler.h: Merge with 4.1 sql/item_func.cc: Merge with 4.1 sql/item_timefunc.cc: Merge with 4.1 sql/log.cc: Merge with 4.1 sql/log_event.cc: Merge with 4.1 sql/mysqld.cc: Merge with 4.1 sql/opt_range.cc: Merge with 4.1 sql/opt_range.h: Merge with 4.1 sql/share/czech/errmsg.txt: Merge with 4.1 Updated english error messages sql/share/danish/errmsg.txt: Merge with 4.1 sql/share/dutch/errmsg.txt: Merge with 4.1 sql/share/english/errmsg.txt: Merge with 4.1 sql/share/estonian/errmsg.txt: Merge with 4.1 sql/share/french/errmsg.txt: Merge with 4.1 sql/share/german/errmsg.txt: Merge with 4.1 sql/share/greek/errmsg.txt: Merge with 4.1 sql/share/hungarian/errmsg.txt: Merge with 4.1 sql/share/italian/errmsg.txt: Merge with 4.1 sql/share/japanese/errmsg.txt: Merge with 4.1 sql/share/korean/errmsg.txt: Merge with 4.1 sql/share/norwegian-ny/errmsg.txt: Merge with 4.1 sql/share/norwegian/errmsg.txt: Merge with 4.1 sql/share/polish/errmsg.txt: Merge with 4.1 sql/share/portuguese/errmsg.txt: Merge with 4.1 sql/share/romanian/errmsg.txt: Merge with 4.1 sql/share/russian/errmsg.txt: Merge with 4.1 sql/share/serbian/errmsg.txt: Merge with 4.1 sql/share/slovak/errmsg.txt: Merge with 4.1 sql/share/spanish/errmsg.txt: Merge with 4.1 sql/share/swedish/errmsg.txt: Merge with 4.1 sql/share/ukrainian/errmsg.txt: Merge with 4.1 sql/slave.cc: Merge with 4.1 sql/sql_class.cc: Merge with 4.1 sql/sql_class.h: Merge with 4.1 sql/sql_db.cc: Merge with 4.1 sql/sql_insert.cc: Merge with 4.1 sql/sql_lex.cc: Merge with 4.1 sql/sql_lex.h: Merge with 4.1 sql/sql_parse.cc: Merge with 4.1 tree Changed // comments to /* */ sql/sql_prepare.cc: Merge with 4.1 sql/sql_select.cc: Merge with 4.1 sql/sql_table.cc: Merge with 4.1 sql/sql_yacc.yy: Merge with 4.1 sql/table.h: Merge with 4.1 tests/client_test.c: Merge with 4.1
This commit is contained in:
@ -729,7 +729,7 @@ QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
|
||||
int QUICK_RANGE_SELECT::init()
|
||||
{
|
||||
DBUG_ENTER("QUICK_RANGE_SELECT::init");
|
||||
DBUG_RETURN(error= file->index_init(index));
|
||||
DBUG_RETURN(error= file->ha_index_init(index));
|
||||
}
|
||||
|
||||
QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT()
|
||||
@ -737,7 +737,8 @@ QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT()
|
||||
DBUG_ENTER("QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT");
|
||||
if (!dont_free)
|
||||
{
|
||||
file->index_end();
|
||||
if (file->inited)
|
||||
file->ha_index_end();
|
||||
file->extra(HA_EXTRA_NO_KEYREAD);
|
||||
delete_dynamic(&ranges); /* ranges are allocated in alloc */
|
||||
if (free_file)
|
||||
@ -1514,7 +1515,6 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
table_map prev_tables,
|
||||
ha_rows limit, bool force_quick_range)
|
||||
{
|
||||
uint basflag;
|
||||
uint idx;
|
||||
double scan_time;
|
||||
DBUG_ENTER("test_quick_select");
|
||||
@ -1529,14 +1529,13 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
if (!cond || (specialflag & SPECIAL_SAFE_MODE) && ! force_quick_range ||
|
||||
!limit)
|
||||
DBUG_RETURN(0); /* purecov: inspected */
|
||||
if (!((basflag= head->file->table_flags()) & HA_KEYPOS_TO_RNDPOS) &&
|
||||
keys_to_use.is_set_all() || keys_to_use.is_clear_all())
|
||||
DBUG_RETURN(0); /* Not smart database */
|
||||
if (keys_to_use.is_clear_all())
|
||||
DBUG_RETURN(0);
|
||||
records=head->file->records;
|
||||
if (!records)
|
||||
records++; /* purecov: inspected */
|
||||
scan_time=(double) records / TIME_FOR_COMPARE+1;
|
||||
read_time=(double) head->file->scan_time()+ scan_time + 1.0;
|
||||
read_time=(double) head->file->scan_time()+ scan_time + 1.1;
|
||||
if (head->force_index)
|
||||
scan_time= read_time= DBL_MAX;
|
||||
if (limit < records)
|
||||
@ -1557,7 +1556,7 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
|
||||
/* set up parameter that is passed to all functions */
|
||||
param.thd= thd;
|
||||
param.baseflag=basflag;
|
||||
param.baseflag=head->file->table_flags();
|
||||
param.prev_tables=prev_tables | const_tables;
|
||||
param.read_tables=read_tables;
|
||||
param.current_table= head->map;
|
||||
@ -2971,7 +2970,7 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
|
||||
}
|
||||
if (found_records != HA_POS_ERROR && found_records > 2 &&
|
||||
read_index_only &&
|
||||
(param->table->file->index_flags(keynr) & HA_KEY_READ_ONLY) &&
|
||||
(param->table->file->index_flags(keynr) & HA_KEYREAD_ONLY) &&
|
||||
!(pk_is_clustered && keynr == param->table->primary_key))
|
||||
{
|
||||
/* We can resolve this by only reading through this key. */
|
||||
@ -2988,6 +2987,8 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
|
||||
found_records)+
|
||||
(double) found_records / TIME_FOR_COMPARE);
|
||||
}
|
||||
DBUG_PRINT("info",("read_time: %g found_read_time: %g",
|
||||
read_time, found_read_time));
|
||||
if (read_time > found_read_time && found_records != HA_POS_ERROR
|
||||
/*|| read_time == DBL_MAX*/ )
|
||||
{
|
||||
@ -3991,7 +3992,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2)
|
||||
{
|
||||
swap_variables(SEL_ARG *,key1,key2);
|
||||
}
|
||||
else if (!(key1=key1->clone_tree()))
|
||||
if (key1->use_count > 0 || !(key1=key1->clone_tree()))
|
||||
return 0; // OOM
|
||||
}
|
||||
|
||||
@ -4060,10 +4061,10 @@ key_or(SEL_ARG *key1,SEL_ARG *key2)
|
||||
SEL_ARG *next=key2->next; // Keys are not overlapping
|
||||
if (key2_shared)
|
||||
{
|
||||
SEL_ARG *tmp= new SEL_ARG(*key2); // Must make copy
|
||||
if (!tmp)
|
||||
SEL_ARG *cpy= new SEL_ARG(*key2); // Must make copy
|
||||
if (!cpy)
|
||||
return 0; // OOM
|
||||
key1=key1->insert(tmp);
|
||||
key1=key1->insert(cpy);
|
||||
key2->increment_use_count(key1->use_count+1);
|
||||
}
|
||||
else
|
||||
@ -4299,8 +4300,17 @@ SEL_ARG::find_range(SEL_ARG *key)
|
||||
|
||||
|
||||
/*
|
||||
** Remove a element from the tree
|
||||
** This also frees all sub trees that is used by the element
|
||||
Remove a element from the tree
|
||||
|
||||
SYNOPSIS
|
||||
tree_delete()
|
||||
key Key that is to be deleted from tree (this)
|
||||
|
||||
NOTE
|
||||
This also frees all sub trees that is used by the element
|
||||
|
||||
RETURN
|
||||
root of new tree (with key deleted)
|
||||
*/
|
||||
|
||||
SEL_ARG *
|
||||
@ -4308,7 +4318,10 @@ SEL_ARG::tree_delete(SEL_ARG *key)
|
||||
{
|
||||
enum leaf_color remove_color;
|
||||
SEL_ARG *root,*nod,**par,*fix_par;
|
||||
root=this; this->parent= 0;
|
||||
DBUG_ENTER("tree_delete");
|
||||
|
||||
root=this;
|
||||
this->parent= 0;
|
||||
|
||||
/* Unlink from list */
|
||||
if (key->prev)
|
||||
@ -4355,7 +4368,7 @@ SEL_ARG::tree_delete(SEL_ARG *key)
|
||||
}
|
||||
|
||||
if (root == &null_element)
|
||||
return 0; // Maybe root later
|
||||
DBUG_RETURN(0); // Maybe root later
|
||||
if (remove_color == BLACK)
|
||||
root=rb_delete_fixup(root,nod,fix_par);
|
||||
test_rb_tree(root,root->parent);
|
||||
@ -4363,7 +4376,7 @@ SEL_ARG::tree_delete(SEL_ARG *key)
|
||||
root->use_count=this->use_count; // Fix root counters
|
||||
root->elements=this->elements-1;
|
||||
root->maybe_flag=this->maybe_flag;
|
||||
return root;
|
||||
DBUG_RETURN(root);
|
||||
}
|
||||
|
||||
|
||||
@ -5223,7 +5236,6 @@ bool QUICK_ROR_UNION_SELECT::check_if_keys_used(List<Item> *fields)
|
||||
QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table,
|
||||
TABLE_REF *ref)
|
||||
{
|
||||
table->file->index_end(); // Remove old cursor
|
||||
QUICK_RANGE_SELECT *quick=new QUICK_RANGE_SELECT(thd, table, ref->key, 1);
|
||||
KEY *key_info = &table->key_info[ref->key];
|
||||
KEY_PART *key_part;
|
||||
@ -5719,22 +5731,13 @@ QUICK_SELECT_DESC::QUICK_SELECT_DESC(QUICK_RANGE_SELECT *q,
|
||||
uint used_key_parts)
|
||||
: QUICK_RANGE_SELECT(*q), rev_it(rev_ranges)
|
||||
{
|
||||
bool not_read_after_key = file->table_flags() & HA_NOT_READ_AFTER_KEY;
|
||||
QUICK_RANGE *r;
|
||||
|
||||
QUICK_RANGE **pr= (QUICK_RANGE**)ranges.buffer;
|
||||
QUICK_RANGE **last_range= pr + ranges.elements;
|
||||
for (; pr!=last_range; ++pr)
|
||||
{
|
||||
r= *pr;
|
||||
rev_ranges.push_front(r);
|
||||
if (not_read_after_key && range_reads_after_key(r))
|
||||
{
|
||||
error = HA_ERR_UNSUPPORTED;
|
||||
dont_free=1; // Don't free memory from 'q'
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (; pr!=last_range; pr++)
|
||||
rev_ranges.push_front(*pr);
|
||||
|
||||
/* Remove EQ_RANGE flag for keys that are not using the full key */
|
||||
for (r = rev_it++; r; r = rev_it++)
|
||||
{
|
||||
@ -5803,29 +5806,10 @@ int QUICK_SELECT_DESC::get_next()
|
||||
else
|
||||
{
|
||||
DBUG_ASSERT(range->flag & NEAR_MAX || range_reads_after_key(range));
|
||||
#ifndef NOT_IMPLEMENTED_YET
|
||||
result=file->index_read(record, (byte*) range->max_key,
|
||||
range->max_length,
|
||||
((range->flag & NEAR_MAX) ?
|
||||
HA_READ_BEFORE_KEY : HA_READ_PREFIX_LAST_OR_PREV));
|
||||
#else
|
||||
/*
|
||||
Heikki changed Sept 11, 2002: since InnoDB does not store the cursor
|
||||
position if READ_KEY_EXACT is used to a primary key with all
|
||||
key columns specified, we must use below HA_READ_KEY_OR_NEXT,
|
||||
so that InnoDB stores the cursor position and is able to move
|
||||
the cursor one step backward after the search.
|
||||
*/
|
||||
/*
|
||||
Note: even if max_key is only a prefix, HA_READ_AFTER_KEY will
|
||||
do the right thing - go past all keys which match the prefix
|
||||
*/
|
||||
result=file->index_read(record, (byte*) range->max_key,
|
||||
range->max_length,
|
||||
((range->flag & NEAR_MAX) ?
|
||||
HA_READ_KEY_OR_NEXT : HA_READ_AFTER_KEY));
|
||||
result = file->index_prev(record);
|
||||
#endif
|
||||
}
|
||||
if (result)
|
||||
{
|
||||
|
Reference in New Issue
Block a user