volatility

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2026 License: MIT Imports: 3 Imported by: 0

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func FixSQL

func FixSQL(sql string, registry *FunctionRegistry) (string, error)

FixSQL is a convenience function that creates a fixer and fixes SQL in one call Used for quick one-off transformations

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

func (*ASTVolatilityFixer) Fix

func (vf *ASTVolatilityFixer) Fix(sql string) (string, error)

Fix adds volatility markers to registered functions in the SQL using AST parsing Returns the modified SQL with volatility markers added

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

func (*VolatilityFixer) Fix

func (vf *VolatilityFixer) Fix(sql string) (string, error)

Fix adds volatility markers to registered functions in the SQL Returns the modified SQL with volatility markers added

type VolatilityType

type VolatilityType string

VolatilityType represents PostgreSQL function volatility levels

const (
	Immutable VolatilityType = "IMMUTABLE"
	Stable    VolatilityType = "STABLE"
	Volatile  VolatilityType = "VOLATILE"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL