Skip to content
This repository has been archived by the owner on Jun 15, 2022. It is now read-only.

Commit

Permalink
Add Rename function
Browse files Browse the repository at this point in the history
Rename function is added. Usage added to pkg/main.go and README

Signed-off-by: Gökhan Özeloğlu <gozeloglu@gmail.com>
  • Loading branch information
gozeloglu committed Oct 28, 2021
1 parent 3cbae96 commit adaf5b9
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ func main() {
exist = db.Exists("jack")
fmt.Println(exist)

ok, err := db.Rename("john", "john john")
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("key name changed: %v1\n", ok)

err = db.Close() // Call while closing the database.
if err != nil {
log.Fatalf(err.Error())
Expand Down
6 changes: 6 additions & 0 deletions example/pkg/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ func main() {
exist = db.Exists("jack")
fmt.Println(exist)

ok, err := db.Rename("john", "john john")
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("key name changed: %v1\n", ok)

err = db.Close()
if err != nil {
log.Fatalf(err.Error())
Expand Down
18 changes: 18 additions & 0 deletions rename.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kvs

import "errors"

// Rename changes the name of the key. It deletes the old key-value pair. If the
// new key already exists, renaming cannot be done.
func (k *Kvs) Rename(key string, newKey string) (bool, error) {
k.mu.Lock()
defer k.mu.Unlock()

if k.Exists(newKey) {
return false, errors.New("new key is already exists")
}

k.kv[newKey] = k.kv[key]
k.Del(key)
return true, nil
}
89 changes: 89 additions & 0 deletions rename_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package kvs

import (
"os"
"testing"
"time"
)

func TestKvs_Rename(t *testing.T) {
db, err := open(t.Name(), "", 2*time.Minute)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db created.")

k, v := "foo", "bar"
db.Set(k, v)
t.Logf("Key-value pair is set.")
t.Logf("%s: %s", k, v)

ok, err := db.Rename(k, k+k)
if err != nil {
t.Errorf(err.Error())
}
if !ok {
t.Errorf("key didn't change")
} else {
t.Logf("key renamed.")
}

val := db.Get(k)
if val != "" {
t.Errorf("%s-%s pair is still exits.", k, val)
}
t.Logf("%s-%s", k, val)

val = db.Get(k + k)
if val != v {
t.Errorf("expected %s-%s pair, but got %s-%s", k+k, v, k+k, val)
}
t.Logf("%s-%s", k+k, val)

err = db.Close()
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db closed.")

err = os.RemoveAll(db.dir)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("temp db removed.")
}

func TestKvs_RenameExistsNewKey(t *testing.T) {
db, err := open(t.Name(), "", 2*time.Minute)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db created.")

k, v := "foo", "bar"
db.Set(k, v)
t.Logf("Key-value pair is set.")
t.Logf("%s: %s", k, v)

ok, err := db.Rename(k, k)
if !ok {
t.Logf("key didn't change")
}

val := db.Get(k)
if val != v {
t.Errorf("%s-%s pair is wrong.", k, val)
}

err = db.Close()
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db closed.")

err = os.RemoveAll(db.dir)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("temp db removed.")
}

0 comments on commit adaf5b9

Please sign in to comment.