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  }