diff options
-rw-r--r-- | heap/hp_rfirst.c | 4 | ||||
-rw-r--r-- | heap/hp_rlast.c | 9 | ||||
-rw-r--r-- | heap/hp_test2.c | 4 | ||||
-rw-r--r-- | include/heap.h | 4 | ||||
-rw-r--r-- | mysql-test/r/heap_btree.result | 4 | ||||
-rw-r--r-- | sql/ha_heap.cc | 4 |
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; } |