github.com/bcskill/bcschain/v3@v3.4.9-beta2/cmd/gochain-ethdb/keys.go (about) 1 package main 2 3 import ( 4 "errors" 5 "flag" 6 "fmt" 7 8 "github.com/bcskill/bcschain/v3/ethdb" 9 ) 10 11 type KeysCommand struct{} 12 13 func NewKeysCommand() *KeysCommand { 14 return &KeysCommand{} 15 } 16 17 func (cmd *KeysCommand) Run(args []string) error { 18 fs := flag.NewFlagSet("gochain-ethdb-keys", flag.ContinueOnError) 19 tableName := fs.String("table", "", "table name") 20 if err := fs.Parse(args); err != nil { 21 return err 22 } else if fs.NArg() == 0 { 23 return errors.New("path required") 24 } else if *tableName == "" { 25 return errors.New("table name required") 26 } 27 28 // Open db. 29 db := ethdb.NewDB(fs.Arg(0)) 30 db.MinCompactionAge = 0 31 if err := db.Open(); err != nil { 32 return err 33 } 34 defer db.Close() 35 36 // Open table. 37 tbl := db.Table(*tableName) 38 if tbl == nil { 39 return fmt.Errorf("unknown table name: %q", *tableName) 40 } 41 42 // Iterate over all segments 43 segments := tbl.SegmentSlice() 44 for _, segment := range segments { 45 itr := segment.Iterator() 46 for itr.Next() { 47 fmt.Printf("%x\t%d\n", itr.Key(), len(itr.Value())) 48 } 49 itr.Close() 50 } 51 52 return nil 53 }