summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go')
-rw-r--r--vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go b/vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go
new file mode 100644
index 000000000..d083e1b4f
--- /dev/null
+++ b/vendor/github.com/jackc/pgconn/stmtcache/stmtcache.go
@@ -0,0 +1,58 @@
+// Package stmtcache is a cache that can be used to implement lazy prepared statements.
+package stmtcache
+
+import (
+ "context"
+
+ "github.com/jackc/pgconn"
+)
+
+const (
+ ModePrepare = iota // Cache should prepare named statements.
+ ModeDescribe // Cache should prepare the anonymous prepared statement to only fetch the description of the statement.
+)
+
+// Cache prepares and caches prepared statement descriptions.
+type Cache interface {
+ // Get returns the prepared statement description for sql preparing or describing the sql on the server as needed.
+ Get(ctx context.Context, sql string) (*pgconn.StatementDescription, error)
+
+ // Clear removes all entries in the cache. Any prepared statements will be deallocated from the PostgreSQL session.
+ Clear(ctx context.Context) error
+
+ // StatementErrored informs the cache that the given statement resulted in an error when it
+ // was last used against the database. In some cases, this will cause the cache to maer that
+ // statement as bad. The bad statement will instead be flushed during the next call to Get
+ // that occurs outside of a failed transaction.
+ StatementErrored(sql string, err error)
+
+ // Len returns the number of cached prepared statement descriptions.
+ Len() int
+
+ // Cap returns the maximum number of cached prepared statement descriptions.
+ Cap() int
+
+ // Mode returns the mode of the cache (ModePrepare or ModeDescribe)
+ Mode() int
+}
+
+// New returns the preferred cache implementation for mode and cap. mode is either ModePrepare or ModeDescribe. cap is
+// the maximum size of the cache.
+func New(conn *pgconn.PgConn, mode int, cap int) Cache {
+ mustBeValidMode(mode)
+ mustBeValidCap(cap)
+
+ return NewLRU(conn, mode, cap)
+}
+
+func mustBeValidMode(mode int) {
+ if mode != ModePrepare && mode != ModeDescribe {
+ panic("mode must be ModePrepare or ModeDescribe")
+ }
+}
+
+func mustBeValidCap(cap int) {
+ if cap < 1 {
+ panic("cache must have cap of >= 1")
+ }
+}