github.com/tendermint/tmlibs@v0.9.0/db/db.go (about)

     1  package db
     2  
     3  import "fmt"
     4  
     5  //----------------------------------------
     6  // Main entry
     7  
     8  type DBBackendType string
     9  
    10  const (
    11  	LevelDBBackend   DBBackendType = "leveldb" // legacy, defaults to goleveldb unless +gcc
    12  	CLevelDBBackend  DBBackendType = "cleveldb"
    13  	GoLevelDBBackend DBBackendType = "goleveldb"
    14  	MemDBBackend     DBBackendType = "memdb"
    15  	FSDBBackend      DBBackendType = "fsdb" // using the filesystem naively
    16  )
    17  
    18  type dbCreator func(name string, dir string) (DB, error)
    19  
    20  var backends = map[DBBackendType]dbCreator{}
    21  
    22  func registerDBCreator(backend DBBackendType, creator dbCreator, force bool) {
    23  	_, ok := backends[backend]
    24  	if !force && ok {
    25  		return
    26  	}
    27  	backends[backend] = creator
    28  }
    29  
    30  func NewDB(name string, backend DBBackendType, dir string) DB {
    31  	db, err := backends[backend](name, dir)
    32  	if err != nil {
    33  		panic(fmt.Sprintf("Error initializing DB: %v", err))
    34  	}
    35  	return db
    36  }