Fixes For Issue #16
This commit is contained in:
parent
306fbb4209
commit
eb589791cd
2 changed files with 69 additions and 10 deletions
70
unqlite.go
70
unqlite.go
|
@ -82,9 +82,19 @@ func (db *Database) Close() (err error) {
|
||||||
|
|
||||||
// Store ...
|
// Store ...
|
||||||
func (db *Database) Store(key, value []byte) (err error) {
|
func (db *Database) Store(key, value []byte) (err error) {
|
||||||
|
var k, v unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(value) > 0 {
|
||||||
|
v = unsafe.Pointer(&value[0])
|
||||||
|
}
|
||||||
|
|
||||||
res := C.unqlite_kv_store(db.handle,
|
res := C.unqlite_kv_store(db.handle,
|
||||||
unsafe.Pointer(&key[0]), C.int(len(key)),
|
k, C.int(len(key)),
|
||||||
unsafe.Pointer(&value[0]), C.unqlite_int64(len(value)))
|
v, C.unqlite_int64(len(value)))
|
||||||
if res == C.UNQLITE_OK {
|
if res == C.UNQLITE_OK {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -93,9 +103,19 @@ func (db *Database) Store(key, value []byte) (err error) {
|
||||||
|
|
||||||
// Append ...
|
// Append ...
|
||||||
func (db *Database) Append(key, value []byte) (err error) {
|
func (db *Database) Append(key, value []byte) (err error) {
|
||||||
|
var k, v unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(value) > 0 {
|
||||||
|
v = unsafe.Pointer(&value[0])
|
||||||
|
}
|
||||||
|
|
||||||
res := C.unqlite_kv_append(db.handle,
|
res := C.unqlite_kv_append(db.handle,
|
||||||
unsafe.Pointer(&key[0]), C.int(len(key)),
|
k, C.int(len(key)),
|
||||||
unsafe.Pointer(&value[0]), C.unqlite_int64(len(value)))
|
v, C.unqlite_int64(len(value)))
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
@ -104,14 +124,20 @@ func (db *Database) Append(key, value []byte) (err error) {
|
||||||
|
|
||||||
// Fetch ...
|
// Fetch ...
|
||||||
func (db *Database) Fetch(key []byte) (value []byte, err error) {
|
func (db *Database) Fetch(key []byte) (value []byte, err error) {
|
||||||
|
var k unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
var n C.unqlite_int64
|
var n C.unqlite_int64
|
||||||
res := C.unqlite_kv_fetch(db.handle, unsafe.Pointer(&key[0]), C.int(len(key)), nil, &n)
|
res := C.unqlite_kv_fetch(db.handle, k, C.int(len(key)), nil, &n)
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
value = make([]byte, int(n))
|
value = make([]byte, int(n))
|
||||||
res = C.unqlite_kv_fetch(db.handle, unsafe.Pointer(&key[0]), C.int(len(key)), unsafe.Pointer(&value[0]), &n)
|
res = C.unqlite_kv_fetch(db.handle, k, C.int(len(key)), unsafe.Pointer(&value[0]), &n)
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
@ -120,7 +146,13 @@ func (db *Database) Fetch(key []byte) (value []byte, err error) {
|
||||||
|
|
||||||
// Delete ...
|
// Delete ...
|
||||||
func (db *Database) Delete(key []byte) (err error) {
|
func (db *Database) Delete(key []byte) (err error) {
|
||||||
res := C.unqlite_kv_delete(db.handle, unsafe.Pointer(&key[0]), C.int(len(key)))
|
var k unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
res := C.unqlite_kv_delete(db.handle, k, C.int(len(key)))
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
@ -179,7 +211,13 @@ func (curs *Cursor) Close() (err error) {
|
||||||
|
|
||||||
// Seek ...
|
// Seek ...
|
||||||
func (curs *Cursor) Seek(key []byte) (err error) {
|
func (curs *Cursor) Seek(key []byte) (err error) {
|
||||||
res := C.unqlite_kv_cursor_seek(curs.handle, unsafe.Pointer(&key[0]), C.int(len(key)), C.UNQLITE_CURSOR_MATCH_EXACT)
|
var k unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
res := C.unqlite_kv_cursor_seek(curs.handle, k, C.int(len(key)), C.UNQLITE_CURSOR_MATCH_EXACT)
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
@ -188,7 +226,13 @@ func (curs *Cursor) Seek(key []byte) (err error) {
|
||||||
|
|
||||||
// SeekLE ...
|
// SeekLE ...
|
||||||
func (curs *Cursor) SeekLE(key []byte) (err error) {
|
func (curs *Cursor) SeekLE(key []byte) (err error) {
|
||||||
res := C.unqlite_kv_cursor_seek(curs.handle, unsafe.Pointer(&key[0]), C.int(len(key)), C.UNQLITE_CURSOR_MATCH_LE)
|
var k unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
res := C.unqlite_kv_cursor_seek(curs.handle, k, C.int(len(key)), C.UNQLITE_CURSOR_MATCH_LE)
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
@ -197,7 +241,13 @@ func (curs *Cursor) SeekLE(key []byte) (err error) {
|
||||||
|
|
||||||
// SeekGE ...
|
// SeekGE ...
|
||||||
func (curs *Cursor) SeekGE(key []byte) (err error) {
|
func (curs *Cursor) SeekGE(key []byte) (err error) {
|
||||||
res := C.unqlite_kv_cursor_seek(curs.handle, unsafe.Pointer(&key[0]), C.int(len(key)), C.UNQLITE_CURSOR_MATCH_GE)
|
var k unsafe.Pointer
|
||||||
|
|
||||||
|
if len(key) > 0 {
|
||||||
|
k = unsafe.Pointer(&key[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
res := C.unqlite_kv_cursor_seek(curs.handle, k, C.int(len(key)), C.UNQLITE_CURSOR_MATCH_GE)
|
||||||
if res != C.UNQLITE_OK {
|
if res != C.UNQLITE_OK {
|
||||||
err = UnQLiteError(res)
|
err = UnQLiteError(res)
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,11 +54,20 @@ func Testモジュール(t *testing.T) {
|
||||||
err := db.Store([]byte("sample"), src)
|
err := db.Store([]byte("sample"), src)
|
||||||
Expect(err).To(NotExist)
|
Expect(err).To(NotExist)
|
||||||
})
|
})
|
||||||
|
It("Database.Store.ZeroByte", func() {
|
||||||
|
err := db.Store([]byte{}, src)
|
||||||
|
Expect(err).To(Exist)
|
||||||
|
})
|
||||||
It("Database.Fetch", func() {
|
It("Database.Fetch", func() {
|
||||||
dst, err := db.Fetch([]byte("sample"))
|
dst, err := db.Fetch([]byte("sample"))
|
||||||
Expect(err).To(NotExist)
|
Expect(err).To(NotExist)
|
||||||
Expect(bytes.Compare(src, dst)).To(Equal, 0)
|
Expect(bytes.Compare(src, dst)).To(Equal, 0)
|
||||||
})
|
})
|
||||||
|
It("Database.Fetch.ZeroByte", func() {
|
||||||
|
value, err := db.Fetch([]byte{})
|
||||||
|
Expect(err).To(Exist)
|
||||||
|
Expect(value).To(NotExist)
|
||||||
|
})
|
||||||
It("Database.Append", func() {
|
It("Database.Append", func() {
|
||||||
err1 := db.Append([]byte("sample"), []byte(" append"))
|
err1 := db.Append([]byte("sample"), []byte(" append"))
|
||||||
Expect(err1).To(NotExist)
|
Expect(err1).To(NotExist)
|
||||||
|
|
Loading…
Reference in a new issue