github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/cmd/fbchaind/base/db.go (about)

     1  package base
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
     8  )
     9  
    10  const (
    11  	AppDBName = "application.db"
    12  )
    13  
    14  func OpenDB(dir string, backend dbm.BackendType) (db dbm.DB, err error) {
    15  	switch {
    16  	case strings.HasSuffix(dir, ".db"):
    17  		dir = dir[:len(dir)-3]
    18  	case strings.HasSuffix(dir, ".db/"):
    19  		dir = dir[:len(dir)-4]
    20  	default:
    21  		return nil, fmt.Errorf("database directory must end with .db")
    22  	}
    23  	//doesn't work on windows!
    24  	cut := strings.LastIndex(dir, "/")
    25  	if cut == -1 {
    26  		return nil, fmt.Errorf("cannot cut paths on %s", dir)
    27  	}
    28  	defer func() {
    29  		if r := recover(); r != nil {
    30  			err = fmt.Errorf("couldn't create db: %v", r)
    31  		}
    32  	}()
    33  	name := dir[cut+1:]
    34  	db = dbm.NewDB(name, backend, dir[:cut])
    35  	return db, nil
    36  }