Documentation
¶
Overview ¶
Package sqlinspect provides reusable, read-only SQL catalog inspection.
Index ¶
- Constants
- func ListDatabases(ctx context.Context, db *sql.DB, driver string) ([]string, error)
- func NewMemoryCache() *inspection.Memo[Catalog]
- type Cache
- type Catalog
- type Column
- type ForeignKey
- type Index
- type Limits
- type Options
- type Relation
- type Routine
- type RoutineParameter
- type Schema
- type Trigger
Constants ¶
const ( DefaultMaxRelations = 5000 DefaultMaxColumns = 50000 DefaultMaxRoutines = 2000 DefaultMaxDefinitionBytes = 4 * 1024 * 1024 )
Variables ¶
This section is empty.
Functions ¶
func ListDatabases ¶
ListDatabases returns databases accessible to the current connection user.
func NewMemoryCache ¶ added in v0.1.35
func NewMemoryCache() *inspection.Memo[Catalog]
NewMemoryCache creates an isolated cache with the SQL freshness and capacity policy. Reuse it across inspections; nil Options.Cache uses the shared default. Like all Memos, it registers with inspection.Stats and inspection.Flush.
Types ¶
type Cache ¶ added in v0.1.35
type Cache interface {
Get(context.Context, inspection.GetOptions[Catalog]) (inspection.Result[Catalog], error)
}
Cache owns catalogue storage and fill coordination. Implementations must honor GetOptions.Refresh and inspection.WithRefresh, coalesce concurrent fills, and return cache metadata, including stale values alongside refresh errors. Load runs locally; a remote implementation stores the Catalog, not the callback. *inspection.Memo[Catalog] implements this interface.
type Catalog ¶
type Catalog struct {
Driver string `json:"driver"`
Database string `json:"database,omitempty"`
Databases []string `json:"databases,omitempty"`
DefaultSchema string `json:"defaultSchema,omitempty"`
Schemas []Schema `json:"schemas"`
Truncated bool `json:"truncated,omitempty"`
TruncateReason string `json:"truncateReason,omitempty"`
Cache *inspection.CacheMetadata `json:"cache,omitempty"`
}
func Inspect ¶
func Inspect(ctx context.Context, db *sql.DB, driver string, limits Limits, options Options) (Catalog, error)
Inspect returns a cached catalogue of the current database, with freshness metadata. Pass either a caller-owned db or Options.Open and identify its connection, authorization context, revision, and selected database in CacheKey. Keep a caller-owned db open while background refreshes may use it. Returned slices and nested pointers are shared cache values and must be treated as read-only. A failed explicit refresh returns the last known catalogue alongside its error.
type Column ¶
type Column struct {
Name string `json:"name"`
DataType string `json:"dataType,omitempty"`
Ordinal int `json:"ordinal,omitempty"`
Nullable *bool `json:"nullable,omitempty"`
Default *string `json:"default,omitempty"`
Identity bool `json:"identity,omitempty"`
PrimaryKey bool `json:"primaryKey,omitempty"`
Unique bool `json:"unique,omitempty"`
MaxLength *int `json:"maxLength,omitempty"`
NumericPrecision *int `json:"numericPrecision,omitempty"`
NumericScale *int `json:"numericScale,omitempty"`
Comment *string `json:"comment,omitempty"`
EnumValues []string `json:"enumValues,omitempty"`
}
type ForeignKey ¶ added in v0.1.32
type Options ¶ added in v0.1.35
type Options struct {
// CacheKey must isolate the connection, authorization/context scope, selected
// database, and connection revision. Change it when credentials or connection
// settings change. Use an opaque identity, never credentials or a raw DSN.
// Driver and effective limits are appended by Inspect.
CacheKey string
// Cache replaces the default process-lifetime memory cache; it is not layered
// with it. A shared backend needs CacheKey values stable across processes.
Cache Cache
Refresh bool
// Open is used instead of db for short-lived connections. It is called only
// on a fill, with the fill context, and Inspect closes the returned pool.
Open func(context.Context) (*sql.DB, error)
}
Options identifies the source independently of transient SQL pool handles.
type Relation ¶
type Relation struct {
Name string `json:"name"`
Type string `json:"type"`
ViewDef string `json:"viewDefinition,omitempty"`
Columns []Column `json:"columns"`
Indexes []Index `json:"indexes,omitempty"`
ForeignKeys []ForeignKey `json:"foreignKeys,omitempty"`
Triggers []Trigger `json:"triggers,omitempty"`
}