summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heap/hp_rfirst.c4
-rw-r--r--heap/hp_rlast.c9
-rw-r--r--heap/hp_test2.c4
-rw-r--r--include/heap.h4
-rw-r--r--mysql-test/r/heap_btree.result4
-rw-r--r--sql/ha_heap.cc4
6 files changed, 13 insertions, 16 deletions
diff --git a/heap/hp_rfirst.c b/heap/hp_rfirst.c
index 4b7098745a4..390d18fc58f 100644
--- a/heap/hp_rfirst.c
+++ b/heap/hp_rfirst.c
@@ -18,10 +18,10 @@
/* Read first record with the current key */
-int heap_rfirst(HP_INFO *info, byte *record)
+int heap_rfirst(HP_INFO *info, byte *record, int inx)
{
HP_SHARE *share = info->s;
- HP_KEYDEF *keyinfo = share->keydef + info->lastinx;
+ HP_KEYDEF *keyinfo = share->keydef + inx;
DBUG_ENTER("heap_rfirst");
if (keyinfo->algorithm == HA_KEY_ALG_BTREE)
diff --git a/heap/hp_rlast.c b/heap/hp_rlast.c
index 7f883d3a18b..4c2379427b0 100644
--- a/heap/hp_rlast.c
+++ b/heap/hp_rlast.c
@@ -19,15 +19,12 @@
/* Read first record with the current key */
-int heap_rlast(HP_INFO *info, byte *record)
+int heap_rlast(HP_INFO *info, byte *record, int inx)
{
- HP_SHARE *share = info->s;
- HP_KEYDEF *keyinfo;
+ HP_SHARE *share= info->s;
+ HP_KEYDEF *keyinfo= share->keydef + inx;
DBUG_ENTER("heap_rlast");
- if (info->lastinx < 0)
- DBUG_RETURN(my_errno = HA_ERR_WRONG_INDEX);
- keyinfo = share->keydef + info->lastinx;
if (keyinfo->algorithm == HA_KEY_ALG_BTREE)
{
byte *pos;
diff --git a/heap/hp_test2.c b/heap/hp_test2.c
index f8b6a8cd7d3..a972e7073e0 100644
--- a/heap/hp_test2.c
+++ b/heap/hp_test2.c
@@ -306,7 +306,7 @@ int main(int argc, char *argv[])
if (!silent)
printf("- Read last key - delete - prev - prev - opt_delete - prev -> first\n");
- if (heap_rlast(file,record3)) goto err;
+ if (heap_rlast(file,record3,0)) goto err;
if (heap_delete(file,record3)) goto err;
key_check-=atoi(record3);
key1[atoi(record+keyinfo[0].seg[0].start)]--;
@@ -513,7 +513,7 @@ int main(int argc, char *argv[])
}
ant=0;
- for (error=heap_rlast(file,record) ;
+ for (error=heap_rlast(file,record,0) ;
! error ;
error=heap_rprev(file,record))
{
diff --git a/include/heap.h b/include/heap.h
index 088bb1241b2..8cc62df9250 100644
--- a/include/heap.h
+++ b/include/heap.h
@@ -161,8 +161,8 @@ extern int heap_panic(enum ha_panic_function flag);
extern int heap_rsame(HP_INFO *info,byte *record,int inx);
extern int heap_rnext(HP_INFO *info,byte *record);
extern int heap_rprev(HP_INFO *info,byte *record);
-extern int heap_rfirst(HP_INFO *info,byte *record);
-extern int heap_rlast(HP_INFO *info,byte *record);
+extern int heap_rfirst(HP_INFO *info,byte *record,int inx);
+extern int heap_rlast(HP_INFO *info,byte *record,int inx);
extern void heap_clear(HP_INFO *info);
ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
diff --git a/mysql-test/r/heap_btree.result b/mysql-test/r/heap_btree.result
index 14c5f6d56f4..4e101229b0e 100644
--- a/mysql-test/r/heap_btree.result
+++ b/mysql-test/r/heap_btree.result
@@ -124,11 +124,11 @@ create table t1 (id int unsigned not null, primary key using BTREE (id)) type=H
insert into t1 values(1);
select max(id) from t1;
max(id)
-NULL
+1
insert into t1 values(2);
select max(id) from t1;
max(id)
-NULL
+2
replace into t1 values(1);
drop table t1;
create table t1 (n int) type=heap;
diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc
index 1abaa63de68..43485a97fe3 100644
--- a/sql/ha_heap.cc
+++ b/sql/ha_heap.cc
@@ -189,7 +189,7 @@ int ha_heap::index_prev(byte * buf)
int ha_heap::index_first(byte * buf)
{
statistic_increment(ha_read_first_count,&LOCK_status);
- int error=heap_rfirst(file, buf);
+ int error=heap_rfirst(file, buf, active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
return error;
}
@@ -197,7 +197,7 @@ int ha_heap::index_first(byte * buf)
int ha_heap::index_last(byte * buf)
{
statistic_increment(ha_read_last_count,&LOCK_status);
- int error=heap_rlast(file, buf);
+ int error=heap_rlast(file, buf, active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
return error;
}