46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package stmtcache is a cache for statement descriptions.
 | |
| package stmtcache
 | |
| 
 | |
| import (
 | |
| 	"crypto/sha256"
 | |
| 	"encoding/hex"
 | |
| 
 | |
| 	"github.com/jackc/pgx/v5/pgconn"
 | |
| )
 | |
| 
 | |
| // 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.
 | |
| type Cache interface {
 | |
| 	// Get returns the statement description for sql. Returns nil if not found.
 | |
| 	Get(sql string) *pgconn.StatementDescription
 | |
| 
 | |
| 	// Put stores sd in the cache. Put panics if sd.SQL is "". Put does nothing if sd.SQL already exists in the cache.
 | |
| 	Put(sd *pgconn.StatementDescription)
 | |
| 
 | |
| 	// Invalidate invalidates statement description identified by sql. Does nothing if not found.
 | |
| 	Invalidate(sql string)
 | |
| 
 | |
| 	// InvalidateAll invalidates all statement descriptions.
 | |
| 	InvalidateAll()
 | |
| 
 | |
| 	// GetInvalidated returns a slice of all statement descriptions invalidated since the last call to RemoveInvalidated.
 | |
| 	GetInvalidated() []*pgconn.StatementDescription
 | |
| 
 | |
| 	// RemoveInvalidated removes all invalidated statement descriptions. No other calls to Cache must be made between a
 | |
| 	// call to GetInvalidated and RemoveInvalidated or RemoveInvalidated may remove statement descriptions that were
 | |
| 	// never seen by the call to GetInvalidated.
 | |
| 	RemoveInvalidated()
 | |
| 
 | |
| 	// Len returns the number of cached prepared statement descriptions.
 | |
| 	Len() int
 | |
| 
 | |
| 	// Cap returns the maximum number of cached prepared statement descriptions.
 | |
| 	Cap() int
 | |
| }
 |