Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
dist: xenial
language: go
go:
- 1.11
Expand Down
37 changes: 28 additions & 9 deletions db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ func TestDBCRUD(t *testing.T) {

var (
givenKey = []byte("hello")
givenVal1 = []byte("world1")
givenVal2 = []byte("world2")
givenVal3 = []byte("world2")
givenVal1 = []byte("")
givenVal2 = []byte("world1")
wo = NewDefaultWriteOptions()
ro = NewDefaultReadOptions()
)
Expand All @@ -46,7 +45,7 @@ func TestDBCRUD(t *testing.T) {
v3, err := db.GetPinned(ro, givenKey)
defer v3.Destroy()
ensure.Nil(t, err)
ensure.DeepEqual(t, v3.Data(), givenVal3)
ensure.DeepEqual(t, v3.Data(), givenVal2)

// delete
ensure.Nil(t, db.Delete(wo, givenKey))
Expand All @@ -58,7 +57,7 @@ func TestDBCRUD(t *testing.T) {
v5, err := db.GetPinned(ro, givenKey)
defer v5.Destroy()
ensure.Nil(t, err)
ensure.Nil(t, v5.Data())
ensure.True(t, v5.Data() == nil)
}

func TestDBCRUDDBPaths(t *testing.T) {
Expand All @@ -75,33 +74,53 @@ func TestDBCRUDDBPaths(t *testing.T) {

var (
givenKey = []byte("hello")
givenVal1 = []byte("world1")
givenVal2 = []byte("world2")
givenVal1 = []byte("")
givenVal2 = []byte("world1")
givenVal3 = []byte("world2")
wo = NewDefaultWriteOptions()
ro = NewDefaultReadOptions()
)

// retrieve before create
noexist, err := db.Get(ro, givenKey)
defer noexist.Free()
ensure.Nil(t, err)
ensure.False(t, noexist.Exists())
ensure.DeepEqual(t, noexist.Data(), []byte(nil))

// create
ensure.Nil(t, db.Put(wo, givenKey, givenVal1))

// retrieve
v1, err := db.Get(ro, givenKey)
defer v1.Free()
ensure.Nil(t, err)
ensure.True(t, v1.Exists())
ensure.DeepEqual(t, v1.Data(), givenVal1)

// update
ensure.Nil(t, db.Put(wo, givenKey, givenVal2))
v2, err := db.Get(ro, givenKey)
defer v2.Free()
ensure.Nil(t, err)
ensure.True(t, v2.Exists())
ensure.DeepEqual(t, v2.Data(), givenVal2)

// update
ensure.Nil(t, db.Put(wo, givenKey, givenVal3))
v3, err := db.Get(ro, givenKey)
defer v3.Free()
ensure.Nil(t, err)
ensure.True(t, v3.Exists())
ensure.DeepEqual(t, v3.Data(), givenVal3)

// delete
ensure.Nil(t, db.Delete(wo, givenKey))
v3, err := db.Get(ro, givenKey)
v4, err := db.Get(ro, givenKey)
defer v4.Free()
ensure.Nil(t, err)
ensure.True(t, v3.Data() == nil)
ensure.False(t, v4.Exists())
ensure.DeepEqual(t, v4.Data(), []byte(nil))
}

func newTestDB(t *testing.T, name string, applyOpts func(opts *Options)) *DB {
Expand Down
2 changes: 1 addition & 1 deletion dynflag.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

package gorocksdb

// #cgo LDFLAGS: -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy
// #cgo LDFLAGS: -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -ldl
import "C"
8 changes: 7 additions & 1 deletion slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ func StringToSlice(data string) *Slice {
return NewSlice(C.CString(data), C.size_t(len(data)))
}

// Data returns the data of the slice.
// Data returns the data of the slice. If the key doesn't exist this will be a
// nil slice.
func (s *Slice) Data() []byte {
return charToByte(s.data, s.size)
}
Expand All @@ -42,6 +43,11 @@ func (s *Slice) Size() int {
return int(s.size)
}

// Exists returns if the key exists
func (s *Slice) Exists() bool {
return s.data != nil
}

// Free frees the slice data.
func (s *Slice) Free() {
if !s.freed {
Expand Down