2015-10-22 12:31:02 -07:00
|
|
|
package db
|
|
|
|
|
2018-09-20 13:53:25 +08:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
)
|
2017-12-12 14:00:03 -08:00
|
|
|
|
2017-12-28 18:30:56 -08:00
|
|
|
//----------------------------------------
|
2017-11-09 17:42:32 -05:00
|
|
|
// Main entry
|
2015-10-22 12:31:02 -07:00
|
|
|
|
2018-02-02 22:31:17 -05:00
|
|
|
type DBBackendType string
|
2018-01-24 15:55:31 -08:00
|
|
|
|
2016-11-30 20:15:29 -08:00
|
|
|
const (
|
2018-02-02 22:31:17 -05:00
|
|
|
LevelDBBackend DBBackendType = "leveldb" // legacy, defaults to goleveldb unless +gcc
|
|
|
|
CLevelDBBackend DBBackendType = "cleveldb"
|
|
|
|
GoLevelDBBackend DBBackendType = "goleveldb"
|
|
|
|
MemDBBackend DBBackendType = "memdb"
|
|
|
|
FSDBBackend DBBackendType = "fsdb" // using the filesystem naively
|
2016-11-30 20:15:29 -08:00
|
|
|
)
|
|
|
|
|
|
|
|
type dbCreator func(name string, dir string) (DB, error)
|
|
|
|
|
2018-02-02 22:31:17 -05:00
|
|
|
var backends = map[DBBackendType]dbCreator{}
|
2016-11-30 20:15:29 -08:00
|
|
|
|
2018-02-02 22:31:17 -05:00
|
|
|
func registerDBCreator(backend DBBackendType, creator dbCreator, force bool) {
|
2016-11-30 20:15:29 -08:00
|
|
|
_, ok := backends[backend]
|
|
|
|
if !force && ok {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
backends[backend] = creator
|
|
|
|
}
|
2015-10-22 12:31:02 -07:00
|
|
|
|
2018-02-02 22:31:17 -05:00
|
|
|
func NewDB(name string, backend DBBackendType, dir string) DB {
|
2018-09-20 13:53:25 +08:00
|
|
|
dbCreator, ok := backends[backend]
|
|
|
|
|
|
|
|
if !ok {
|
|
|
|
var keys []string
|
|
|
|
for k, _ := range backends {
|
|
|
|
keys = append(keys, string(k))
|
|
|
|
}
|
|
|
|
panic(fmt.Sprintf("Unknown db_backend %s, expected either %s", backend, strings.Join(keys, " or ")))
|
|
|
|
}
|
|
|
|
|
|
|
|
db, err := dbCreator(name, dir)
|
|
|
|
|
2016-11-30 20:15:29 -08:00
|
|
|
if err != nil {
|
2017-12-12 14:00:03 -08:00
|
|
|
panic(fmt.Sprintf("Error initializing DB: %v", err))
|
2015-10-22 12:31:02 -07:00
|
|
|
}
|
2016-11-30 20:15:29 -08:00
|
|
|
return db
|
2015-10-22 12:31:02 -07:00
|
|
|
}
|