Skip to content

Instantly share code, notes, and snippets.

@jcrubino
Created August 9, 2014 19:06
Show Gist options
  • Save jcrubino/2b17210d986ab2e223ee to your computer and use it in GitHub Desktop.
Save jcrubino/2b17210d986ab2e223ee to your computer and use it in GitHub Desktop.
package main
import "os"
import "log"
import "io/ioutil"
import "github.com/szferi/gomdb"
func Set_Key(key, value string) int {
path, err := ioutil.TempDir("/tmp", "mdb_test")
if err != nil {
log.Fatalf("failed to open temp dir")
}
err = os.MkdirAll(path, 0770)
if err != nil {
log.Fatalf("failed to create path %s", path)
}
env, err := mdb.NewEnv()
if err != nil {
log.Fatalf("failed create environment")
}
err = env.SetMapSize(1048576) // set to defualt
if err != nil {
log.Fatalf("Cannot set mapsize: %s", err)
}
err = env.Open(path, 0, 0664)
if err != nil {
log.Fatalf("failed to open environment: %s", err)
}
var txn *mdb.Txn
txn, err = env.BeginTxn(nil, 0)
if err != nil {
log.Fatalf("failed to being transaction: %s", err)
}
var dbi mdb.DBI
dbi, err = txn.DBIOpen(nil, 0)
if err != nil {
log.Fatalf("failed to open database: %s", err)
}
err = txn.Put(dbi, []byte(key), []byte(value), mdb.NOOVERWRITE)
if err != nil {
log.Fatalf("failed write to open database: %s", err)
}
err = txn.Commit()
if err != nil {
txn.Abort()
log.Fatalf("failed to commit: %s", err)
}
if env.Close() != nil {
log.Fatalf("failed to close environment")
}
return 0
}
func Get_Key(key string) int {
path, err := ioutil.TempDir("/tmp", "mdb_test")
if err != nil {
log.Fatalf("failed to open temp dir")
}
env, err := mdb.NewEnv()
if err != nil {
log.Fatalf("failed create environment")
}
err = env.SetMapSize(1048576) // set to default
if err != nil {
log.Fatalf("Cannot set mapsize: %s", err)
}
err = env.Open(path, 0, 0664)
if err != nil {
// docs state env needs to be closed on failure
env.Close()
log.Fatalf("failed to open environment: %s", err)
}
var txn *mdb.Txn
txn, err = env.BeginTxn(nil, 0)
if err != nil {
log.Fatalf("failed to being transaction: %s", err)
}
var dbi mdb.DBI
dbi, err = txn.DBIOpen(nil, 0)
if err != nil {
log.Fatalf("failed to open database: %s", err)
}
var resp []byte
resp, err = txn.Get(dbi, []byte(key))
if err != nil {
log.Fatalf("failed write to open database: %s", err)
} else {
log.Printf("Retrieved %s\nfor key: %s", key, string(resp))
}
err = txn.Commit()
if err != nil {
txn.Abort()
log.Fatalf("failed to commit: %s", err)
}
if env.Close() != nil {
log.Fatalf("failed to close environment")
}
return 0
}
func main() {
a := Set_Key("Key1", "Value1")
if a == 0 {
log.Println("Success: Set Key 1")
}
b := Get_Key("Key1")
if b == 0 {
log.Println("Success: Get 2")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment