mirror of
https://github.com/FlipsideCrypto/dcrd.git
synced 2026-02-06 10:56:47 +00:00
This modifies all packages within the repository to the use the Decred fork of btclog which has been renamed to slog and updates the dependency files accordingly.
91 lines
3.0 KiB
Go
91 lines
3.0 KiB
Go
// Copyright (c) 2015-2016 The btcsuite developers
|
|
// Copyright (c) 2016-2018 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package database
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/decred/slog"
|
|
)
|
|
|
|
// Driver defines a structure for backend drivers to use when they register
|
|
// themselves as a backend which implements the DB interface.
|
|
type Driver struct {
|
|
// DbType is the identifier used to uniquely identify a specific
|
|
// database driver. There can be only one driver with the same name.
|
|
DbType string
|
|
|
|
// Create is the function that will be invoked with all user-specified
|
|
// arguments to create the database. This function must return
|
|
// ErrDbExists if the database already exists.
|
|
Create func(args ...interface{}) (DB, error)
|
|
|
|
// Open is the function that will be invoked with all user-specified
|
|
// arguments to open the database. This function must return
|
|
// ErrDbDoesNotExist if the database has not already been created.
|
|
Open func(args ...interface{}) (DB, error)
|
|
|
|
// UseLogger uses a specified Logger to output package logging info.
|
|
UseLogger func(logger slog.Logger)
|
|
}
|
|
|
|
// driverList holds all of the registered database backends.
|
|
var drivers = make(map[string]*Driver)
|
|
|
|
// RegisterDriver adds a backend database driver to available interfaces.
|
|
// ErrDbTypeRegistered will be retruned if the database type for the driver has
|
|
// already been registered.
|
|
func RegisterDriver(driver Driver) error {
|
|
if _, exists := drivers[driver.DbType]; exists {
|
|
str := fmt.Sprintf("driver %q is already registered",
|
|
driver.DbType)
|
|
return makeError(ErrDbTypeRegistered, str, nil)
|
|
}
|
|
|
|
drivers[driver.DbType] = &driver
|
|
return nil
|
|
}
|
|
|
|
// SupportedDrivers returns a slice of strings that represent the database
|
|
// drivers that have been registered and are therefore supported.
|
|
func SupportedDrivers() []string {
|
|
supportedDBs := make([]string, 0, len(drivers))
|
|
for _, drv := range drivers {
|
|
supportedDBs = append(supportedDBs, drv.DbType)
|
|
}
|
|
return supportedDBs
|
|
}
|
|
|
|
// Create initializes and opens a database for the specified type. The
|
|
// arguments are specific to the database type driver. See the documentation
|
|
// for the database driver for further details.
|
|
//
|
|
// ErrDbUnknownType will be returned if the the database type is not registered.
|
|
func Create(dbType string, args ...interface{}) (DB, error) {
|
|
drv, exists := drivers[dbType]
|
|
if !exists {
|
|
str := fmt.Sprintf("driver %q is not registered", dbType)
|
|
return nil, makeError(ErrDbUnknownType, str, nil)
|
|
}
|
|
|
|
return drv.Create(args...)
|
|
}
|
|
|
|
// Open opens an existing database for the specified type. The arguments are
|
|
// specific to the database type driver. See the documentation for the database
|
|
// driver for further details.
|
|
//
|
|
// ErrDbUnknownType will be returned if the the database type is not registered.
|
|
func Open(dbType string, args ...interface{}) (DB, error) {
|
|
drv, exists := drivers[dbType]
|
|
if !exists {
|
|
str := fmt.Sprintf("driver %q is not registered", dbType)
|
|
return nil, makeError(ErrDbUnknownType, str, nil)
|
|
}
|
|
|
|
return drv.Open(args...)
|
|
}
|