github.com/extrame/fabric-ca@v2.0.0-alpha+incompatible/lib/server/db/factory/factory.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package factory 8 9 import ( 10 "context" 11 12 "github.com/hyperledger/fabric-ca/lib/server/db" 13 "github.com/hyperledger/fabric-ca/lib/server/db/mysql" 14 "github.com/hyperledger/fabric-ca/lib/server/db/postgres" 15 "github.com/hyperledger/fabric-ca/lib/server/db/sqlite" 16 "github.com/hyperledger/fabric-ca/lib/tls" 17 "github.com/hyperledger/fabric/bccsp" 18 "github.com/hyperledger/fabric/common/metrics" 19 "github.com/pkg/errors" 20 ) 21 22 // DB is interface that defines the functions on a database 23 type DB interface { 24 Connect() error 25 PingContext(ctx context.Context) error 26 Create() (*db.DB, error) 27 } 28 29 // New returns a DB interface for the request database type 30 func New(dbType, datasource, caName string, tlsConfig *tls.ClientTLSConfig, csp bccsp.BCCSP, metricsProvider metrics.Provider) (DB, error) { 31 switch dbType { 32 case "sqlite3": 33 return sqlite.NewDB(datasource, caName, metricsProvider), nil 34 case "postgres": 35 return postgres.NewDB(datasource, caName, tlsConfig, metricsProvider), nil 36 case "mysql": 37 return mysql.NewDB(datasource, caName, tlsConfig, csp, metricsProvider), nil 38 default: 39 return nil, errors.Errorf("Invalid db.type in config file: '%s'; must be 'sqlite3', 'postgres', or 'mysql'", dbType) 40 } 41 }