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  }