Skip to content

Commit 24aecb0

Browse files
committed
merge Key() and Value() methods into Node() method.
1 parent bcd8333 commit 24aecb0

File tree

2 files changed

+35
-52
lines changed

2 files changed

+35
-52
lines changed

iterator.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import (
88
"github.com/rosedblabs/rosedb/v2/index"
99
)
1010

11+
// Item represents a key-value pair in the database.
12+
type Item struct {
13+
Key []byte
14+
Value []byte
15+
}
16+
1117
// Iterator represents a database-level iterator that provides methods to traverse over the key/value pairs in the database.
1218
// It wraps the index iterator and adds functionality to retrieve the actual values from the database.
1319
type Iterator struct {
@@ -37,7 +43,6 @@ func (it *Iterator) Rewind() {
3743
return
3844
}
3945
it.indexIter.Rewind()
40-
_ = it.skipToNext()
4146
}
4247

4348
// Seek positions the iterator at a specific key in the database.
@@ -47,7 +52,6 @@ func (it *Iterator) Seek(key []byte) {
4752
return
4853
}
4954
it.indexIter.Seek(key)
50-
_ = it.skipToNext()
5155
}
5256

5357
// Next advances the iterator to the next valid entry in the database.
@@ -67,28 +71,19 @@ func (it *Iterator) Valid() bool {
6771
return it.indexIter.Valid()
6872
}
6973

70-
// Key retrieves the key at the current iterator position.
71-
func (it *Iterator) Key() []byte {
74+
// Item retrieves the current key-value pair as an Item.
75+
func (it *Iterator) Item() *Item {
7276
if it.db == nil || it.indexIter == nil || !it.Valid() {
7377
return nil
7478
}
7579
record := it.skipToNext()
7680
if record == nil {
7781
return nil
7882
}
79-
return record.Key
80-
}
81-
82-
// Value retrieves the value associated with the current key in the iterator.
83-
func (it *Iterator) Value() []byte {
84-
if it.db == nil || it.indexIter == nil || !it.Valid() {
85-
return nil
86-
}
87-
record := it.skipToNext()
88-
if record == nil {
89-
return nil
83+
return &Item{
84+
Key: record.Key,
85+
Value: record.Value,
9086
}
91-
return record.Value
9287
}
9388

9489
// Close releases all resources associated with the iterator.

iterator_test.go

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,10 @@ func TestIterator_Basic(t *testing.T) {
4747
iter = db.NewIterator(iteratorOptions)
4848
i := 0
4949
for iter.Rewind(); iter.Valid(); iter.Next() {
50-
key := iter.Key()
51-
assert.NotNil(t, key)
52-
assert.True(t, bytes.Equal(key, keys[i]))
53-
val := iter.Value()
54-
assert.NotNil(t, val)
55-
assert.True(t, bytes.Equal(val, values[i]))
50+
item := iter.Item()
51+
assert.NotNil(t, item)
52+
assert.True(t, bytes.Equal(item.Key, keys[i]))
53+
assert.True(t, bytes.Equal(item.Value, values[i]))
5654
i++
5755
}
5856
assert.Equal(t, len(keys), i)
@@ -64,12 +62,10 @@ func TestIterator_Basic(t *testing.T) {
6462

6563
i = len(keys) - 1
6664
for iter.Rewind(); iter.Valid(); iter.Next() {
67-
key := iter.Key()
68-
assert.NotNil(t, key)
69-
assert.True(t, bytes.Equal(key, keys[i]))
70-
val := iter.Value()
71-
assert.Nil(t, err)
72-
assert.True(t, bytes.Equal(val, values[i]))
65+
item := iter.Item()
66+
assert.NotNil(t, item)
67+
assert.True(t, bytes.Equal(item.Key, keys[i]))
68+
assert.True(t, bytes.Equal(item.Value, values[i]))
7369
i--
7470
}
7571
assert.Equal(t, -1, i)
@@ -109,12 +105,10 @@ func TestIterator_Seek(t *testing.T) {
109105

110106
iter.Seek([]byte("key3"))
111107
assert.True(t, iter.Valid())
112-
key := iter.Key()
113-
assert.NotNil(t, key)
114-
assert.True(t, bytes.Equal(key, []byte("key3")))
115-
val := iter.Value()
116-
assert.NotNil(t, val)
117-
assert.True(t, bytes.Equal(val, []byte("value3")))
108+
item := iter.Item()
109+
assert.NotNil(t, item)
110+
assert.True(t, bytes.Equal(item.Key, []byte("key3")))
111+
assert.True(t, bytes.Equal(item.Value, []byte("value3")))
118112
iter.Close()
119113

120114
// Test seek in descending order
@@ -123,12 +117,10 @@ func TestIterator_Seek(t *testing.T) {
123117

124118
iter.Seek([]byte("key3"))
125119
assert.True(t, iter.Valid())
126-
key = iter.Key()
127-
assert.NotNil(t, key)
128-
assert.True(t, bytes.Equal(key, []byte("key3")))
129-
val = iter.Value()
130-
assert.NotNil(t, val)
131-
assert.True(t, bytes.Equal(val, []byte("value3")))
120+
item = iter.Item()
121+
assert.NotNil(t, item)
122+
assert.True(t, bytes.Equal(item.Key, []byte("key3")))
123+
assert.True(t, bytes.Equal(item.Value, []byte("value3")))
132124
iter.Close()
133125
}
134126

@@ -168,12 +160,10 @@ func TestIterator_Prefix(t *testing.T) {
168160
expectedValues := [][]byte{[]byte("value3"), []byte("value4")}
169161
i := 0
170162
for iter.Rewind(); iter.Valid(); iter.Next() {
171-
key := iter.Key()
172-
assert.NotNil(t, key)
173-
assert.True(t, bytes.Equal(key, expectedKeys[i]))
174-
val := iter.Value()
175-
assert.NotNil(t, val)
176-
assert.True(t, bytes.Equal(val, expectedValues[i]))
163+
item := iter.Item()
164+
assert.NotNil(t, item)
165+
assert.True(t, bytes.Equal(item.Key, expectedKeys[i]))
166+
assert.True(t, bytes.Equal(item.Value, expectedValues[i]))
177167
i++
178168
}
179169
assert.Equal(t, len(expectedKeys), i)
@@ -201,12 +191,10 @@ func TestIterator_Expired(t *testing.T) {
201191

202192
iter.Rewind()
203193
assert.True(t, iter.Valid())
204-
key := iter.Key()
205-
assert.NotNil(t, key)
206-
assert.True(t, bytes.Equal(key, []byte("key2")))
207-
val := iter.Value()
208-
assert.NotNil(t, val)
209-
assert.True(t, bytes.Equal(val, []byte("value2")))
194+
item := iter.Item()
195+
assert.NotNil(t, item)
196+
assert.True(t, bytes.Equal(item.Key, []byte("key2")))
197+
assert.True(t, bytes.Equal(item.Value, []byte("value2")))
210198
iter.Next()
211199
assert.False(t, iter.Valid())
212200
iter.Close()

0 commit comments

Comments
 (0)