summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-12-11 02:31:09 +0200
committerunknown <monty@donna.mysql.com>2000-12-11 02:31:09 +0200
commit011f8d0a7d1ce5ec3497a3d9e61a4825e040ebc4 (patch)
tree9b1cff26b3d7a9362f4021e36e9e746671069d92 /sql
parent71c02e764679e243ce4092b9d43ef1f7e81c42ef (diff)
downloadmariadb-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.cc3
-rw-r--r--sql/ha_berkeley.cc23
-rw-r--r--sql/opt_range.cc2
-rw-r--r--sql/sql_update.cc19
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);