summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go')
-rw-r--r--vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go31
1 files changed, 7 insertions, 24 deletions
diff --git a/vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go b/vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go
index e1bdcba57..b2940e230 100644
--- a/vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go
+++ b/vendor/github.com/jackc/pgx/v5/internal/stmtcache/stmtcache.go
@@ -2,18 +2,17 @@
package stmtcache
import (
- "strconv"
- "sync/atomic"
+ "crypto/sha256"
+ "encoding/hex"
"github.com/jackc/pgx/v5/pgconn"
)
-var stmtCounter int64
-
-// NextStatementName returns a statement name that will be unique for the lifetime of the program.
-func NextStatementName() string {
- n := atomic.AddInt64(&stmtCounter, 1)
- return "stmtcache_" + strconv.FormatInt(n, 10)
+// StatementName returns a statement name that will be stable for sql across multiple connections and program
+// executions.
+func StatementName(sql string) string {
+ digest := sha256.Sum256([]byte(sql))
+ return "stmtcache_" + hex.EncodeToString(digest[0:24])
}
// Cache caches statement descriptions.
@@ -39,19 +38,3 @@ type Cache interface {
// Cap returns the maximum number of cached prepared statement descriptions.
Cap() int
}
-
-func IsStatementInvalid(err error) bool {
- pgErr, ok := err.(*pgconn.PgError)
- if !ok {
- return false
- }
-
- // https://github.com/jackc/pgx/issues/1162
- //
- // We used to look for the message "cached plan must not change result type". However, that message can be localized.
- // Unfortunately, error code "0A000" - "FEATURE NOT SUPPORTED" is used for many different errors and the only way to
- // tell the difference is by the message. But all that happens is we clear a statement that we otherwise wouldn't
- // have so it should be safe.
- possibleInvalidCachedPlanError := pgErr.Code == "0A000"
- return possibleInvalidCachedPlanError
-}