MCPcopy Create free account
hub / github.com/bytebase/bytebase / Open

Method Open

backend/plugin/db/redshift/redshift.go:70–132  ·  view source on GitHub ↗

Open opens a Postgres driver.

(_ context.Context, _ storepb.Engine, config db.ConnectionConfig)

Source from the content-addressed store, hash-verified

68
69// Open opens a Postgres driver.
70func (d *Driver) Open(_ context.Context, _ storepb.Engine, config db.ConnectionConfig) (db.Driver, error) {
71 if config.DataSource.Username == "" {
72 return nil, errors.Errorf("user must be set")
73 }
74
75 if (config.DataSource.GetSslCert() == "" && config.DataSource.GetSslKey() != "") ||
76 (config.DataSource.GetSslCert() != "" && config.DataSource.GetSslKey() == "") {
77 return nil, errors.Errorf("ssl-cert and ssl-key must be both set or unset")
78 }
79
80 pgxConnConfig, err := pgx.ParseConfig(fmt.Sprintf("host=%s port=%s", config.DataSource.Host, config.DataSource.Port))
81 if err != nil {
82 return nil, err
83 }
84 pgxConnConfig.User = config.DataSource.Username
85 pgxConnConfig.Password = config.Password
86 if config.ConnectionContext.DatabaseName != "" {
87 pgxConnConfig.Database = config.ConnectionContext.DatabaseName
88 } else if config.DataSource.GetDatabase() != "" {
89 pgxConnConfig.Database = config.DataSource.GetDatabase()
90 } else {
91 pgxConnConfig.Database = "dev"
92 }
93
94 if config.DataSource.GetSslCert() != "" {
95 tlscfg, err := util.GetTLSConfig(config.DataSource)
96 if err != nil {
97 return nil, err
98 }
99 pgxConnConfig.TLSConfig = tlscfg
100 }
101 if config.DataSource.GetSshHost() != "" {
102 sshClient, err := util.GetSSHClient(config.DataSource)
103 if err != nil {
104 return nil, err
105 }
106 d.sshClient = sshClient
107
108 pgxConnConfig.DialFunc = func(_ context.Context, network, addr string) (net.Conn, error) {
109 conn, err := sshClient.Dial(network, addr)
110 if err != nil {
111 return nil, err
112 }
113 return &util.NoDeadlineConn{Conn: conn}, nil
114 }
115 }
116 d.databaseName = config.ConnectionContext.DatabaseName
117 d.datashare = config.ConnectionContext.DataShare
118 d.config = config
119
120 // Datashare doesn't support read-only transactions.
121 if config.ConnectionContext.ReadOnly && !d.datashare {
122 pgxConnConfig.RuntimeParams["default_transaction_read_only"] = "true"
123 }
124
125 d.connectionString = stdlib.RegisterConnConfig(pgxConnConfig)
126 db, err := sql.Open(driverName, d.connectionString)
127 if err != nil {

Callers

nothing calls this directly

Implementers 15

MockDriverbackend/plugin/advisor/utils_for_tests
Driverbackend/plugin/db/bigquery/bigquery.go
Driverbackend/plugin/db/mongodb/mongodb.go
Driverbackend/plugin/db/trino/trino.go
Driverbackend/plugin/db/redshift/redshift.go
Driverbackend/plugin/db/oracle/oracle.go
Driverbackend/plugin/db/dynamodb/dynamodb.go
Driverbackend/plugin/db/cosmosdb/cosmosdb.go
Driverbackend/plugin/db/spanner/spanner.go
Driverbackend/plugin/db/mssql/mssql.go
Driverbackend/plugin/db/mysql/mysql.go
Driverbackend/plugin/db/pg/pg.go

Calls 9

GetTLSConfigFunction · 0.92
GetSSHClientFunction · 0.92
ErrorfMethod · 0.80
GetDatabaseMethod · 0.65
DialMethod · 0.65
OpenMethod · 0.65
GetSslCertMethod · 0.45
GetSslKeyMethod · 0.45
GetSshHostMethod · 0.45

Tested by

no test coverage detected