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  }