github.com/hyperledger-gerrit-archive/fabric-ca@v2.0.0-alpha.0.20190916143245-4cd4192f0366+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/pkg/errors" 19 ) 20 21 // DB is interface that defines the functions on a database 22 type DB interface { 23 Connect() error 24 PingContext(ctx context.Context) error 25 Create() (*db.DB, error) 26 } 27 28 // New returns a DB interface for the request database type 29 func New( 30 dbType, 31 datasource, 32 caName string, 33 tlsConfig *tls.ClientTLSConfig, 34 csp bccsp.BCCSP, 35 metrics *db.Metrics, 36 ) (DB, error) { 37 switch dbType { 38 case "sqlite3": 39 return sqlite.NewDB(datasource, caName, metrics), nil 40 case "postgres": 41 return postgres.NewDB(datasource, caName, tlsConfig, metrics), nil 42 case "mysql": 43 return mysql.NewDB(datasource, caName, tlsConfig, csp, metrics), nil 44 default: 45 return nil, errors.Errorf("Invalid db.type in config file: '%s'; must be 'sqlite3', 'postgres', or 'mysql'", dbType) 46 } 47 }