From 014684fd5bee653ace75ff6d2d00b317e52a543a Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Tue, 25 Jun 2019 13:40:55 +0200 Subject: [PATCH 1/3] Add some helpers for Slice usage --- db_test.go | 37 ++++++++++++++++++++++++++++--------- slice.go | 8 +++++++- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/db_test.go b/db_test.go index 3c0df0a1..4ccc7aa8 100644 --- a/db_test.go +++ b/db_test.go @@ -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() ) @@ -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)) @@ -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) { @@ -75,12 +74,20 @@ 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)) @@ -88,6 +95,7 @@ func TestDBCRUDDBPaths(t *testing.T) { 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 @@ -95,13 +103,24 @@ func TestDBCRUDDBPaths(t *testing.T) { 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 { diff --git a/slice.go b/slice.go index bcdc4c16..b450daa3 100644 --- a/slice.go +++ b/slice.go @@ -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) } @@ -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 { From 972a7642772c3b945969464fd9f6ec88f86863b8 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Tue, 25 Jun 2019 13:43:22 +0200 Subject: [PATCH 2/3] Use xenial for travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 79a7bb6c..e22ede6b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +dist: xenial language: go go: - 1.11 From a72a84b502db7fbe63a08a41bc3f713eaf13aea3 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Tue, 25 Jun 2019 13:46:59 +0200 Subject: [PATCH 3/3] Add -ldl needed apparently --- dynflag.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynflag.go b/dynflag.go index 81909317..501a4dd7 100644 --- a/dynflag.go +++ b/dynflag.go @@ -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"