Skip to content

Commit

Permalink
cursor seek wrongly seq'd to uninitialized return val, not arg
Browse files Browse the repository at this point in the history
also added initial cursor test case
fixes #5
  • Loading branch information
mschoch committed May 25, 2016
1 parent e92df1c commit 724857d
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 3 deletions.
2 changes: 1 addition & 1 deletion cursor.go
Expand Up @@ -54,7 +54,7 @@ func newCursor(reader *reader) *Cursor {
// Seek moves the cursor to the specified key
func (c *Cursor) Seek(seek []byte) (key []byte, value []byte) {
for i, cursor := range c.mutationsCursors {
c.key[i], c.val[i] = cursor.Seek(key)
c.key[i], c.val[i] = cursor.Seek(seek)
}
c.updateCurr()
for c.checkCurrDeleted() {
Expand Down
4 changes: 2 additions & 2 deletions cursor_merge.go
Expand Up @@ -55,10 +55,10 @@ func newMergeCursor(reader *reader) *mergeCursor {

func (c *mergeCursor) Seek(seek []byte) (key []byte, value []byte, deleted bool) {
for i, cursor := range c.mutationsCursors {
c.key[i], c.val[i] = cursor.Seek(key)
c.key[i], c.val[i] = cursor.Seek(seek)
}
for i, cursor := range c.deletionsCursors {
c.dkey[i], _ = cursor.Seek(key)
c.dkey[i], _ = cursor.Seek(seek)
}
c.updateCurr()
if c.currIsDel {
Expand Down
71 changes: 71 additions & 0 deletions cursor_test.go
@@ -0,0 +1,71 @@
// Copyright (c) 2016 Couchbase, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an "AS
// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language
// governing permissions and limitations under the License.

package cellar

import (
"os"
"testing"
)

func TestCellarCursorSimple(t *testing.T) {
defer os.RemoveAll("test")

c, err := Open("test", testOptionsNoAutoMerge)
if err != nil {
t.Fatal(err)
}
defer c.Close()

// let's write some data
err = c.Update(func(tx *Tx) error {
putKvPairs(tx, 0, 100)
return nil
})
if err != nil {
t.Fatal(err)
}

// lets try a cursor
err = c.View(func(tx *Tx) error {
c := tx.Cursor()

k, _ := c.Next()
if k != nil {
t.Errorf("next on cursor before positioning expects nil, got key %s", string(k))
}

// seek to beginning
k, _ = c.Seek([]byte(""))
if string(k) != "k0000000000000000" {
t.Errorf("expected to see key 'k0000000000000000' got %s", string(k))
}

// seek further ahead
k, _ = c.Seek([]byte("k0000000000000004"))
if string(k) != "k0000000000000004" {
t.Errorf("expected to see key 'k0000000000000004' got %s", string(k))
}

// next after seq
k, _ = c.Next()
if string(k) != "k0000000000000005" {
t.Errorf("expected to see key 'k0000000000000005' got %s", string(k))
}

return nil
})
if err != nil {
t.Fatal(err)
}

}

0 comments on commit 724857d

Please sign in to comment.