2
0

Expose Conn.Config() and Pool.Config().

This commit is contained in:
georgysavva
2020-05-16 19:53:08 +03:00
parent 33cbec368f
commit 20c6c44f9f
4 changed files with 34 additions and 13 deletions
+8 -3
View File
@@ -30,7 +30,7 @@ type ConnConfig struct {
LogLevel LogLevel LogLevel LogLevel
// Original connection string that was parsed into config. // Original connection string that was parsed into config.
ConnString string connString string
// BuildStatementCache creates the stmtcache.Cache implementation for connections created with this config. Set // BuildStatementCache creates the stmtcache.Cache implementation for connections created with this config. Set
// to nil to disable automatic prepared statements. // to nil to disable automatic prepared statements.
@@ -47,6 +47,8 @@ type ConnConfig struct {
createdByParseConfig bool // Used to enforce created by ParseConfig rule. createdByParseConfig bool // Used to enforce created by ParseConfig rule.
} }
func (cc *ConnConfig) ConnString() string { return cc.connString }
// BuildStatementCacheFunc is a function that can be used to create a stmtcache.Cache implementation for connection. // BuildStatementCacheFunc is a function that can be used to create a stmtcache.Cache implementation for connection.
type BuildStatementCacheFunc func(conn *pgconn.PgConn) stmtcache.Cache type BuildStatementCacheFunc func(conn *pgconn.PgConn) stmtcache.Cache
@@ -160,7 +162,7 @@ func ParseConfig(connString string) (*ConnConfig, error) {
createdByParseConfig: true, createdByParseConfig: true,
LogLevel: LogLevelInfo, LogLevel: LogLevelInfo,
BuildStatementCache: buildStatementCache, BuildStatementCache: buildStatementCache,
ConnString: connString, connString: connString,
} }
return connConfig, nil return connConfig, nil
@@ -423,7 +425,10 @@ func (c *Conn) StatementCache() stmtcache.Cache { return c.stmtcache }
func (c *Conn) ConnInfo() *pgtype.ConnInfo { return c.connInfo } func (c *Conn) ConnInfo() *pgtype.ConnInfo { return c.connInfo }
// ConnString returns the connection string that was used to establish this connection. // ConnString returns the connection string that was used to establish this connection.
func (c *Conn) ConnString() string { return c.config.ConnString } func (c *Conn) ConnString() string { return c.config.ConnString() }
// Config returns config that was used to establish this connection.
func (c *Conn) Config() *ConnConfig { return c.config }
// Exec executes sql. sql can be either a prepared statement name or an SQL string. arguments should be referenced // Exec executes sql. sql can be either a prepared statement name or an SQL string. arguments should be referenced
// positionally from the sql string as $1, $2, etc. // positionally from the sql string as $1, $2, etc.
+6 -4
View File
@@ -28,6 +28,7 @@ func TestCrateDBConnect(t *testing.T) {
require.Nil(t, err) require.Nil(t, err)
defer closeConn(t, conn) defer closeConn(t, conn)
assert.Equal(t, connString, conn.Config().ConnString())
assert.Equal(t, connString, conn.ConnString()) assert.Equal(t, connString, conn.ConnString())
var result int var result int
@@ -43,15 +44,16 @@ func TestCrateDBConnect(t *testing.T) {
func TestConnect(t *testing.T) { func TestConnect(t *testing.T) {
t.Parallel() t.Parallel()
connStr := os.Getenv("PGX_TEST_DATABASE") connString := os.Getenv("PGX_TEST_DATABASE")
config := mustParseConfig(t, connStr) config := mustParseConfig(t, connString)
conn, err := pgx.ConnectConfig(context.Background(), config) conn, err := pgx.ConnectConfig(context.Background(), config)
if err != nil { if err != nil {
t.Fatalf("Unable to establish connection: %v", err) t.Fatalf("Unable to establish connection: %v", err)
} }
assert.Equal(t, connStr, conn.ConnString()) assert.Equal(t, connString, conn.Config().ConnString())
assert.Equal(t, connString, conn.ConnString())
var currentDB string var currentDB string
err = conn.QueryRow(context.Background(), "select current_database()").Scan(&currentDB) err = conn.QueryRow(context.Background(), "select current_database()").Scan(&currentDB)
@@ -113,7 +115,7 @@ func TestConfigContainsConnStr(t *testing.T) {
connStr := os.Getenv("PGX_TEST_DATABASE") connStr := os.Getenv("PGX_TEST_DATABASE")
config, err := pgx.ParseConfig(connStr) config, err := pgx.ParseConfig(connStr)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, connStr, config.ConnString) assert.Equal(t, connStr, config.ConnString())
} }
func TestParseConfigExtractsStatementCacheOptions(t *testing.T) { func TestParseConfigExtractsStatementCacheOptions(t *testing.T) {
+6 -3
View File
@@ -69,7 +69,7 @@ func (cr *connResource) getPoolRows(c *Conn, r pgx.Rows) *poolRows {
type Pool struct { type Pool struct {
p *puddle.Pool p *puddle.Pool
connString string config *Config
afterConnect func(context.Context, *pgx.Conn) error afterConnect func(context.Context, *pgx.Conn) error
beforeAcquire func(context.Context, *pgx.Conn) bool beforeAcquire func(context.Context, *pgx.Conn) bool
afterRelease func(*pgx.Conn) bool afterRelease func(*pgx.Conn) bool
@@ -142,7 +142,7 @@ func ConnectConfig(ctx context.Context, config *Config) (*Pool, error) {
} }
p := &Pool{ p := &Pool{
connString: config.ConnConfig.ConnString, config: config,
afterConnect: config.AfterConnect, afterConnect: config.AfterConnect,
beforeAcquire: config.BeforeAcquire, beforeAcquire: config.BeforeAcquire,
afterRelease: config.AfterRelease, afterRelease: config.AfterRelease,
@@ -372,7 +372,10 @@ func (p *Pool) AcquireAllIdle(ctx context.Context) []*Conn {
} }
// ConnString returns the connection string that was used to initialize this pool. // ConnString returns the connection string that was used to initialize this pool.
func (p *Pool) ConnString() string { return p.connString } func (p *Pool) ConnString() string { return p.config.ConnConfig.ConnString() }
// Config returns config that was used to initialize this pool.
func (p *Pool) Config() *Config { return p.config }
func (p *Pool) Stat() *Stat { func (p *Pool) Stat() *Stat {
return &Stat{s: p.p.Stat()} return &Stat{s: p.p.Stat()}
+14 -3
View File
@@ -14,10 +14,21 @@ import (
func TestConnect(t *testing.T) { func TestConnect(t *testing.T) {
t.Parallel() t.Parallel()
connStr := os.Getenv("PGX_TEST_DATABASE") connString := os.Getenv("PGX_TEST_DATABASE")
pool, err := pgxpool.Connect(context.Background(), connStr) pool, err := pgxpool.Connect(context.Background(), connString)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, connStr, pool.ConnString()) assert.Equal(t, connString, pool.ConnString())
pool.Close()
}
func TestConnectConfig(t *testing.T) {
t.Parallel()
connString := os.Getenv("PGX_TEST_DATABASE")
config, err := pgxpool.ParseConfig(connString)
require.NoError(t, err)
pool, err := pgxpool.ConnectConfig(context.Background(), config)
require.NoError(t, err)
assert.Equal(t, config, pool.Config())
pool.Close() pool.Close()
} }