diff options
author | unknown <monty@donna.mysql.com> | 2000-12-11 02:31:09 +0200 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-12-11 02:31:09 +0200 |
commit | 011f8d0a7d1ce5ec3497a3d9e61a4825e040ebc4 (patch) | |
tree | 9b1cff26b3d7a9362f4021e36e9e746671069d92 /sql | |
parent | 71c02e764679e243ce4092b9d43ef1f7e81c42ef (diff) | |
download | mariadb-git-011f8d0a7d1ce5ec3497a3d9e61a4825e040ebc4.tar.gz |
Removed init that crashed BDB
Fixed newly introduced bug in update
BitKeeper/etc/ignore:
Added libmysql_r/conf_to_src to the ignore list
sql/filesort.cc:
Removed init that crashed BDB
sql/ha_berkeley.cc:
Fixed bug in sub AUTO_INCREMENT keys in BDB tables
sql/opt_range.cc:
Cleanup
sql/sql_update.cc:
Fixed newly introduced bug in update
Diffstat (limited to 'sql')
-rw-r--r-- | sql/filesort.cc | 3 | ||||
-rw-r--r-- | sql/ha_berkeley.cc | 23 | ||||
-rw-r--r-- | sql/opt_range.cc | 2 | ||||
-rw-r--r-- | sql/sql_update.cc | 19 |
4 files changed, 22 insertions, 25 deletions
diff --git a/sql/filesort.cc b/sql/filesort.cc index 115698a9d79..09151a1327e 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -325,9 +325,6 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, file->extra(HA_EXTRA_CACHE); /* Quicker reads */ } - if (quick_select) - error=select->quick->init(); - if (!error) for (;;) { diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 45a638c8424..ceaa0b0291a 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -1004,10 +1004,10 @@ int ha_berkeley::remove_key(DB_TXN *sub_trans, uint keynr, const byte *record, We will never come here with keynr = primary_key */ dbug_assert(keynr != primary_key && prim_key->data != key_buff2); - DBC *cursor; - if (!(error=file->cursor(key_file[keynr], sub_trans, &cursor, 0))) + DBC *tmp_cursor; + if (!(error=file->cursor(key_file[keynr], sub_trans, &tmp_cursor, 0))) { - if (!(error=cursor->c_get(cursor, + if (!(error=cursor->c_get(tmp_cursor, (keynr == primary_key ? prim_key : create_key(&key, keynr, key_buff2, record)), @@ -1015,9 +1015,9 @@ int ha_berkeley::remove_key(DB_TXN *sub_trans, uint keynr, const byte *record, packed_record : prim_key), DB_GET_BOTH))) { // This shouldn't happen - error=cursor->c_del(cursor,0); + error=tmp_cursor->c_del(tmp_cursor,0); } - int result=cursor->c_close(cursor); + int result=tmp_cursor->c_close(tmp_cursor); if (!error) error=result; } @@ -1661,7 +1661,6 @@ longlong ha_berkeley::get_auto_increment() else { DBT row,old_key; - DBC *auto_cursor; bzero((char*) &row,sizeof(row)); uint key_len; KEY *key_info= &table->key_info[active_index]; @@ -1673,13 +1672,11 @@ longlong ha_berkeley::get_auto_increment() /* Store for compare */ memcpy(old_key.data=key_buff2, key_buff, (old_key.size=last_key.size)); error=1; - if (!(file->cursor(key_file[active_index], transaction, &auto_cursor, 0))) { /* Modify the compare so that we will find the next key */ key_info->handler.bdb_return_if_eq= 1; /* We lock the next key as the new key will probl. be on the same page */ - error=auto_cursor->c_get(auto_cursor, &last_key, &row, - DB_SET_RANGE | DB_RMW); + error=cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE | DB_RMW); key_info->handler.bdb_return_if_eq= 0; if (!error || error == DB_NOTFOUND) { @@ -1688,15 +1685,14 @@ longlong ha_berkeley::get_auto_increment() biggest key with the given prefix */ error=1; - if (!auto_cursor->c_get(auto_cursor, &last_key, &row, DB_PREV | DB_RMW) - && !berkeley_cmp_packed_key(key_file[active_index], &old_key, - &last_key)) + if (!cursor->c_get(cursor, &last_key, &row, DB_PREV | DB_RMW) && + !berkeley_cmp_packed_key(key_file[active_index], &old_key, + &last_key)) { error=0; // Found value unpack_key(table->record[1], &last_key, active_index); } } - auto_cursor->c_close(auto_cursor); } } if (!error) @@ -1712,7 +1708,6 @@ longlong ha_berkeley::get_auto_increment() Analyzing, checking, and optimizing tables ****************************************************************************/ - static void print_msg(THD *thd, const char *table_name, const char *op_name, const char *msg_type, const char *fmt, ...) { diff --git a/sql/opt_range.cc b/sql/opt_range.cc index a3f236462b4..d8cd49685ee 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -379,7 +379,7 @@ SQL_SELECT::~SQL_SELECT() close_cached_file(&file); } -#undef index // Fix or Unixware 7 +#undef index // Fix for Unixware 7 QUICK_SELECT::QUICK_SELECT(TABLE *table,uint key_nr,bool no_alloc) :error(0),index(key_nr),max_used_key_length(0),head(table), diff --git a/sql/sql_update.cc b/sql/sql_update.cc index fe91450d309..be5229b2ea4 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -20,6 +20,8 @@ #include "mysql_priv.h" #include "sql_acl.h" +#define MAX_ULONG_BIT ((ulong) 1 << (sizeof(ulong)*8-1)); + /* Return 0 if row hasn't changed */ static bool compare_record(TABLE *table) @@ -76,15 +78,11 @@ int mysql_update(THD *thd,TABLE_LIST *table_list,List<Item> &fields, table->timestamp_field->query_id == thd->query_id) table->time_stamp=0; - /* Reset the query_id string so that ->used_keys is based on the WHERE */ - + /* Change query_id so that ->used_keys is based on the WHERE */ table->used_keys=table->keys_in_use; table->quick_keys=0; - reg2 Item *item; - List_iterator<Item> it(fields); - ulong query_id=thd->query_id-1; - while ((item=it++)) - ((Item_field*) item)->field->query_id=query_id; + ulong query_id=thd->query_id; + thd->query_id^= MAX_ULONG_BIT; if (setup_fields(thd,table_list,values,0,0) || setup_conds(thd,table_list,&conds)) { @@ -92,6 +90,13 @@ int mysql_update(THD *thd,TABLE_LIST *table_list,List<Item> &fields, DBUG_RETURN(-1); /* purecov: inspected */ } old_used_keys=table->used_keys; + /* Restore query_id for compare_record */ + thd->query_id=query_id; + List_iterator<Item> it(fields); + Item *item; + while ((item=it++)) + ((Item_field*) item)->field->query_id=query_id; + // Don't count on usage of 'only index' when calculating which key to use table->used_keys=0; select=make_select(table,0,0,conds,&error); |