Documentation
¶
Overview ¶
Package volatility provides shared function volatility marker detection and fixing. This package centralizes volatility marker logic to eliminate duplication across plugins.
PostgreSQL Function Volatility:
- IMMUTABLE: Function always returns same result for same inputs (pure function)
- STABLE: Function returns same result within a transaction (reads database state)
- VOLATILE: Function can have side effects or return different results (default)
Auth functions MUST be marked STABLE because they:
- Read session state (JWT claims)
- Are used in RLS policies and index predicates
- Return consistent values within a transaction
Package volatility provides AST-based function volatility marker detection and fixing. This refactored version uses pg_query_go AST parsing instead of regex for more accurate results.
Index ¶
- func FixSQL(sql string, registry *FunctionRegistry) (string, error)
- type ASTVolatilityFixer
- type FunctionRegistry
- func (fr *FunctionRegistry) GetVolatility(functionName string) (VolatilityType, bool)
- func (fr *FunctionRegistry) IsRegistered(functionName string) bool
- func (fr *FunctionRegistry) Register(functionName string, volatility VolatilityType)
- func (fr *FunctionRegistry) RegisterMultiple(functionNames []string, volatility VolatilityType)
- type VolatilityFixer
- type VolatilityType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ASTVolatilityFixer ¶
type ASTVolatilityFixer struct {
// contains filtered or unexported fields
}
ASTVolatilityFixer adds volatility markers to PostgreSQL functions using AST parsing
func NewASTVolatilityFixer ¶
func NewASTVolatilityFixer(registry *FunctionRegistry) *ASTVolatilityFixer
NewASTVolatilityFixer creates a new AST-based volatility fixer with a function registry
type FunctionRegistry ¶
type FunctionRegistry struct {
// contains filtered or unexported fields
}
FunctionRegistry tracks functions that need volatility markers
func CreateClerkRegistry ¶
func CreateClerkRegistry() *FunctionRegistry
CreateClerkRegistry creates a function registry for Clerk auth functions
func CreateDrizzleRegistry ¶
func CreateDrizzleRegistry() *FunctionRegistry
CreateDrizzleRegistry creates a function registry for Drizzle-generated functions
func CreatePrismaRegistry ¶
func CreatePrismaRegistry() *FunctionRegistry
CreatePrismaRegistry creates a function registry for Prisma-generated functions
func CreateSupabaseRegistry ¶
func CreateSupabaseRegistry() *FunctionRegistry
CreateSupabaseRegistry creates a function registry for Supabase auth functions
func NewFunctionRegistry ¶
func NewFunctionRegistry() *FunctionRegistry
NewFunctionRegistry creates a new function registry
func (*FunctionRegistry) GetVolatility ¶
func (fr *FunctionRegistry) GetVolatility(functionName string) (VolatilityType, bool)
GetVolatility returns the desired volatility for a function, or empty if not registered
func (*FunctionRegistry) IsRegistered ¶
func (fr *FunctionRegistry) IsRegistered(functionName string) bool
IsRegistered checks if a function is in the registry
func (*FunctionRegistry) Register ¶
func (fr *FunctionRegistry) Register(functionName string, volatility VolatilityType)
Register adds a function to the registry with its desired volatility
func (*FunctionRegistry) RegisterMultiple ¶
func (fr *FunctionRegistry) RegisterMultiple(functionNames []string, volatility VolatilityType)
RegisterMultiple adds multiple functions with the same volatility
type VolatilityFixer ¶
type VolatilityFixer struct {
// contains filtered or unexported fields
}
VolatilityFixer adds volatility markers to PostgreSQL functions
func NewVolatilityFixer ¶
func NewVolatilityFixer(registry *FunctionRegistry) *VolatilityFixer
NewVolatilityFixer creates a new volatility fixer with a function registry
type VolatilityType ¶
type VolatilityType string
VolatilityType represents PostgreSQL function volatility levels
const ( Immutable VolatilityType = "IMMUTABLE" Stable VolatilityType = "STABLE" Volatile VolatilityType = "VOLATILE" )