Skip to content

Commit fc334e4

Browse files
authored
Merge pull request #2322 from Nomlsbad/better-parse-config-errors
Use `ParseConfigError` in `pgx.ParseConfig` and `pgxpool.ParseConfig`
2 parents 15bca4a + 3f5509f commit fc334e4

File tree

4 files changed

+19
-20
lines changed

4 files changed

+19
-20
lines changed

conn.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
172172
delete(config.RuntimeParams, "statement_cache_capacity")
173173
n, err := strconv.ParseInt(s, 10, 32)
174174
if err != nil {
175-
return nil, fmt.Errorf("cannot parse statement_cache_capacity: %w", err)
175+
return nil, pgconn.NewParseConfigError(connString, "cannot parse statement_cache_capacity", err)
176176
}
177177
statementCacheCapacity = int(n)
178178
}
@@ -182,7 +182,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
182182
delete(config.RuntimeParams, "description_cache_capacity")
183183
n, err := strconv.ParseInt(s, 10, 32)
184184
if err != nil {
185-
return nil, fmt.Errorf("cannot parse description_cache_capacity: %w", err)
185+
return nil, pgconn.NewParseConfigError(connString, "cannot parse description_cache_capacity", err)
186186
}
187187
descriptionCacheCapacity = int(n)
188188
}
@@ -202,7 +202,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
202202
case "simple_protocol":
203203
defaultQueryExecMode = QueryExecModeSimpleProtocol
204204
default:
205-
return nil, fmt.Errorf("invalid default_query_exec_mode: %s", s)
205+
return nil, pgconn.NewParseConfigError(connString, "invalid default_query_exec_mode", err)
206206
}
207207
}
208208

pgconn/errors.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ type ParseConfigError struct {
112112
err error
113113
}
114114

115+
func NewParseConfigError(conn, msg string, err error) error {
116+
return &ParseConfigError{
117+
ConnString: conn,
118+
msg: msg,
119+
err: err,
120+
}
121+
}
122+
115123
func (e *ParseConfigError) Error() string {
116124
// Now that ParseConfigError is public and ConnString is available to the developer, perhaps it would be better only
117125
// return a static string. That would ensure that the error message cannot leak a password. The ConnString field would

pgconn/export_test.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
11
// File export_test exports some methods for better testing.
22

33
package pgconn
4-
5-
func NewParseConfigError(conn, msg string, err error) error {
6-
return &ParseConfigError{
7-
ConnString: conn,
8-
msg: msg,
9-
err: err,
10-
}
11-
}

pgxpool/pool.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package pgxpool
22

33
import (
44
"context"
5-
"fmt"
65
"math/rand"
76
"runtime"
87
"strconv"
@@ -321,10 +320,10 @@ func ParseConfig(connString string) (*Config, error) {
321320
delete(connConfig.Config.RuntimeParams, "pool_max_conns")
322321
n, err := strconv.ParseInt(s, 10, 32)
323322
if err != nil {
324-
return nil, fmt.Errorf("cannot parse pool_max_conns: %w", err)
323+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conns", err)
325324
}
326325
if n < 1 {
327-
return nil, fmt.Errorf("pool_max_conns too small: %d", n)
326+
return nil, pgconn.NewParseConfigError(connString, "pool_max_conns too small", err)
328327
}
329328
config.MaxConns = int32(n)
330329
} else {
@@ -338,7 +337,7 @@ func ParseConfig(connString string) (*Config, error) {
338337
delete(connConfig.Config.RuntimeParams, "pool_min_conns")
339338
n, err := strconv.ParseInt(s, 10, 32)
340339
if err != nil {
341-
return nil, fmt.Errorf("cannot parse pool_min_conns: %w", err)
340+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_conns", err)
342341
}
343342
config.MinConns = int32(n)
344343
} else {
@@ -349,7 +348,7 @@ func ParseConfig(connString string) (*Config, error) {
349348
delete(connConfig.Config.RuntimeParams, "pool_min_idle_conns")
350349
n, err := strconv.ParseInt(s, 10, 32)
351350
if err != nil {
352-
return nil, fmt.Errorf("cannot parse pool_min_idle_conns: %w", err)
351+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_idle_conns", err)
353352
}
354353
config.MinIdleConns = int32(n)
355354
} else {
@@ -360,7 +359,7 @@ func ParseConfig(connString string) (*Config, error) {
360359
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime")
361360
d, err := time.ParseDuration(s)
362361
if err != nil {
363-
return nil, fmt.Errorf("invalid pool_max_conn_lifetime: %w", err)
362+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime", err)
364363
}
365364
config.MaxConnLifetime = d
366365
} else {
@@ -371,7 +370,7 @@ func ParseConfig(connString string) (*Config, error) {
371370
delete(connConfig.Config.RuntimeParams, "pool_max_conn_idle_time")
372371
d, err := time.ParseDuration(s)
373372
if err != nil {
374-
return nil, fmt.Errorf("invalid pool_max_conn_idle_time: %w", err)
373+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_idle_time", err)
375374
}
376375
config.MaxConnIdleTime = d
377376
} else {
@@ -382,7 +381,7 @@ func ParseConfig(connString string) (*Config, error) {
382381
delete(connConfig.Config.RuntimeParams, "pool_health_check_period")
383382
d, err := time.ParseDuration(s)
384383
if err != nil {
385-
return nil, fmt.Errorf("invalid pool_health_check_period: %w", err)
384+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_health_check_period", err)
386385
}
387386
config.HealthCheckPeriod = d
388387
} else {
@@ -393,7 +392,7 @@ func ParseConfig(connString string) (*Config, error) {
393392
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime_jitter")
394393
d, err := time.ParseDuration(s)
395394
if err != nil {
396-
return nil, fmt.Errorf("invalid pool_max_conn_lifetime_jitter: %w", err)
395+
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime_jitter", err)
397396
}
398397
config.MaxConnLifetimeJitter = d
399398
}

0 commit comments

Comments
 (0)