Well how about we actually add the source?
This commit is contained in:
parent
3eeb040e4f
commit
1d45a6f294
110
boltprint.go
Normal file
110
boltprint.go
Normal file
@ -0,0 +1,110 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/boltdb/bolt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
args := os.Args[1:]
|
||||
if len(args) == 0 {
|
||||
fmt.Println("Usage: printbolt <Database File> [build]")
|
||||
os.Exit(1)
|
||||
}
|
||||
db, err := bolt.Open(args[0], 0600, nil)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
if len(args) > 1 {
|
||||
if args[1] == "gentest" {
|
||||
// createTestDatabase(db)
|
||||
} else if args[1] == "json" {
|
||||
jsonDatabase(db)
|
||||
}
|
||||
} else {
|
||||
printDatabase(db)
|
||||
}
|
||||
}
|
||||
|
||||
func printDatabase(db *bolt.DB) error {
|
||||
db.View(func(tx *bolt.Tx) error {
|
||||
tx.ForEach(func(nm []byte, b *bolt.Bucket) error {
|
||||
fmt.Printf("%s => \n", string(nm))
|
||||
printBucket(b, 0)
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func printBucket(b *bolt.Bucket, lvl int) {
|
||||
b.ForEach(func(k, v []byte) error {
|
||||
fmt.Printf("%s. %s => %s\n", strings.Repeat(".", lvl), k, v)
|
||||
if v == nil {
|
||||
printBucket(b.Bucket(k), lvl+1)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func jsonDatabase(db *bolt.DB) error {
|
||||
out := "{"
|
||||
db.View(func(tx *bolt.Tx) error {
|
||||
tx.ForEach(func(nm []byte, b *bolt.Bucket) error {
|
||||
bkt := jsonBucket(b)
|
||||
out = fmt.Sprintf("%s\"%s\":%s,", out, string(nm), bkt[:len(bkt)-1])
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
})
|
||||
out = fmt.Sprintf("%s}", out[:len(out)-1])
|
||||
fmt.Print(out)
|
||||
return nil
|
||||
}
|
||||
|
||||
func jsonBucket(b *bolt.Bucket) string {
|
||||
ret := "{"
|
||||
b.ForEach(func(k, v []byte) error {
|
||||
ret = fmt.Sprintf("%s\"%s\":", ret, string(k))
|
||||
if v == nil {
|
||||
ret = fmt.Sprintf("%s%s", ret, jsonBucket(b.Bucket(k)))
|
||||
} else {
|
||||
ret = fmt.Sprintf("%s\"%s\",", ret, string(v))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
ret = fmt.Sprintf("%s},", ret[:len(ret)-1])
|
||||
return ret
|
||||
}
|
||||
|
||||
func createTestDatabase(db *bolt.DB) error {
|
||||
fmt.Println("Generating Database")
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Printf("Creating Bucket %d & Values", i)
|
||||
db.Update(func(tx *bolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists([]byte(fmt.Sprintf("Bucket%d", i)))
|
||||
fmt.Print(".")
|
||||
ba, err := b.CreateBucketIfNotExists([]byte(fmt.Sprintf("Bucket%da", i)))
|
||||
bb, err := b.CreateBucketIfNotExists([]byte(fmt.Sprintf("Bucket%db", i)))
|
||||
for j := 0; j < 10; j++ {
|
||||
fmt.Print(".")
|
||||
b.Put([]byte(fmt.Sprintf("key%d", j)), []byte(fmt.Sprintf("value%d", j)))
|
||||
ba.Put([]byte(fmt.Sprintf("key%d", j)), []byte(fmt.Sprintf("value%d", j)))
|
||||
bb.Put([]byte(fmt.Sprintf("key%d", j)), []byte(fmt.Sprintf("value%d", j)))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
fmt.Printf("\n")
|
||||
}
|
||||
fmt.Print("\n")
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user