summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-09-08 20:53:25 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-09-08 20:53:25 +0200
commita6429b5410062cb8067e6dbbc9999d7d579a751d (patch)
treec10458d8a5e41ec561b0d139d83547353fdb69bc /vendor/github.com/jackc/pgx
parent[bugfix] check for nil notification (#4417) (diff)
downloadgotosocial-a6429b5410062cb8067e6dbbc9999d7d579a751d.tar.xz
[chore] update dependencies (#4422)
- github.com/jackc/pgx/v5 v5.7.5 -> v5.7.6 - github.com/ncruces/go-sqlite3 v0.28.0 -> v0.29.0 - github.com/tdewolff/minify/v2 v2.24.2 -> v2.24.3 - golang.org/x/oauth2 v0.30.0 -> v0.31.0 - golang.org/x/sys v0.35.0 -> v0.36.0 - golang.org/x/text v0.28.0 -> v0.29.0 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4422 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/jackc/pgx')
-rw-r--r--vendor/github.com/jackc/pgx/v5/.golangci.yml21
-rw-r--r--vendor/github.com/jackc/pgx/v5/CHANGELOG.md11
-rw-r--r--vendor/github.com/jackc/pgx/v5/README.md5
-rw-r--r--vendor/github.com/jackc/pgx/v5/batch.go32
-rw-r--r--vendor/github.com/jackc/pgx/v5/conn.go6
-rw-r--r--vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go1
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go2
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgconn/config.go22
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgconn/errors.go10
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgconn/krb5.go2
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go26
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go1
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/array.go8
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/bits.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/bool.go11
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/box.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go2
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/bytea.go1
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/circle.go6
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/composite.go1
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/date.go9
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/float4.go12
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/float8.go12
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/hstore.go11
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/inet.go3
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/int.go27
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb9
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/interval.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/line.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/lseg.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/multirange.go5
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/numeric.go34
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/path.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go2
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/point.go9
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/polygon.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/range.go13
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go1
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/text.go9
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/tid.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/time.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go14
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go19
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/uint32.go33
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/uint64.go7
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgtype/uuid.go8
-rw-r--r--vendor/github.com/jackc/pgx/v5/pgxpool/pool.go115
-rw-r--r--vendor/github.com/jackc/pgx/v5/rows.go23
-rw-r--r--vendor/github.com/jackc/pgx/v5/stdlib/sql.go30
54 files changed, 433 insertions, 218 deletions
diff --git a/vendor/github.com/jackc/pgx/v5/.golangci.yml b/vendor/github.com/jackc/pgx/v5/.golangci.yml
new file mode 100644
index 000000000..ca74c703a
--- /dev/null
+++ b/vendor/github.com/jackc/pgx/v5/.golangci.yml
@@ -0,0 +1,21 @@
+# See for configurations: https://golangci-lint.run/usage/configuration/
+version: 2
+
+# See: https://golangci-lint.run/usage/formatters/
+formatters:
+ default: none
+ enable:
+ - gofmt # https://pkg.go.dev/cmd/gofmt
+ - gofumpt # https://github.com/mvdan/gofumpt
+
+ settings:
+ gofmt:
+ simplify: true # Simplify code: gofmt with `-s` option.
+
+ gofumpt:
+ # Module path which contains the source code being formatted.
+ # Default: ""
+ module-path: github.com/jackc/pgx/v5 # Should match with module in go.mod
+ # Choose whether to use the extra rules.
+ # Default: false
+ extra-rules: true
diff --git a/vendor/github.com/jackc/pgx/v5/CHANGELOG.md b/vendor/github.com/jackc/pgx/v5/CHANGELOG.md
index 1e56878e8..6c9c99b5e 100644
--- a/vendor/github.com/jackc/pgx/v5/CHANGELOG.md
+++ b/vendor/github.com/jackc/pgx/v5/CHANGELOG.md
@@ -1,3 +1,14 @@
+# 5.7.6 (September 8, 2025)
+
+* Use ParseConfigError in pgx.ParseConfig and pgxpool.ParseConfig (Yurasov Ilia)
+* Add PrepareConn hook to pgxpool (Jonathan Hall)
+* Reduce allocations in QueryContext (Dominique Lefevre)
+* Add MarshalJSON and UnmarshalJSON for pgtype.Uint32 (Panos Koutsovasilis)
+* Configure ping behavior on pgxpool with ShouldPing (Christian Kiely)
+* zeronull int types implement Int64Valuer and Int64Scanner (Li Zeghong)
+* Fix panic when receiving terminate connection message during CopyFrom (Michal Drausowski)
+* Fix statement cache not being invalidated on error during batch (Muhammadali Nazarov)
+
# 5.7.5 (May 17, 2025)
* Support sslnegotiation connection option (divyam234)
diff --git a/vendor/github.com/jackc/pgx/v5/README.md b/vendor/github.com/jackc/pgx/v5/README.md
index 0138c2c76..cb709e217 100644
--- a/vendor/github.com/jackc/pgx/v5/README.md
+++ b/vendor/github.com/jackc/pgx/v5/README.md
@@ -127,6 +127,7 @@ pgerrcode contains constants for the PostgreSQL error codes.
## Adapters for 3rd Party Tracers
* [github.com/jackhopner/pgx-xray-tracer](https://github.com/jackhopner/pgx-xray-tracer)
+* [github.com/exaring/otelpgx](https://github.com/exaring/otelpgx)
## Adapters for 3rd Party Loggers
@@ -184,3 +185,7 @@ Simple Golang implementation for transactional outbox pattern for PostgreSQL usi
### [https://github.com/Arlandaren/pgxWrappy](https://github.com/Arlandaren/pgxWrappy)
Simplifies working with the pgx library, providing convenient scanning of nested structures.
+
+## [https://github.com/KoNekoD/pgx-colon-query-rewriter](https://github.com/KoNekoD/pgx-colon-query-rewriter)
+
+Implementation of the pgx query rewriter to use ':' instead of '@' in named query parameters.
diff --git a/vendor/github.com/jackc/pgx/v5/batch.go b/vendor/github.com/jackc/pgx/v5/batch.go
index c3c2834f2..1b1cbd849 100644
--- a/vendor/github.com/jackc/pgx/v5/batch.go
+++ b/vendor/github.com/jackc/pgx/v5/batch.go
@@ -43,6 +43,10 @@ func (qq *QueuedQuery) QueryRow(fn func(row Row) error) {
}
// Exec sets fn to be called when the response to qq is received.
+//
+// Note: for simple batch insert uses where it is not required to handle
+// each potential error individually, it's sufficient to not set any callbacks,
+// and just handle the return value of BatchResults.Close.
func (qq *QueuedQuery) Exec(fn func(ct pgconn.CommandTag) error) {
qq.Fn = func(br BatchResults) error {
ct, err := br.Exec()
@@ -83,7 +87,7 @@ func (b *Batch) Len() int {
type BatchResults interface {
// Exec reads the results from the next query in the batch as if the query has been sent with Conn.Exec. Prefer
- // calling Exec on the QueuedQuery.
+ // calling Exec on the QueuedQuery, or just calling Close.
Exec() (pgconn.CommandTag, error)
// Query reads the results from the next query in the batch as if the query has been sent with Conn.Query. Prefer
@@ -98,6 +102,9 @@ type BatchResults interface {
// QueuedQuery.Query, QueuedQuery.QueryRow, or QueuedQuery.Exec will be called. If a callback function returns an
// error or the batch encounters an error subsequent callback functions will not be called.
//
+ // For simple batch inserts inside a transaction or similar queries, it's sufficient to not set any callbacks,
+ // and just handle the return value of Close.
+ //
// Close must be called before the underlying connection can be used again. Any error that occurred during a batch
// operation may have made it impossible to resyncronize the connection with the server. In this case the underlying
// connection will have been closed.
@@ -207,7 +214,6 @@ func (br *batchResults) Query() (Rows, error) {
func (br *batchResults) QueryRow() Row {
rows, _ := br.Query()
return (*connRow)(rows.(*baseRows))
-
}
// Close closes the batch operation. Any error that occurred during a batch operation may have made it impossible to
@@ -220,6 +226,8 @@ func (br *batchResults) Close() error {
}
br.endTraced = true
}
+
+ invalidateCachesOnBatchResultsError(br.conn, br.b, br.err)
}()
if br.err != nil {
@@ -378,7 +386,6 @@ func (br *pipelineBatchResults) Query() (Rows, error) {
func (br *pipelineBatchResults) QueryRow() Row {
rows, _ := br.Query()
return (*connRow)(rows.(*baseRows))
-
}
// Close closes the batch operation. Any error that occurred during a batch operation may have made it impossible to
@@ -391,6 +398,8 @@ func (br *pipelineBatchResults) Close() error {
}
br.endTraced = true
}
+
+ invalidateCachesOnBatchResultsError(br.conn, br.b, br.err)
}()
if br.err == nil && br.lastRows != nil && br.lastRows.err != nil {
@@ -441,3 +450,20 @@ func (br *pipelineBatchResults) nextQueryAndArgs() (query string, args []any, er
br.qqIdx++
return bi.SQL, bi.Arguments, nil
}
+
+// invalidates statement and description caches on batch results error
+func invalidateCachesOnBatchResultsError(conn *Conn, b *Batch, err error) {
+ if err != nil && conn != nil && b != nil {
+ if sc := conn.statementCache; sc != nil {
+ for _, bi := range b.QueuedQueries {
+ sc.Invalidate(bi.SQL)
+ }
+ }
+
+ if sc := conn.descriptionCache; sc != nil {
+ for _, bi := range b.QueuedQueries {
+ sc.Invalidate(bi.SQL)
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/jackc/pgx/v5/conn.go b/vendor/github.com/jackc/pgx/v5/conn.go
index 93e2e7182..67b225293 100644
--- a/vendor/github.com/jackc/pgx/v5/conn.go
+++ b/vendor/github.com/jackc/pgx/v5/conn.go
@@ -172,7 +172,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
delete(config.RuntimeParams, "statement_cache_capacity")
n, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- return nil, fmt.Errorf("cannot parse statement_cache_capacity: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse statement_cache_capacity", err)
}
statementCacheCapacity = int(n)
}
@@ -182,7 +182,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
delete(config.RuntimeParams, "description_cache_capacity")
n, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- return nil, fmt.Errorf("cannot parse description_cache_capacity: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse description_cache_capacity", err)
}
descriptionCacheCapacity = int(n)
}
@@ -202,7 +202,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
case "simple_protocol":
defaultQueryExecMode = QueryExecModeSimpleProtocol
default:
- return nil, fmt.Errorf("invalid default_query_exec_mode: %s", s)
+ return nil, pgconn.NewParseConfigError(connString, "invalid default_query_exec_mode", err)
}
}
diff --git a/vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go b/vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go
index dec83f47b..17fec937b 100644
--- a/vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go
+++ b/vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go
@@ -31,7 +31,6 @@ func (c *LRUCache) Get(key string) *pgconn.StatementDescription {
}
return nil
-
}
// Put stores sd in the cache. Put panics if sd.SQL is "". Put does nothing if sd.SQL already exists in the cache or
diff --git a/vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go b/vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go
index 064983615..f846ba810 100644
--- a/vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go
+++ b/vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go
@@ -263,7 +263,7 @@ func computeClientProof(saltedPassword, authMessage []byte) []byte {
return buf
}
-func computeServerSignature(saltedPassword []byte, authMessage []byte) []byte {
+func computeServerSignature(saltedPassword, authMessage []byte) []byte {
serverKey := computeHMAC(saltedPassword, []byte("Server Key"))
serverSignature := computeHMAC(serverKey, authMessage)
buf := make([]byte, base64.StdEncoding.EncodedLen(len(serverSignature)))
diff --git a/vendor/github.com/jackc/pgx/v5/pgconn/config.go b/vendor/github.com/jackc/pgx/v5/pgconn/config.go
index 1c28c4079..3937dc407 100644
--- a/vendor/github.com/jackc/pgx/v5/pgconn/config.go
+++ b/vendor/github.com/jackc/pgx/v5/pgconn/config.go
@@ -23,9 +23,11 @@ import (
"github.com/jackc/pgx/v5/pgproto3"
)
-type AfterConnectFunc func(ctx context.Context, pgconn *PgConn) error
-type ValidateConnectFunc func(ctx context.Context, pgconn *PgConn) error
-type GetSSLPasswordFunc func(ctx context.Context) string
+type (
+ AfterConnectFunc func(ctx context.Context, pgconn *PgConn) error
+ ValidateConnectFunc func(ctx context.Context, pgconn *PgConn) error
+ GetSSLPasswordFunc func(ctx context.Context) string
+)
// Config is the settings used to establish a connection to a PostgreSQL server. It must be created by [ParseConfig]. A
// manually initialized Config will cause ConnectConfig to panic.
@@ -179,7 +181,7 @@ func NetworkAddress(host string, port uint16) (network, address string) {
//
// ParseConfig supports specifying multiple hosts in similar manner to libpq. Host and port may include comma separated
// values that will be tried in order. This can be used as part of a high availability system. See
-// https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS for more information.
+// https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS for more information.
//
// # Example URL
// postgres://jack:secret@foo.example.com:5432,bar.example.com:5432/mydb
@@ -206,9 +208,9 @@ func NetworkAddress(host string, port uint16) (network, address string) {
// PGTARGETSESSIONATTRS
// PGTZ
//
-// See http://www.postgresql.org/docs/11/static/libpq-envars.html for details on the meaning of environment variables.
+// See http://www.postgresql.org/docs/current/static/libpq-envars.html for details on the meaning of environment variables.
//
-// See https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-PARAMKEYWORDS for parameter key word names. They are
+// See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS for parameter key word names. They are
// usually but not always the environment variable name downcased and without the "PG" prefix.
//
// Important Security Notes:
@@ -216,7 +218,7 @@ func NetworkAddress(host string, port uint16) (network, address string) {
// ParseConfig tries to match libpq behavior with regard to PGSSLMODE. This includes defaulting to "prefer" behavior if
// not set.
//
-// See http://www.postgresql.org/docs/11/static/libpq-ssl.html#LIBPQ-SSL-PROTECTION for details on what level of
+// See http://www.postgresql.org/docs/current/static/libpq-ssl.html#LIBPQ-SSL-PROTECTION for details on what level of
// security each sslmode provides.
//
// The sslmode "prefer" (the default), sslmode "allow", and multiple hosts are implemented via the Fallbacks field of
@@ -713,7 +715,7 @@ func configTLS(settings map[string]string, thisHost string, parseConfigOptions P
// According to PostgreSQL documentation, if a root CA file exists,
// the behavior of sslmode=require should be the same as that of verify-ca
//
- // See https://www.postgresql.org/docs/12/libpq-ssl.html
+ // See https://www.postgresql.org/docs/current/libpq-ssl.html
if sslrootcert != "" {
goto nextCase
}
@@ -784,8 +786,8 @@ func configTLS(settings map[string]string, thisHost string, parseConfigOptions P
if sslpassword != "" {
decryptedKey, decryptedError = x509.DecryptPEMBlock(block, []byte(sslpassword))
}
- //if sslpassword not provided or has decryption error when use it
- //try to find sslpassword with callback function
+ // if sslpassword not provided or has decryption error when use it
+ // try to find sslpassword with callback function
if sslpassword == "" || decryptedError != nil {
if parseConfigOptions.GetSSLPassword != nil {
sslpassword = parseConfigOptions.GetSSLPassword(context.Background())
diff --git a/vendor/github.com/jackc/pgx/v5/pgconn/errors.go b/vendor/github.com/jackc/pgx/v5/pgconn/errors.go
index ec4a6d47c..d968d3f03 100644
--- a/vendor/github.com/jackc/pgx/v5/pgconn/errors.go
+++ b/vendor/github.com/jackc/pgx/v5/pgconn/errors.go
@@ -27,7 +27,7 @@ func Timeout(err error) bool {
}
// PgError represents an error reported by the PostgreSQL server. See
-// http://www.postgresql.org/docs/11/static/protocol-error-fields.html for
+// http://www.postgresql.org/docs/current/static/protocol-error-fields.html for
// detailed field description.
type PgError struct {
Severity string
@@ -112,6 +112,14 @@ type ParseConfigError struct {
err error
}
+func NewParseConfigError(conn, msg string, err error) error {
+ return &ParseConfigError{
+ ConnString: conn,
+ msg: msg,
+ err: err,
+ }
+}
+
func (e *ParseConfigError) Error() string {
// Now that ParseConfigError is public and ConnString is available to the developer, perhaps it would be better only
// return a static string. That would ensure that the error message cannot leak a password. The ConnString field would
diff --git a/vendor/github.com/jackc/pgx/v5/pgconn/krb5.go b/vendor/github.com/jackc/pgx/v5/pgconn/krb5.go
index 3c1af3477..efb0d61b8 100644
--- a/vendor/github.com/jackc/pgx/v5/pgconn/krb5.go
+++ b/vendor/github.com/jackc/pgx/v5/pgconn/krb5.go
@@ -28,7 +28,7 @@ func RegisterGSSProvider(newGSSArg NewGSSFunc) {
// GSS provides GSSAPI authentication (e.g., Kerberos).
type GSS interface {
- GetInitToken(host string, service string) ([]byte, error)
+ GetInitToken(host, service string) ([]byte, error)
GetInitTokenFromSPN(spn string) ([]byte, error)
Continue(inToken []byte) (done bool, outToken []byte, err error)
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go b/vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go
index bf3eaec60..97141c649 100644
--- a/vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go
+++ b/vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go
@@ -135,7 +135,7 @@ func ConnectWithOptions(ctx context.Context, connString string, parseConfigOptio
//
// If config.Fallbacks are present they will sequentially be tried in case of error establishing network connection. An
// authentication error will terminate the chain of attempts (like libpq:
-// https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS) and be returned as the error.
+// https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS) and be returned as the error.
func ConnectConfig(ctx context.Context, config *Config) (*PgConn, error) {
// Default values are set in ParseConfig. Enforce initial creation by ParseConfig rather than setting defaults from
// zero values.
@@ -991,7 +991,8 @@ func noticeResponseToNotice(msg *pgproto3.NoticeResponse) *Notice {
// CancelRequest sends a cancel request to the PostgreSQL server. It returns an error if unable to deliver the cancel
// request, but lack of an error does not ensure that the query was canceled. As specified in the documentation, there
-// is no way to be sure a query was canceled. See https://www.postgresql.org/docs/11/protocol-flow.html#id-1.10.5.7.9
+// is no way to be sure a query was canceled.
+// See https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-CANCELING-REQUESTS
func (pgConn *PgConn) CancelRequest(ctx context.Context) error {
// Open a cancellation request to the same server. The address is taken from the net.Conn directly instead of reusing
// the connection config. This is important in high availability configurations where fallback connections may be
@@ -1140,7 +1141,7 @@ func (pgConn *PgConn) Exec(ctx context.Context, sql string) *MultiResultReader {
// binary format. If resultFormats is nil all results will be in text format.
//
// ResultReader must be closed before PgConn can be used again.
-func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) *ResultReader {
+func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) *ResultReader {
result := pgConn.execExtendedPrefix(ctx, paramValues)
if result.closed {
return result
@@ -1166,7 +1167,7 @@ func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues []
// binary format. If resultFormats is nil all results will be in text format.
//
// ResultReader must be closed before PgConn can be used again.
-func (pgConn *PgConn) ExecPrepared(ctx context.Context, stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) *ResultReader {
+func (pgConn *PgConn) ExecPrepared(ctx context.Context, stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) *ResultReader {
result := pgConn.execExtendedPrefix(ctx, paramValues)
if result.closed {
return result
@@ -1373,7 +1374,14 @@ func (pgConn *PgConn) CopyFrom(ctx context.Context, r io.Reader, sql string) (Co
close(pgConn.cleanupDone)
return CommandTag{}, normalizeTimeoutError(ctx, err)
}
- msg, _ := pgConn.receiveMessage()
+ // peekMessage never returns err in the bufferingReceive mode - it only forwards the bufferingReceive variables.
+ // Therefore, the only case for receiveMessage to return err is during handling of the ErrorResponse message type
+ // and using pgOnError handler to determine the connection is no longer valid (and thus closing the conn).
+ msg, serverError := pgConn.receiveMessage()
+ if serverError != nil {
+ close(abortCopyChan)
+ return CommandTag{}, serverError
+ }
switch msg := msg.(type) {
case *pgproto3.ErrorResponse:
@@ -1712,7 +1720,7 @@ type Batch struct {
}
// ExecParams appends an ExecParams command to the batch. See PgConn.ExecParams for parameter descriptions.
-func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) {
+func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) {
if batch.err != nil {
return
}
@@ -1725,7 +1733,7 @@ func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uin
}
// ExecPrepared appends an ExecPrepared e command to the batch. See PgConn.ExecPrepared for parameter descriptions.
-func (batch *Batch) ExecPrepared(stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) {
+func (batch *Batch) ExecPrepared(stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) {
if batch.err != nil {
return
}
@@ -2201,7 +2209,7 @@ func (p *Pipeline) SendDeallocate(name string) {
}
// SendQueryParams is the pipeline version of *PgConn.QueryParams.
-func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) {
+func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) {
if p.closed {
return
}
@@ -2214,7 +2222,7 @@ func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs [
}
// SendQueryPrepared is the pipeline version of *PgConn.QueryPrepared.
-func (p *Pipeline) SendQueryPrepared(stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) {
+func (p *Pipeline) SendQueryPrepared(stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) {
if p.closed {
return
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
index ac2962e9e..415e1a24a 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
@@ -9,8 +9,7 @@ import (
)
// AuthenticationCleartextPassword is a message sent from the backend indicating that a clear-text password is required.
-type AuthenticationCleartextPassword struct {
-}
+type AuthenticationCleartextPassword struct{}
// Backend identifies this message as sendable by the PostgreSQL backend.
func (*AuthenticationCleartextPassword) Backend() {}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
index ec11d39f1..98c0b2d66 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
@@ -9,8 +9,7 @@ import (
)
// AuthenticationOk is a message sent from the backend indicating that authentication was successful.
-type AuthenticationOk struct {
-}
+type AuthenticationOk struct{}
// Backend identifies this message as sendable by the PostgreSQL backend.
func (*AuthenticationOk) Backend() {}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
index 040814dbd..c3421a9b5 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
@@ -4,8 +4,7 @@ import (
"encoding/json"
)
-type CopyDone struct {
-}
+type CopyDone struct{}
// Backend identifies this message as sendable by the PostgreSQL backend.
func (*CopyDone) Backend() {}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go b/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
index 70cb20cd5..122d1341c 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
@@ -10,8 +10,7 @@ import (
const gssEncReqNumber = 80877104
-type GSSEncRequest struct {
-}
+type GSSEncRequest struct{}
// Frontend identifies this message as sendable by a PostgreSQL frontend.
func (*GSSEncRequest) Frontend() {}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go b/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
index dc2a4ddf2..c40a2261b 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
@@ -56,7 +56,6 @@ func (*RowDescription) Backend() {}
// Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message
// type identifier and 4 byte message length.
func (dst *RowDescription) Decode(src []byte) error {
-
if len(src) < 2 {
return &invalidMessageFormatErr{messageType: "RowDescription"}
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go b/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
index b0fc28476..bdfc7c427 100644
--- a/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
+++ b/vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
@@ -10,8 +10,7 @@ import (
const sslRequestNumber = 80877103
-type SSLRequest struct {
-}
+type SSLRequest struct{}
// Frontend identifies this message as sendable by a PostgreSQL frontend.
func (*SSLRequest) Frontend() {}
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/array.go b/vendor/github.com/jackc/pgx/v5/pgtype/array.go
index 06b824ad0..872a08891 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/array.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/array.go
@@ -374,8 +374,8 @@ func quoteArrayElementIfNeeded(src string) string {
return src
}
-// Array represents a PostgreSQL array for T. It implements the ArrayGetter and ArraySetter interfaces. It preserves
-// PostgreSQL dimensions and custom lower bounds. Use FlatArray if these are not needed.
+// Array represents a PostgreSQL array for T. It implements the [ArrayGetter] and [ArraySetter] interfaces. It preserves
+// PostgreSQL dimensions and custom lower bounds. Use [FlatArray] if these are not needed.
type Array[T any] struct {
Elements []T
Dims []ArrayDimension
@@ -419,8 +419,8 @@ func (a Array[T]) ScanIndexType() any {
return new(T)
}
-// FlatArray implements the ArrayGetter and ArraySetter interfaces for any slice of T. It ignores PostgreSQL dimensions
-// and custom lower bounds. Use Array to preserve these.
+// FlatArray implements the [ArrayGetter] and [ArraySetter] interfaces for any slice of T. It ignores PostgreSQL dimensions
+// and custom lower bounds. Use [Array] to preserve these.
type FlatArray[T any] []T
func (a FlatArray[T]) Dimensions() []ArrayDimension {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/bits.go b/vendor/github.com/jackc/pgx/v5/pgtype/bits.go
index e7a1d016d..2a48e3549 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/bits.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/bits.go
@@ -23,16 +23,18 @@ type Bits struct {
Valid bool
}
+// ScanBits implements the [BitsScanner] interface.
func (b *Bits) ScanBits(v Bits) error {
*b = v
return nil
}
+// BitsValue implements the [BitsValuer] interface.
func (b Bits) BitsValue() (Bits, error) {
return b, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Bits) Scan(src any) error {
if src == nil {
*dst = Bits{}
@@ -47,7 +49,7 @@ func (dst *Bits) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Bits) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -127,7 +129,6 @@ func (encodePlanBitsCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (BitsCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/bool.go b/vendor/github.com/jackc/pgx/v5/pgtype/bool.go
index 71caffa74..955f01fe8 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/bool.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/bool.go
@@ -22,16 +22,18 @@ type Bool struct {
Valid bool
}
+// ScanBool implements the [BoolScanner] interface.
func (b *Bool) ScanBool(v Bool) error {
*b = v
return nil
}
+// BoolValue implements the [BoolValuer] interface.
func (b Bool) BoolValue() (Bool, error) {
return b, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Bool) Scan(src any) error {
if src == nil {
*dst = Bool{}
@@ -61,7 +63,7 @@ func (dst *Bool) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Bool) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -70,6 +72,7 @@ func (src Bool) Value() (driver.Value, error) {
return src.Bool, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Bool) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -82,6 +85,7 @@ func (src Bool) MarshalJSON() ([]byte, error) {
}
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Bool) UnmarshalJSON(b []byte) error {
var v *bool
err := json.Unmarshal(b, &v)
@@ -200,7 +204,6 @@ func (encodePlanBoolCodecTextBool) Encode(value any, buf []byte) (newBuf []byte,
}
func (BoolCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
@@ -328,7 +331,7 @@ func (scanPlanTextAnyToBoolScanner) Scan(src []byte, dst any) error {
return s.ScanBool(Bool{Bool: v, Valid: true})
}
-// https://www.postgresql.org/docs/11/datatype-boolean.html
+// https://www.postgresql.org/docs/current/datatype-boolean.html
func planTextToBool(src []byte) (bool, error) {
s := string(bytes.ToLower(bytes.TrimSpace(src)))
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/box.go b/vendor/github.com/jackc/pgx/v5/pgtype/box.go
index 887d268bc..d243f58e3 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/box.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/box.go
@@ -24,16 +24,18 @@ type Box struct {
Valid bool
}
+// ScanBox implements the [BoxScanner] interface.
func (b *Box) ScanBox(v Box) error {
*b = v
return nil
}
+// BoxValue implements the [BoxValuer] interface.
func (b Box) BoxValue() (Box, error) {
return b, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Box) Scan(src any) error {
if src == nil {
*dst = Box{}
@@ -48,7 +50,7 @@ func (dst *Box) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Box) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -127,7 +129,6 @@ func (encodePlanBoxCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (BoxCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go b/vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go
index b39d3fa10..84964425b 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go
@@ -527,6 +527,7 @@ func (w *netIPNetWrapper) ScanNetipPrefix(v netip.Prefix) error {
return nil
}
+
func (w netIPNetWrapper) NetipPrefixValue() (netip.Prefix, error) {
ip, ok := netip.AddrFromSlice(w.IP)
if !ok {
@@ -881,7 +882,6 @@ func (a *anyMultiDimSliceArray) SetDimensions(dimensions []ArrayDimension) error
return nil
}
-
}
func (a *anyMultiDimSliceArray) makeMultidimensionalSlice(sliceType reflect.Type, dimensions []ArrayDimension, flatSlice reflect.Value, flatSliceIdx int) reflect.Value {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/bytea.go b/vendor/github.com/jackc/pgx/v5/pgtype/bytea.go
index a247705e9..6c4f0c5ea 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/bytea.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/bytea.go
@@ -148,7 +148,6 @@ func (encodePlanBytesCodecTextBytesValuer) Encode(value any, buf []byte) (newBuf
}
func (ByteaCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/circle.go b/vendor/github.com/jackc/pgx/v5/pgtype/circle.go
index e8f118cc9..fb9b4c11d 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/circle.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/circle.go
@@ -25,16 +25,18 @@ type Circle struct {
Valid bool
}
+// ScanCircle implements the [CircleScanner] interface.
func (c *Circle) ScanCircle(v Circle) error {
*c = v
return nil
}
+// CircleValue implements the [CircleValuer] interface.
func (c Circle) CircleValue() (Circle, error) {
return c, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Circle) Scan(src any) error {
if src == nil {
*dst = Circle{}
@@ -49,7 +51,7 @@ func (dst *Circle) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Circle) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/composite.go b/vendor/github.com/jackc/pgx/v5/pgtype/composite.go
index fb372325b..598cf7af9 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/composite.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/composite.go
@@ -276,7 +276,6 @@ func (c *CompositeCodec) DecodeValue(m *Map, oid uint32, format int16, src []byt
default:
return nil, fmt.Errorf("unknown format code %d", format)
}
-
}
type CompositeBinaryScanner struct {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/date.go b/vendor/github.com/jackc/pgx/v5/pgtype/date.go
index 784b16deb..447056860 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/date.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/date.go
@@ -26,11 +26,13 @@ type Date struct {
Valid bool
}
+// ScanDate implements the [DateScanner] interface.
func (d *Date) ScanDate(v Date) error {
*d = v
return nil
}
+// DateValue implements the [DateValuer] interface.
func (d Date) DateValue() (Date, error) {
return d, nil
}
@@ -40,7 +42,7 @@ const (
infinityDayOffset = 2147483647
)
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Date) Scan(src any) error {
if src == nil {
*dst = Date{}
@@ -58,7 +60,7 @@ func (dst *Date) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Date) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -70,6 +72,7 @@ func (src Date) Value() (driver.Value, error) {
return src.Time, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Date) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -89,6 +92,7 @@ func (src Date) MarshalJSON() ([]byte, error) {
return json.Marshal(s)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Date) UnmarshalJSON(b []byte) error {
var s *string
err := json.Unmarshal(b, &s)
@@ -223,7 +227,6 @@ func (encodePlanDateCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (DateCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/float4.go b/vendor/github.com/jackc/pgx/v5/pgtype/float4.go
index 8646d9d22..241a25add 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/float4.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/float4.go
@@ -16,26 +16,29 @@ type Float4 struct {
Valid bool
}
-// ScanFloat64 implements the Float64Scanner interface.
+// ScanFloat64 implements the [Float64Scanner] interface.
func (f *Float4) ScanFloat64(n Float8) error {
*f = Float4{Float32: float32(n.Float64), Valid: n.Valid}
return nil
}
+// Float64Value implements the [Float64Valuer] interface.
func (f Float4) Float64Value() (Float8, error) {
return Float8{Float64: float64(f.Float32), Valid: f.Valid}, nil
}
+// ScanInt64 implements the [Int64Scanner] interface.
func (f *Float4) ScanInt64(n Int8) error {
*f = Float4{Float32: float32(n.Int64), Valid: n.Valid}
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (f Float4) Int64Value() (Int8, error) {
return Int8{Int64: int64(f.Float32), Valid: f.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (f *Float4) Scan(src any) error {
if src == nil {
*f = Float4{}
@@ -58,7 +61,7 @@ func (f *Float4) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (f Float4) Value() (driver.Value, error) {
if !f.Valid {
return nil, nil
@@ -66,6 +69,7 @@ func (f Float4) Value() (driver.Value, error) {
return float64(f.Float32), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (f Float4) MarshalJSON() ([]byte, error) {
if !f.Valid {
return []byte("null"), nil
@@ -73,6 +77,7 @@ func (f Float4) MarshalJSON() ([]byte, error) {
return json.Marshal(f.Float32)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (f *Float4) UnmarshalJSON(b []byte) error {
var n *float32
err := json.Unmarshal(b, &n)
@@ -170,7 +175,6 @@ func (encodePlanFloat4CodecBinaryInt64Valuer) Encode(value any, buf []byte) (new
}
func (Float4Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/float8.go b/vendor/github.com/jackc/pgx/v5/pgtype/float8.go
index 9c923c9a3..54d6781ec 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/float8.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/float8.go
@@ -24,26 +24,29 @@ type Float8 struct {
Valid bool
}
-// ScanFloat64 implements the Float64Scanner interface.
+// ScanFloat64 implements the [Float64Scanner] interface.
func (f *Float8) ScanFloat64(n Float8) error {
*f = n
return nil
}
+// Float64Value implements the [Float64Valuer] interface.
func (f Float8) Float64Value() (Float8, error) {
return f, nil
}
+// ScanInt64 implements the [Int64Scanner] interface.
func (f *Float8) ScanInt64(n Int8) error {
*f = Float8{Float64: float64(n.Int64), Valid: n.Valid}
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (f Float8) Int64Value() (Int8, error) {
return Int8{Int64: int64(f.Float64), Valid: f.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (f *Float8) Scan(src any) error {
if src == nil {
*f = Float8{}
@@ -66,7 +69,7 @@ func (f *Float8) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (f Float8) Value() (driver.Value, error) {
if !f.Valid {
return nil, nil
@@ -74,6 +77,7 @@ func (f Float8) Value() (driver.Value, error) {
return f.Float64, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (f Float8) MarshalJSON() ([]byte, error) {
if !f.Valid {
return []byte("null"), nil
@@ -81,6 +85,7 @@ func (f Float8) MarshalJSON() ([]byte, error) {
return json.Marshal(f.Float64)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (f *Float8) UnmarshalJSON(b []byte) error {
var n *float64
err := json.Unmarshal(b, &n)
@@ -208,7 +213,6 @@ func (encodePlanTextInt64Valuer) Encode(value any, buf []byte) (newBuf []byte, e
}
func (Float8Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/hstore.go b/vendor/github.com/jackc/pgx/v5/pgtype/hstore.go
index 2f34f4c9e..ef864928f 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/hstore.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/hstore.go
@@ -22,16 +22,18 @@ type HstoreValuer interface {
// associated with its keys.
type Hstore map[string]*string
+// ScanHstore implements the [HstoreScanner] interface.
func (h *Hstore) ScanHstore(v Hstore) error {
*h = v
return nil
}
+// HstoreValue implements the [HstoreValuer] interface.
func (h Hstore) HstoreValue() (Hstore, error) {
return h, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (h *Hstore) Scan(src any) error {
if src == nil {
*h = nil
@@ -46,7 +48,7 @@ func (h *Hstore) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (h Hstore) Value() (driver.Value, error) {
if h == nil {
return nil, nil
@@ -162,7 +164,6 @@ func (encodePlanHstoreCodecText) Encode(value any, buf []byte) (newBuf []byte, e
}
func (HstoreCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
@@ -298,7 +299,7 @@ func (p *hstoreParser) consume() (b byte, end bool) {
return b, false
}
-func unexpectedByteErr(actualB byte, expectedB byte) error {
+func unexpectedByteErr(actualB, expectedB byte) error {
return fmt.Errorf("expected '%c' ('%#v'); found '%c' ('%#v')", expectedB, expectedB, actualB, actualB)
}
@@ -316,7 +317,7 @@ func (p *hstoreParser) consumeExpectedByte(expectedB byte) error {
// consumeExpected2 consumes two expected bytes or returns an error.
// This was a bit faster than using a string argument (better inlining? Not sure).
-func (p *hstoreParser) consumeExpected2(one byte, two byte) error {
+func (p *hstoreParser) consumeExpected2(one, two byte) error {
if p.pos+2 > len(p.str) {
return errors.New("unexpected end of string")
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/inet.go b/vendor/github.com/jackc/pgx/v5/pgtype/inet.go
index 6ca10ea07..b92edb239 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/inet.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/inet.go
@@ -24,7 +24,7 @@ type NetipPrefixValuer interface {
NetipPrefixValue() (netip.Prefix, error)
}
-// InetCodec handles both inet and cidr PostgreSQL types. The preferred Go types are netip.Prefix and netip.Addr. If
+// InetCodec handles both inet and cidr PostgreSQL types. The preferred Go types are [netip.Prefix] and [netip.Addr]. If
// IsValid() is false then they are treated as SQL NULL.
type InetCodec struct{}
@@ -107,7 +107,6 @@ func (encodePlanInetCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (InetCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/int.go b/vendor/github.com/jackc/pgx/v5/pgtype/int.go
index 7a2f8cb24..d1b8eb612 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/int.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/int.go
@@ -26,7 +26,7 @@ type Int2 struct {
Valid bool
}
-// ScanInt64 implements the Int64Scanner interface.
+// ScanInt64 implements the [Int64Scanner] interface.
func (dst *Int2) ScanInt64(n Int8) error {
if !n.Valid {
*dst = Int2{}
@@ -44,11 +44,12 @@ func (dst *Int2) ScanInt64(n Int8) error {
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (n Int2) Int64Value() (Int8, error) {
return Int8{Int64: int64(n.Int16), Valid: n.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Int2) Scan(src any) error {
if src == nil {
*dst = Int2{}
@@ -87,7 +88,7 @@ func (dst *Int2) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Int2) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -95,6 +96,7 @@ func (src Int2) Value() (driver.Value, error) {
return int64(src.Int16), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Int2) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -102,6 +104,7 @@ func (src Int2) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatInt(int64(src.Int16), 10)), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Int2) UnmarshalJSON(b []byte) error {
var n *int16
err := json.Unmarshal(b, &n)
@@ -586,7 +589,7 @@ type Int4 struct {
Valid bool
}
-// ScanInt64 implements the Int64Scanner interface.
+// ScanInt64 implements the [Int64Scanner] interface.
func (dst *Int4) ScanInt64(n Int8) error {
if !n.Valid {
*dst = Int4{}
@@ -604,11 +607,12 @@ func (dst *Int4) ScanInt64(n Int8) error {
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (n Int4) Int64Value() (Int8, error) {
return Int8{Int64: int64(n.Int32), Valid: n.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Int4) Scan(src any) error {
if src == nil {
*dst = Int4{}
@@ -647,7 +651,7 @@ func (dst *Int4) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Int4) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -655,6 +659,7 @@ func (src Int4) Value() (driver.Value, error) {
return int64(src.Int32), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Int4) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -662,6 +667,7 @@ func (src Int4) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatInt(int64(src.Int32), 10)), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Int4) UnmarshalJSON(b []byte) error {
var n *int32
err := json.Unmarshal(b, &n)
@@ -1157,7 +1163,7 @@ type Int8 struct {
Valid bool
}
-// ScanInt64 implements the Int64Scanner interface.
+// ScanInt64 implements the [Int64Scanner] interface.
func (dst *Int8) ScanInt64(n Int8) error {
if !n.Valid {
*dst = Int8{}
@@ -1175,11 +1181,12 @@ func (dst *Int8) ScanInt64(n Int8) error {
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (n Int8) Int64Value() (Int8, error) {
return Int8{Int64: int64(n.Int64), Valid: n.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Int8) Scan(src any) error {
if src == nil {
*dst = Int8{}
@@ -1218,7 +1225,7 @@ func (dst *Int8) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Int8) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -1226,6 +1233,7 @@ func (src Int8) Value() (driver.Value, error) {
return int64(src.Int64), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Int8) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -1233,6 +1241,7 @@ func (src Int8) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatInt(int64(src.Int64), 10)), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Int8) UnmarshalJSON(b []byte) error {
var n *int64
err := json.Unmarshal(b, &n)
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb b/vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb
index e0c8b7a3f..c2d40f60b 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb
@@ -27,7 +27,7 @@ type Int<%= pg_byte_size %> struct {
Valid bool
}
-// ScanInt64 implements the Int64Scanner interface.
+// ScanInt64 implements the [Int64Scanner] interface.
func (dst *Int<%= pg_byte_size %>) ScanInt64(n Int8) error {
if !n.Valid {
*dst = Int<%= pg_byte_size %>{}
@@ -45,11 +45,12 @@ func (dst *Int<%= pg_byte_size %>) ScanInt64(n Int8) error {
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (n Int<%= pg_byte_size %>) Int64Value() (Int8, error) {
return Int8{Int64: int64(n.Int<%= pg_bit_size %>), Valid: n.Valid}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Int<%= pg_byte_size %>) Scan(src any) error {
if src == nil {
*dst = Int<%= pg_byte_size %>{}
@@ -88,7 +89,7 @@ func (dst *Int<%= pg_byte_size %>) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Int<%= pg_byte_size %>) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -96,6 +97,7 @@ func (src Int<%= pg_byte_size %>) Value() (driver.Value, error) {
return int64(src.Int<%= pg_bit_size %>), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Int<%= pg_byte_size %>) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -103,6 +105,7 @@ func (src Int<%= pg_byte_size %>) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatInt(int64(src.Int<%= pg_bit_size %>), 10)), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Int<%= pg_byte_size %>) UnmarshalJSON(b []byte) error {
var n *int<%= pg_bit_size %>
err := json.Unmarshal(b, &n)
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/interval.go b/vendor/github.com/jackc/pgx/v5/pgtype/interval.go
index 4b5116295..ba5e818f0 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/interval.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/interval.go
@@ -33,16 +33,18 @@ type Interval struct {
Valid bool
}
+// ScanInterval implements the [IntervalScanner] interface.
func (interval *Interval) ScanInterval(v Interval) error {
*interval = v
return nil
}
+// IntervalValue implements the [IntervalValuer] interface.
func (interval Interval) IntervalValue() (Interval, error) {
return interval, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (interval *Interval) Scan(src any) error {
if src == nil {
*interval = Interval{}
@@ -57,7 +59,7 @@ func (interval *Interval) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (interval Interval) Value() (driver.Value, error) {
if !interval.Valid {
return nil, nil
@@ -157,7 +159,6 @@ func (encodePlanIntervalCodecText) Encode(value any, buf []byte) (newBuf []byte,
}
func (IntervalCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/line.go b/vendor/github.com/jackc/pgx/v5/pgtype/line.go
index 4ae8003e8..10efc8ce7 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/line.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/line.go
@@ -24,11 +24,13 @@ type Line struct {
Valid bool
}
+// ScanLine implements the [LineScanner] interface.
func (line *Line) ScanLine(v Line) error {
*line = v
return nil
}
+// LineValue implements the [LineValuer] interface.
func (line Line) LineValue() (Line, error) {
return line, nil
}
@@ -37,7 +39,7 @@ func (line *Line) Set(src any) error {
return fmt.Errorf("cannot convert %v to Line", src)
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (line *Line) Scan(src any) error {
if src == nil {
*line = Line{}
@@ -52,7 +54,7 @@ func (line *Line) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (line Line) Value() (driver.Value, error) {
if !line.Valid {
return nil, nil
@@ -129,7 +131,6 @@ func (encodePlanLineCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (LineCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/lseg.go b/vendor/github.com/jackc/pgx/v5/pgtype/lseg.go
index 05a86e1c8..ed0d40d2a 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/lseg.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/lseg.go
@@ -24,16 +24,18 @@ type Lseg struct {
Valid bool
}
+// ScanLseg implements the [LsegScanner] interface.
func (lseg *Lseg) ScanLseg(v Lseg) error {
*lseg = v
return nil
}
+// LsegValue implements the [LsegValuer] interface.
func (lseg Lseg) LsegValue() (Lseg, error) {
return lseg, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (lseg *Lseg) Scan(src any) error {
if src == nil {
*lseg = Lseg{}
@@ -48,7 +50,7 @@ func (lseg *Lseg) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (lseg Lseg) Value() (driver.Value, error) {
if !lseg.Valid {
return nil, nil
@@ -127,7 +129,6 @@ func (encodePlanLsegCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (LsegCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/multirange.go b/vendor/github.com/jackc/pgx/v5/pgtype/multirange.go
index e57637880..4fe6dd40d 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/multirange.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/multirange.go
@@ -374,7 +374,6 @@ parseValueLoop:
}
return elements, nil
-
}
func parseRange(buf *bytes.Buffer) (string, error) {
@@ -403,8 +402,8 @@ func parseRange(buf *bytes.Buffer) (string, error) {
// Multirange is a generic multirange type.
//
-// T should implement RangeValuer and *T should implement RangeScanner. However, there does not appear to be a way to
-// enforce the RangeScanner constraint.
+// T should implement [RangeValuer] and *T should implement [RangeScanner]. However, there does not appear to be a way to
+// enforce the [RangeScanner] constraint.
type Multirange[T RangeValuer] []T
func (r Multirange[T]) IsNull() bool {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/numeric.go b/vendor/github.com/jackc/pgx/v5/pgtype/numeric.go
index 4dbec7861..7d236902d 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/numeric.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/numeric.go
@@ -27,16 +27,20 @@ const (
pgNumericNegInfSign = 0xf000
)
-var big0 *big.Int = big.NewInt(0)
-var big1 *big.Int = big.NewInt(1)
-var big10 *big.Int = big.NewInt(10)
-var big100 *big.Int = big.NewInt(100)
-var big1000 *big.Int = big.NewInt(1000)
+var (
+ big0 *big.Int = big.NewInt(0)
+ big1 *big.Int = big.NewInt(1)
+ big10 *big.Int = big.NewInt(10)
+ big100 *big.Int = big.NewInt(100)
+ big1000 *big.Int = big.NewInt(1000)
+)
-var bigNBase *big.Int = big.NewInt(nbase)
-var bigNBaseX2 *big.Int = big.NewInt(nbase * nbase)
-var bigNBaseX3 *big.Int = big.NewInt(nbase * nbase * nbase)
-var bigNBaseX4 *big.Int = big.NewInt(nbase * nbase * nbase * nbase)
+var (
+ bigNBase *big.Int = big.NewInt(nbase)
+ bigNBaseX2 *big.Int = big.NewInt(nbase * nbase)
+ bigNBaseX3 *big.Int = big.NewInt(nbase * nbase * nbase)
+ bigNBaseX4 *big.Int = big.NewInt(nbase * nbase * nbase * nbase)
+)
type NumericScanner interface {
ScanNumeric(v Numeric) error
@@ -54,15 +58,18 @@ type Numeric struct {
Valid bool
}
+// ScanNumeric implements the [NumericScanner] interface.
func (n *Numeric) ScanNumeric(v Numeric) error {
*n = v
return nil
}
+// NumericValue implements the [NumericValuer] interface.
func (n Numeric) NumericValue() (Numeric, error) {
return n, nil
}
+// Float64Value implements the [Float64Valuer] interface.
func (n Numeric) Float64Value() (Float8, error) {
if !n.Valid {
return Float8{}, nil
@@ -92,6 +99,7 @@ func (n Numeric) Float64Value() (Float8, error) {
return Float8{Float64: f, Valid: true}, nil
}
+// ScanInt64 implements the [Int64Scanner] interface.
func (n *Numeric) ScanInt64(v Int8) error {
if !v.Valid {
*n = Numeric{}
@@ -102,6 +110,7 @@ func (n *Numeric) ScanInt64(v Int8) error {
return nil
}
+// Int64Value implements the [Int64Valuer] interface.
func (n Numeric) Int64Value() (Int8, error) {
if !n.Valid {
return Int8{}, nil
@@ -203,7 +212,7 @@ func nbaseDigitsToInt64(src []byte) (accum int64, bytesRead, digitsRead int) {
return accum, rp, digits
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (n *Numeric) Scan(src any) error {
if src == nil {
*n = Numeric{}
@@ -218,7 +227,7 @@ func (n *Numeric) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (n Numeric) Value() (driver.Value, error) {
if !n.Valid {
return nil, nil
@@ -231,6 +240,7 @@ func (n Numeric) Value() (driver.Value, error) {
return string(buf), err
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (n Numeric) MarshalJSON() ([]byte, error) {
if !n.Valid {
return []byte("null"), nil
@@ -243,6 +253,7 @@ func (n Numeric) MarshalJSON() ([]byte, error) {
return n.numberTextBytes(), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (n *Numeric) UnmarshalJSON(src []byte) error {
if bytes.Equal(src, []byte(`null`)) {
*n = Numeric{}
@@ -553,7 +564,6 @@ func encodeNumericText(n Numeric, buf []byte) (newBuf []byte, err error) {
}
func (NumericCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/path.go b/vendor/github.com/jackc/pgx/v5/pgtype/path.go
index 73e0ec52f..81dc1e5b5 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/path.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/path.go
@@ -25,16 +25,18 @@ type Path struct {
Valid bool
}
+// ScanPath implements the [PathScanner] interface.
func (path *Path) ScanPath(v Path) error {
*path = v
return nil
}
+// PathValue implements the [PathValuer] interface.
func (path Path) PathValue() (Path, error) {
return path, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (path *Path) Scan(src any) error {
if src == nil {
*path = Path{}
@@ -49,7 +51,7 @@ func (path *Path) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (path Path) Value() (driver.Value, error) {
if !path.Valid {
return nil, nil
@@ -154,7 +156,6 @@ func (encodePlanPathCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (PathCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go b/vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go
index 22cf66d84..b3ef32078 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go
@@ -2010,7 +2010,7 @@ var valuerReflectType = reflect.TypeFor[driver.Valuer]()
// isNilDriverValuer returns true if value is any type of nil unless it implements driver.Valuer. *T is not considered to implement
// driver.Valuer if it is only implemented by T.
-func isNilDriverValuer(value any) (isNil bool, callNilDriverValuer bool) {
+func isNilDriverValuer(value any) (isNil, callNilDriverValuer bool) {
if value == nil {
return true, false
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/point.go b/vendor/github.com/jackc/pgx/v5/pgtype/point.go
index 09b19bb53..b701513dc 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/point.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/point.go
@@ -30,11 +30,13 @@ type Point struct {
Valid bool
}
+// ScanPoint implements the [PointScanner] interface.
func (p *Point) ScanPoint(v Point) error {
*p = v
return nil
}
+// PointValue implements the [PointValuer] interface.
func (p Point) PointValue() (Point, error) {
return p, nil
}
@@ -68,7 +70,7 @@ func parsePoint(src []byte) (*Point, error) {
return &Point{P: Vec2{x, y}, Valid: true}, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Point) Scan(src any) error {
if src == nil {
*dst = Point{}
@@ -83,7 +85,7 @@ func (dst *Point) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Point) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -96,6 +98,7 @@ func (src Point) Value() (driver.Value, error) {
return string(buf), err
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Point) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -108,6 +111,7 @@ func (src Point) MarshalJSON() ([]byte, error) {
return buff.Bytes(), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Point) UnmarshalJSON(point []byte) error {
p, err := parsePoint(point)
if err != nil {
@@ -178,7 +182,6 @@ func (encodePlanPointCodecText) Encode(value any, buf []byte) (newBuf []byte, er
}
func (PointCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/polygon.go b/vendor/github.com/jackc/pgx/v5/pgtype/polygon.go
index 04b0ba6b0..a84b25fe3 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/polygon.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/polygon.go
@@ -24,16 +24,18 @@ type Polygon struct {
Valid bool
}
+// ScanPolygon implements the [PolygonScanner] interface.
func (p *Polygon) ScanPolygon(v Polygon) error {
*p = v
return nil
}
+// PolygonValue implements the [PolygonValuer] interface.
func (p Polygon) PolygonValue() (Polygon, error) {
return p, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (p *Polygon) Scan(src any) error {
if src == nil {
*p = Polygon{}
@@ -48,7 +50,7 @@ func (p *Polygon) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (p Polygon) Value() (driver.Value, error) {
if !p.Valid {
return nil, nil
@@ -139,7 +141,6 @@ func (encodePlanPolygonCodecText) Encode(value any, buf []byte) (newBuf []byte,
}
func (PolygonCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/range.go b/vendor/github.com/jackc/pgx/v5/pgtype/range.go
index 16427cccd..62d699905 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/range.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/range.go
@@ -191,11 +191,13 @@ type untypedBinaryRange struct {
// 18 = [ = 10010
// 24 = = 11000
-const emptyMask = 1
-const lowerInclusiveMask = 2
-const upperInclusiveMask = 4
-const lowerUnboundedMask = 8
-const upperUnboundedMask = 16
+const (
+ emptyMask = 1
+ lowerInclusiveMask = 2
+ upperInclusiveMask = 4
+ lowerUnboundedMask = 8
+ upperUnboundedMask = 16
+)
func parseUntypedBinaryRange(src []byte) (*untypedBinaryRange, error) {
ubr := &untypedBinaryRange{}
@@ -273,7 +275,6 @@ func parseUntypedBinaryRange(src []byte) (*untypedBinaryRange, error) {
}
return ubr, nil
-
}
// Range is a generic range type.
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go b/vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go
index b3b166045..90b9bd4bb 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go
@@ -121,5 +121,4 @@ func (RecordCodec) DecodeValue(m *Map, oid uint32, format int16, src []byte) (an
default:
return nil, fmt.Errorf("unknown format code %d", format)
}
-
}
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/text.go b/vendor/github.com/jackc/pgx/v5/pgtype/text.go
index 021ee331b..e08b12549 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/text.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/text.go
@@ -19,16 +19,18 @@ type Text struct {
Valid bool
}
+// ScanText implements the [TextScanner] interface.
func (t *Text) ScanText(v Text) error {
*t = v
return nil
}
+// TextValue implements the [TextValuer] interface.
func (t Text) TextValue() (Text, error) {
return t, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Text) Scan(src any) error {
if src == nil {
*dst = Text{}
@@ -47,7 +49,7 @@ func (dst *Text) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Text) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -55,6 +57,7 @@ func (src Text) Value() (driver.Value, error) {
return src.String, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src Text) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -63,6 +66,7 @@ func (src Text) MarshalJSON() ([]byte, error) {
return json.Marshal(src.String)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *Text) UnmarshalJSON(b []byte) error {
var s *string
err := json.Unmarshal(b, &s)
@@ -146,7 +150,6 @@ func (encodePlanTextCodecTextValuer) Encode(value any, buf []byte) (newBuf []byt
}
func (TextCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case TextFormatCode, BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/tid.go b/vendor/github.com/jackc/pgx/v5/pgtype/tid.go
index 9bc2c2a14..05c9e6d98 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/tid.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/tid.go
@@ -35,16 +35,18 @@ type TID struct {
Valid bool
}
+// ScanTID implements the [TIDScanner] interface.
func (b *TID) ScanTID(v TID) error {
*b = v
return nil
}
+// TIDValue implements the [TIDValuer] interface.
func (b TID) TIDValue() (TID, error) {
return b, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *TID) Scan(src any) error {
if src == nil {
*dst = TID{}
@@ -59,7 +61,7 @@ func (dst *TID) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src TID) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -131,7 +133,6 @@ func (encodePlanTIDCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (TIDCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/time.go b/vendor/github.com/jackc/pgx/v5/pgtype/time.go
index f8fd94891..4b8f69083 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/time.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/time.go
@@ -29,16 +29,18 @@ type Time struct {
Valid bool
}
+// ScanTime implements the [TimeScanner] interface.
func (t *Time) ScanTime(v Time) error {
*t = v
return nil
}
+// TimeValue implements the [TimeValuer] interface.
func (t Time) TimeValue() (Time, error) {
return t, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (t *Time) Scan(src any) error {
if src == nil {
*t = Time{}
@@ -58,7 +60,7 @@ func (t *Time) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (t Time) Value() (driver.Value, error) {
if !t.Valid {
return nil, nil
@@ -137,7 +139,6 @@ func (encodePlanTimeCodecText) Encode(value any, buf []byte) (newBuf []byte, err
}
func (TimeCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go b/vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go
index c31f2ac53..861fa8838 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go
@@ -11,8 +11,10 @@ import (
"github.com/jackc/pgx/v5/internal/pgio"
)
-const pgTimestampFormat = "2006-01-02 15:04:05.999999999"
-const jsonISO8601 = "2006-01-02T15:04:05.999999999"
+const (
+ pgTimestampFormat = "2006-01-02 15:04:05.999999999"
+ jsonISO8601 = "2006-01-02T15:04:05.999999999"
+)
type TimestampScanner interface {
ScanTimestamp(v Timestamp) error
@@ -29,16 +31,18 @@ type Timestamp struct {
Valid bool
}
+// ScanTimestamp implements the [TimestampScanner] interface.
func (ts *Timestamp) ScanTimestamp(v Timestamp) error {
*ts = v
return nil
}
+// TimestampValue implements the [TimestampValuer] interface.
func (ts Timestamp) TimestampValue() (Timestamp, error) {
return ts, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (ts *Timestamp) Scan(src any) error {
if src == nil {
*ts = Timestamp{}
@@ -56,7 +60,7 @@ func (ts *Timestamp) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (ts Timestamp) Value() (driver.Value, error) {
if !ts.Valid {
return nil, nil
@@ -68,6 +72,7 @@ func (ts Timestamp) Value() (driver.Value, error) {
return ts.Time, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (ts Timestamp) MarshalJSON() ([]byte, error) {
if !ts.Valid {
return []byte("null"), nil
@@ -87,6 +92,7 @@ func (ts Timestamp) MarshalJSON() ([]byte, error) {
return json.Marshal(s)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (ts *Timestamp) UnmarshalJSON(b []byte) error {
var s *string
err := json.Unmarshal(b, &s)
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go b/vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go
index 7efbcffd2..5d67e47f8 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go
@@ -11,10 +11,12 @@ import (
"github.com/jackc/pgx/v5/internal/pgio"
)
-const pgTimestamptzHourFormat = "2006-01-02 15:04:05.999999999Z07"
-const pgTimestamptzMinuteFormat = "2006-01-02 15:04:05.999999999Z07:00"
-const pgTimestamptzSecondFormat = "2006-01-02 15:04:05.999999999Z07:00:00"
-const microsecFromUnixEpochToY2K = 946684800 * 1000000
+const (
+ pgTimestamptzHourFormat = "2006-01-02 15:04:05.999999999Z07"
+ pgTimestamptzMinuteFormat = "2006-01-02 15:04:05.999999999Z07:00"
+ pgTimestamptzSecondFormat = "2006-01-02 15:04:05.999999999Z07:00:00"
+ microsecFromUnixEpochToY2K = 946684800 * 1000000
+)
const (
negativeInfinityMicrosecondOffset = -9223372036854775808
@@ -36,16 +38,18 @@ type Timestamptz struct {
Valid bool
}
+// ScanTimestamptz implements the [TimestamptzScanner] interface.
func (tstz *Timestamptz) ScanTimestamptz(v Timestamptz) error {
*tstz = v
return nil
}
+// TimestamptzValue implements the [TimestamptzValuer] interface.
func (tstz Timestamptz) TimestamptzValue() (Timestamptz, error) {
return tstz, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (tstz *Timestamptz) Scan(src any) error {
if src == nil {
*tstz = Timestamptz{}
@@ -63,7 +67,7 @@ func (tstz *Timestamptz) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (tstz Timestamptz) Value() (driver.Value, error) {
if !tstz.Valid {
return nil, nil
@@ -75,6 +79,7 @@ func (tstz Timestamptz) Value() (driver.Value, error) {
return tstz.Time, nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (tstz Timestamptz) MarshalJSON() ([]byte, error) {
if !tstz.Valid {
return []byte("null"), nil
@@ -94,6 +99,7 @@ func (tstz Timestamptz) MarshalJSON() ([]byte, error) {
return json.Marshal(s)
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (tstz *Timestamptz) UnmarshalJSON(b []byte) error {
var s *string
err := json.Unmarshal(b, &s)
@@ -225,7 +231,6 @@ func (encodePlanTimestamptzCodecText) Encode(value any, buf []byte) (newBuf []by
}
func (c *TimestamptzCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/uint32.go b/vendor/github.com/jackc/pgx/v5/pgtype/uint32.go
index f2b2fa6d4..e6d4b1cf6 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/uint32.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/uint32.go
@@ -3,6 +3,7 @@ package pgtype
import (
"database/sql/driver"
"encoding/binary"
+ "encoding/json"
"fmt"
"math"
"strconv"
@@ -24,16 +25,18 @@ type Uint32 struct {
Valid bool
}
+// ScanUint32 implements the [Uint32Scanner] interface.
func (n *Uint32) ScanUint32(v Uint32) error {
*n = v
return nil
}
+// Uint32Value implements the [Uint32Valuer] interface.
func (n Uint32) Uint32Value() (Uint32, error) {
return n, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Uint32) Scan(src any) error {
if src == nil {
*dst = Uint32{}
@@ -67,7 +70,7 @@ func (dst *Uint32) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Uint32) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -75,6 +78,31 @@ func (src Uint32) Value() (driver.Value, error) {
return int64(src.Uint32), nil
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
+func (src Uint32) MarshalJSON() ([]byte, error) {
+ if !src.Valid {
+ return []byte("null"), nil
+ }
+ return json.Marshal(src.Uint32)
+}
+
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
+func (dst *Uint32) UnmarshalJSON(b []byte) error {
+ var n *uint32
+ err := json.Unmarshal(b, &n)
+ if err != nil {
+ return err
+ }
+
+ if n == nil {
+ *dst = Uint32{}
+ } else {
+ *dst = Uint32{Uint32: *n, Valid: true}
+ }
+
+ return nil
+}
+
type Uint32Codec struct{}
func (Uint32Codec) FormatSupported(format int16) bool {
@@ -197,7 +225,6 @@ func (encodePlanUint32CodecTextInt64Valuer) Encode(value any, buf []byte) (newBu
}
func (Uint32Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/uint64.go b/vendor/github.com/jackc/pgx/v5/pgtype/uint64.go
index dd2130ebc..68fd16613 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/uint64.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/uint64.go
@@ -24,16 +24,18 @@ type Uint64 struct {
Valid bool
}
+// ScanUint64 implements the [Uint64Scanner] interface.
func (n *Uint64) ScanUint64(v Uint64) error {
*n = v
return nil
}
+// Uint64Value implements the [Uint64Valuer] interface.
func (n Uint64) Uint64Value() (Uint64, error) {
return n, nil
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *Uint64) Scan(src any) error {
if src == nil {
*dst = Uint64{}
@@ -63,7 +65,7 @@ func (dst *Uint64) Scan(src any) error {
return nil
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src Uint64) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -194,7 +196,6 @@ func (encodePlanUint64CodecTextInt64Valuer) Encode(value any, buf []byte) (newBu
}
func (Uint64Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
-
switch format {
case BinaryFormatCode:
switch target.(type) {
diff --git a/vendor/github.com/jackc/pgx/v5/pgtype/uuid.go b/vendor/github.com/jackc/pgx/v5/pgtype/uuid.go
index 0628f193f..83d0c4127 100644
--- a/vendor/github.com/jackc/pgx/v5/pgtype/uuid.go
+++ b/vendor/github.com/jackc/pgx/v5/pgtype/uuid.go
@@ -20,11 +20,13 @@ type UUID struct {
Valid bool
}
+// ScanUUID implements the [UUIDScanner] interface.
func (b *UUID) ScanUUID(v UUID) error {
*b = v
return nil
}
+// UUIDValue implements the [UUIDValuer] interface.
func (b UUID) UUIDValue() (UUID, error) {
return b, nil
}
@@ -67,7 +69,7 @@ func encodeUUID(src [16]byte) string {
return string(buf[:])
}
-// Scan implements the database/sql Scanner interface.
+// Scan implements the [database/sql.Scanner] interface.
func (dst *UUID) Scan(src any) error {
if src == nil {
*dst = UUID{}
@@ -87,7 +89,7 @@ func (dst *UUID) Scan(src any) error {
return fmt.Errorf("cannot scan %T", src)
}
-// Value implements the database/sql/driver Valuer interface.
+// Value implements the [database/sql/driver.Valuer] interface.
func (src UUID) Value() (driver.Value, error) {
if !src.Valid {
return nil, nil
@@ -104,6 +106,7 @@ func (src UUID) String() string {
return encodeUUID(src.Bytes)
}
+// MarshalJSON implements the [encoding/json.Marshaler] interface.
func (src UUID) MarshalJSON() ([]byte, error) {
if !src.Valid {
return []byte("null"), nil
@@ -116,6 +119,7 @@ func (src UUID) MarshalJSON() ([]byte, error) {
return buff.Bytes(), nil
}
+// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
func (dst *UUID) UnmarshalJSON(src []byte) error {
if bytes.Equal(src, []byte("null")) {
*dst = UUID{}
diff --git a/vendor/github.com/jackc/pgx/v5/pgxpool/pool.go b/vendor/github.com/jackc/pgx/v5/pgxpool/pool.go
index e22ed289a..addfb412f 100644
--- a/vendor/github.com/jackc/pgx/v5/pgxpool/pool.go
+++ b/vendor/github.com/jackc/pgx/v5/pgxpool/pool.go
@@ -2,7 +2,7 @@ package pgxpool
import (
"context"
- "fmt"
+ "errors"
"math/rand"
"runtime"
"strconv"
@@ -15,12 +15,14 @@ import (
"github.com/jackc/puddle/v2"
)
-var defaultMaxConns = int32(4)
-var defaultMinConns = int32(0)
-var defaultMinIdleConns = int32(0)
-var defaultMaxConnLifetime = time.Hour
-var defaultMaxConnIdleTime = time.Minute * 30
-var defaultHealthCheckPeriod = time.Minute
+var (
+ defaultMaxConns = int32(4)
+ defaultMinConns = int32(0)
+ defaultMinIdleConns = int32(0)
+ defaultMaxConnLifetime = time.Hour
+ defaultMaxConnIdleTime = time.Minute * 30
+ defaultHealthCheckPeriod = time.Minute
+)
type connResource struct {
conn *pgx.Conn
@@ -84,9 +86,10 @@ type Pool struct {
config *Config
beforeConnect func(context.Context, *pgx.ConnConfig) error
afterConnect func(context.Context, *pgx.Conn) error
- beforeAcquire func(context.Context, *pgx.Conn) bool
+ prepareConn func(context.Context, *pgx.Conn) (bool, error)
afterRelease func(*pgx.Conn) bool
beforeClose func(*pgx.Conn)
+ shouldPing func(context.Context, ShouldPingParams) bool
minConns int32
minIdleConns int32
maxConns int32
@@ -104,6 +107,12 @@ type Pool struct {
closeChan chan struct{}
}
+// ShouldPingParams are the parameters passed to ShouldPing.
+type ShouldPingParams struct {
+ Conn *pgx.Conn
+ IdleDuration time.Duration
+}
+
// Config is the configuration struct for creating a pool. It must be created by [ParseConfig] and then it can be
// modified.
type Config struct {
@@ -119,8 +128,23 @@ type Config struct {
// BeforeAcquire is called before a connection is acquired from the pool. It must return true to allow the
// acquisition or false to indicate that the connection should be destroyed and a different connection should be
// acquired.
+ //
+ // Deprecated: Use PrepareConn instead. If both PrepareConn and BeforeAcquire are set, PrepareConn will take
+ // precedence, ignoring BeforeAcquire.
BeforeAcquire func(context.Context, *pgx.Conn) bool
+ // PrepareConn is called before a connection is acquired from the pool. If this function returns true, the connection
+ // is considered valid, otherwise the connection is destroyed. If the function returns a non-nil error, the instigating
+ // query will fail with the returned error.
+ //
+ // Specifically, this means that:
+ //
+ // - If it returns true and a nil error, the query proceeds as normal.
+ // - If it returns true and an error, the connection will be returned to the pool, and the instigating query will fail with the returned error.
+ // - If it returns false, and an error, the connection will be destroyed, and the query will fail with the returned error.
+ // - If it returns false and a nil error, the connection will be destroyed, and the instigating query will be retried on a new connection.
+ PrepareConn func(context.Context, *pgx.Conn) (bool, error)
+
// AfterRelease is called after a connection is released, but before it is returned to the pool. It must return true to
// return the connection to the pool or false to destroy the connection.
AfterRelease func(*pgx.Conn) bool
@@ -128,6 +152,10 @@ type Config struct {
// BeforeClose is called right before a connection is closed and removed from the pool.
BeforeClose func(*pgx.Conn)
+ // ShouldPing is called after a connection is acquired from the pool. If it returns true, the connection is pinged to check for liveness.
+ // If this func is not set, the default behavior is to ping connections that have been idle for at least 1 second.
+ ShouldPing func(context.Context, ShouldPingParams) bool
+
// MaxConnLifetime is the duration since creation after which a connection will be automatically closed.
MaxConnLifetime time.Duration
@@ -190,11 +218,18 @@ func NewWithConfig(ctx context.Context, config *Config) (*Pool, error) {
panic("config must be created by ParseConfig")
}
+ prepareConn := config.PrepareConn
+ if prepareConn == nil && config.BeforeAcquire != nil {
+ prepareConn = func(ctx context.Context, conn *pgx.Conn) (bool, error) {
+ return config.BeforeAcquire(ctx, conn), nil
+ }
+ }
+
p := &Pool{
config: config,
beforeConnect: config.BeforeConnect,
afterConnect: config.AfterConnect,
- beforeAcquire: config.BeforeAcquire,
+ prepareConn: prepareConn,
afterRelease: config.AfterRelease,
beforeClose: config.BeforeClose,
minConns: config.MinConns,
@@ -216,6 +251,14 @@ func NewWithConfig(ctx context.Context, config *Config) (*Pool, error) {
p.releaseTracer = t
}
+ if config.ShouldPing != nil {
+ p.shouldPing = config.ShouldPing
+ } else {
+ p.shouldPing = func(ctx context.Context, params ShouldPingParams) bool {
+ return params.IdleDuration > time.Second
+ }
+ }
+
var err error
p.p, err = puddle.NewPool(
&puddle.Config[*connResource]{
@@ -321,10 +364,10 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_max_conns")
n, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- return nil, fmt.Errorf("cannot parse pool_max_conns: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conns", err)
}
if n < 1 {
- return nil, fmt.Errorf("pool_max_conns too small: %d", n)
+ return nil, pgconn.NewParseConfigError(connString, "pool_max_conns too small", err)
}
config.MaxConns = int32(n)
} else {
@@ -338,7 +381,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_min_conns")
n, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- return nil, fmt.Errorf("cannot parse pool_min_conns: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_conns", err)
}
config.MinConns = int32(n)
} else {
@@ -349,7 +392,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_min_idle_conns")
n, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- return nil, fmt.Errorf("cannot parse pool_min_idle_conns: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_idle_conns", err)
}
config.MinIdleConns = int32(n)
} else {
@@ -360,7 +403,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime")
d, err := time.ParseDuration(s)
if err != nil {
- return nil, fmt.Errorf("invalid pool_max_conn_lifetime: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime", err)
}
config.MaxConnLifetime = d
} else {
@@ -371,7 +414,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_max_conn_idle_time")
d, err := time.ParseDuration(s)
if err != nil {
- return nil, fmt.Errorf("invalid pool_max_conn_idle_time: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_idle_time", err)
}
config.MaxConnIdleTime = d
} else {
@@ -382,7 +425,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_health_check_period")
d, err := time.ParseDuration(s)
if err != nil {
- return nil, fmt.Errorf("invalid pool_health_check_period: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_health_check_period", err)
}
config.HealthCheckPeriod = d
} else {
@@ -393,7 +436,7 @@ func ParseConfig(connString string) (*Config, error) {
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime_jitter")
d, err := time.ParseDuration(s)
if err != nil {
- return nil, fmt.Errorf("invalid pool_max_conn_lifetime_jitter: %w", err)
+ return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime_jitter", err)
}
config.MaxConnLifetimeJitter = d
}
@@ -545,7 +588,10 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
}()
}
- for {
+ // Try to acquire from the connection pool up to maxConns + 1 times, so that
+ // any that fatal errors would empty the pool and still at least try 1 fresh
+ // connection.
+ for range p.maxConns + 1 {
res, err := p.p.Acquire(ctx)
if err != nil {
return nil, err
@@ -553,7 +599,8 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
cr := res.Value()
- if res.IdleDuration() > time.Second {
+ shouldPingParams := ShouldPingParams{Conn: cr.conn, IdleDuration: res.IdleDuration()}
+ if p.shouldPing(ctx, shouldPingParams) {
err := cr.conn.Ping(ctx)
if err != nil {
res.Destroy()
@@ -561,12 +608,25 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
}
}
- if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) {
- return cr.getConn(p, res), nil
+ if p.prepareConn != nil {
+ ok, err := p.prepareConn(ctx, cr.conn)
+ if !ok {
+ res.Destroy()
+ }
+ if err != nil {
+ if ok {
+ res.Release()
+ }
+ return nil, err
+ }
+ if !ok {
+ continue
+ }
}
- res.Destroy()
+ return cr.getConn(p, res), nil
}
+ return nil, errors.New("pgxpool: detected infinite loop acquiring connection; likely bug in PrepareConn or BeforeAcquire hook")
}
// AcquireFunc acquires a *Conn and calls f with that *Conn. ctx will only affect the Acquire. It has no effect on the
@@ -589,11 +649,14 @@ func (p *Pool) AcquireAllIdle(ctx context.Context) []*Conn {
conns := make([]*Conn, 0, len(resources))
for _, res := range resources {
cr := res.Value()
- if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) {
- conns = append(conns, cr.getConn(p, res))
- } else {
- res.Destroy()
+ if p.prepareConn != nil {
+ ok, err := p.prepareConn(ctx, cr.conn)
+ if !ok || err != nil {
+ res.Destroy()
+ continue
+ }
}
+ conns = append(conns, cr.getConn(p, res))
}
return conns
diff --git a/vendor/github.com/jackc/pgx/v5/rows.go b/vendor/github.com/jackc/pgx/v5/rows.go
index 3e64a3adb..a5725fdd4 100644
--- a/vendor/github.com/jackc/pgx/v5/rows.go
+++ b/vendor/github.com/jackc/pgx/v5/rows.go
@@ -41,22 +41,19 @@ type Rows interface {
// when there was an error executing the query.
FieldDescriptions() []pgconn.FieldDescription
- // Next prepares the next row for reading. It returns true if there is another
- // row and false if no more rows are available or a fatal error has occurred.
- // It automatically closes rows when all rows are read.
+ // Next prepares the next row for reading. It returns true if there is another row and false if no more rows are
+ // available or a fatal error has occurred. It automatically closes rows upon returning false (whether due to all rows
+ // having been read or due to an error).
//
- // Callers should check rows.Err() after rows.Next() returns false to detect
- // whether result-set reading ended prematurely due to an error. See
- // Conn.Query for details.
+ // Callers should check rows.Err() after rows.Next() returns false to detect whether result-set reading ended
+ // prematurely due to an error. See Conn.Query for details.
//
- // For simpler error handling, consider using the higher-level pgx v5
- // CollectRows() and ForEachRow() helpers instead.
+ // For simpler error handling, consider using the higher-level pgx v5 CollectRows() and ForEachRow() helpers instead.
Next() bool
- // Scan reads the values from the current row into dest values positionally.
- // dest can include pointers to core types, values implementing the Scanner
- // interface, and nil. nil will skip the value entirely. It is an error to
- // call Scan without first calling Next() and checking that it returned true.
+ // Scan reads the values from the current row into dest values positionally. dest can include pointers to core types,
+ // values implementing the Scanner interface, and nil. nil will skip the value entirely. It is an error to call Scan
+ // without first calling Next() and checking that it returned true. Rows is automatically closed upon error.
Scan(dest ...any) error
// Values returns the decoded row values. As with Scan(), it is an error to
@@ -563,7 +560,7 @@ func (rs *mapRowScanner) ScanRow(rows Rows) error {
return nil
}
-// RowToStructByPos returns a T scanned from row. T must be a struct. T must have the same number a public fields as row
+// RowToStructByPos returns a T scanned from row. T must be a struct. T must have the same number of public fields as row
// has fields. The row and T fields will be matched by position. If the "db" struct tag is "-" then the field will be
// ignored.
func RowToStructByPos[T any](row CollectableRow) (T, error) {
diff --git a/vendor/github.com/jackc/pgx/v5/stdlib/sql.go b/vendor/github.com/jackc/pgx/v5/stdlib/sql.go
index 4924fe41a..939b9636d 100644
--- a/vendor/github.com/jackc/pgx/v5/stdlib/sql.go
+++ b/vendor/github.com/jackc/pgx/v5/stdlib/sql.go
@@ -471,7 +471,8 @@ func (c *Conn) ExecContext(ctx context.Context, query string, argsV []driver.Nam
return nil, driver.ErrBadConn
}
- args := namedValueToInterface(argsV)
+ args := make([]any, len(argsV))
+ convertNamedArguments(args, argsV)
commandTag, err := c.conn.Exec(ctx, query, args...)
// if we got a network error before we had a chance to send the query, retry
@@ -488,8 +489,9 @@ func (c *Conn) QueryContext(ctx context.Context, query string, argsV []driver.Na
return nil, driver.ErrBadConn
}
- args := []any{databaseSQLResultFormats}
- args = append(args, namedValueToInterface(argsV)...)
+ args := make([]any, 1+len(argsV))
+ args[0] = databaseSQLResultFormats
+ convertNamedArguments(args[1:], argsV)
rows, err := c.conn.Query(ctx, query, args...)
if err != nil {
@@ -848,28 +850,14 @@ func (r *Rows) Next(dest []driver.Value) error {
return nil
}
-func valueToInterface(argsV []driver.Value) []any {
- args := make([]any, 0, len(argsV))
- for _, v := range argsV {
- if v != nil {
- args = append(args, v.(any))
- } else {
- args = append(args, nil)
- }
- }
- return args
-}
-
-func namedValueToInterface(argsV []driver.NamedValue) []any {
- args := make([]any, 0, len(argsV))
- for _, v := range argsV {
+func convertNamedArguments(args []any, argsV []driver.NamedValue) {
+ for i, v := range argsV {
if v.Value != nil {
- args = append(args, v.Value.(any))
+ args[i] = v.Value.(any)
} else {
- args = append(args, nil)
+ args[i] = nil
}
}
- return args
}
type wrapTx struct {