diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-21 22:34:54 -0600 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-21 22:34:54 -0600 |
commit | 0e4d77d424b2f18c76da7643de88b462b86310f2 (patch) | |
tree | 3b2e834d1563bc2ce856f224973cc5d262a2a708 /cmd | |
parent | Add 'bolt keys'. (diff) | |
download | dedo-0e4d77d424b2f18c76da7643de88b462b86310f2.tar.gz dedo-0e4d77d424b2f18c76da7643de88b462b86310f2.tar.xz |
Add 'bolt pages'.
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/bolt/main.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cmd/bolt/main.go b/cmd/bolt/main.go index c29d5df..248884e 100644 --- a/cmd/bolt/main.go +++ b/cmd/bolt/main.go @@ -4,6 +4,7 @@ import ( "bytes" "log" "os" + "strconv" "github.com/boltdb/bolt" "github.com/codegangsta/cli" @@ -30,6 +31,11 @@ func NewApp() *cli.App { Usage: "retrieve a list of all keys in a bucket", Action: KeysCommand, }, + { + Name: "pages", + Usage: "dump page information for a database", + Action: PagesCommand, + }, } return app } @@ -108,6 +114,45 @@ func KeysCommand(c *cli.Context) { } } +// PagesCommand prints a list of all pages in a database. +func PagesCommand(c *cli.Context) { + path := c.Args().Get(0) + if _, err := os.Stat(path); os.IsNotExist(err) { + fatal(err) + return + } + + db, err := bolt.Open(path, 0600) + if err != nil { + fatal(err) + return + } + defer db.Close() + + logger.Println("ID TYPE ITEMS OVRFLW") + logger.Println("======== ========== ====== ======") + + db.Do(func(tx *bolt.Tx) error { + var id int + for { + p, err := tx.Page(id) + if err != nil { + fatalf("page error: %d: %s", id, err) + } else if p == nil { + break + } + + var overflow string + if p.OverflowCount > 0 { + overflow = strconv.Itoa(p.OverflowCount) + } + logger.Printf("%-8d %-10s %-6d %-6s", p.ID, p.Type, p.Count, overflow) + id += 1 + p.OverflowCount + } + return nil + }) +} + var logger = log.New(os.Stderr, "", 0) var logBuffer *bytes.Buffer |