Documentation
¶
Index ¶
- Constants
- Variables
- type Catalog
- type DBColumnInfo
- type DBConstraintInfo
- type DBInfo
- func (s *DBInfo) Build(ctx context.Context, engine engines.Engine, opts compiler.Options) error
- func (s *DBInfo) CompileOptions() compiler.Options
- func (s *DBInfo) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
- func (s *DBInfo) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *DBInfo) Description() string
- func (s *DBInfo) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (s *DBInfo) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
- func (s *DBInfo) Engine() engines.Engine
- func (s *DBInfo) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *DBInfo) ForName(ctx context.Context, name string) *ast.Definition
- func (s *DBInfo) Name() string
- func (s *DBInfo) Version(_ context.Context) (string, error)
- type DBSchemaInfo
- type DBTableInfo
- type DBViewInfo
- type DiffResult
- func (d *DiffResult) DefinitionExtensions(_ context.Context, name string) iter.Seq[*ast.Definition]
- func (d *DiffResult) Definitions(_ context.Context) iter.Seq[*ast.Definition]
- func (d *DiffResult) DirectiveDefinitions(_ context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (d *DiffResult) DirectiveForName(_ context.Context, _ string) *ast.DirectiveDefinition
- func (d *DiffResult) Extensions(_ context.Context) iter.Seq[*ast.Definition]
- func (d *DiffResult) ForName(_ context.Context, name string) *ast.Definition
- type ExtensionCatalog
- type FileSource
- func (s *FileSource) CompileOptions() compiler.Options
- func (s *FileSource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
- func (s *FileSource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *FileSource) Description() string
- func (s *FileSource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (s *FileSource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
- func (s *FileSource) Engine() engines.Engine
- func (s *FileSource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *FileSource) ForName(ctx context.Context, name string) *ast.Definition
- func (s *FileSource) Name() string
- func (s *FileSource) Reload(_ context.Context) error
- func (s *FileSource) Version(_ context.Context) (string, error)
- type IncrementalCatalog
- type MergedCatalog
- func (mc *MergedCatalog) CompileOptions() compiler.Options
- func (mc *MergedCatalog) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
- func (mc *MergedCatalog) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
- func (mc *MergedCatalog) Description() string
- func (mc *MergedCatalog) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (mc *MergedCatalog) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
- func (mc *MergedCatalog) Engine() engines.Engine
- func (mc *MergedCatalog) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
- func (mc *MergedCatalog) ForName(ctx context.Context, name string) *ast.Definition
- func (mc *MergedCatalog) Name() string
- func (mc *MergedCatalog) Reload(ctx context.Context) error
- func (mc *MergedCatalog) Version(ctx context.Context) (string, error)
- type ReloadableCatalog
- type StringSource
- func (s *StringSource) CompileOptions() compiler.Options
- func (s *StringSource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
- func (s *StringSource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *StringSource) Description() string
- func (s *StringSource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (s *StringSource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
- func (s *StringSource) Engine() engines.Engine
- func (s *StringSource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *StringSource) ForName(ctx context.Context, name string) *ast.Definition
- func (s *StringSource) Name() string
- func (s *StringSource) Version(_ context.Context) (string, error)
- type URISource
- func (s *URISource) CompileOptions() compiler.Options
- func (s *URISource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
- func (s *URISource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *URISource) Description() string
- func (s *URISource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
- func (s *URISource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
- func (s *URISource) Engine() engines.Engine
- func (s *URISource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
- func (s *URISource) ForName(ctx context.Context, name string) *ast.Definition
- func (s *URISource) Name() string
- func (s *URISource) Reload(ctx context.Context) error
- func (s *URISource) Version(_ context.Context) (string, error)
Constants ¶
const ( FileSourceType types.CatalogSourceType = "localFS" URISourceType types.CatalogSourceType = "uri" URIFileSourceType types.CatalogSourceType = "uriFile" TextSourceType types.CatalogSourceType = "text" )
Variables ¶
var ErrNoSourcesByURI = errors.New("no sources found by URI")
Functions ¶
This section is empty.
Types ¶
type Catalog ¶
type Catalog interface {
compiler.Catalog
Name() string
Description() string
// Version returns a version identifier for the catalog contents.
// For file-based sources, this is a content hash (changes when files change).
// For dynamic sources (URI, DB, HTTP), this is a timestamp (always recompiles).
// For runtime sources, this is an embedded version constant.
Version(ctx context.Context) (string, error)
Engine() engines.Engine
}
type DBColumnInfo ¶
type DBColumnInfo struct {
Name string `json:"name"`
Description string `json:"description"`
DataType string `json:"data_type"`
IsNullable bool `json:"is_nullable"`
Default string `json:"default,omitempty"`
}
func (*DBColumnInfo) Definition ¶
func (c *DBColumnInfo) Definition() (*ast.FieldDefinition, error)
type DBConstraintInfo ¶
type DBConstraintInfo struct {
Name string `json:"name"`
Type string `json:"type"` // e.g., PRIMARY KEY, FOREIGN KEY, UNIQUE
Columns []string `json:"columns"` // list of column names involved in the constraint
ReferencesSchema string `json:"references_schema_name,omitempty"` // for foreign keys, the schema of the referenced table
ReferencesTable string `json:"references_table_name,omitempty"` // for foreign keys
ReferencesColumns []string `json:"references_columns,omitempty"` // columns in the referenced table
}
type DBInfo ¶
type DBInfo struct {
InfoName string `json:"name"`
InfoDesc string `json:"description"`
Type string `json:"type"` // e.g., "mysql", "postgres", "duckdb", "memory", etc.
SchemaInfo []DBSchemaInfo `json:"schemas"`
// contains filtered or unexported fields
}
DBInfo holds database introspection results and implements catalog.Catalog directly. Call Build() after deserialization to initialize the catalog provider.
func DescribeDataSource ¶
func (*DBInfo) CompileOptions ¶
func (*DBInfo) DefinitionExtensions ¶
func (*DBInfo) Definitions ¶
func (*DBInfo) Description ¶
func (*DBInfo) DirectiveDefinitions ¶
func (*DBInfo) DirectiveForName ¶
func (*DBInfo) Extensions ¶
type DBSchemaInfo ¶
type DBSchemaInfo struct {
Name string `json:"name"`
Description string `json:"description"`
Tables []DBTableInfo `json:"tables"`
Views []DBViewInfo `json:"views"`
}
func (*DBSchemaInfo) Definitions ¶
func (s *DBSchemaInfo) Definitions() (ast.DefinitionList, error)
type DBTableInfo ¶
type DBTableInfo struct {
Name string `json:"name"`
Description string `json:"description"`
SchemaName string `json:"schema_name"`
Columns []DBColumnInfo `json:"columns"`
Constraints []DBConstraintInfo `json:"constraints"`
}
func (*DBTableInfo) Definition ¶
func (t *DBTableInfo) Definition() (*ast.Definition, error)
type DBViewInfo ¶
type DBViewInfo struct {
Name string `json:"name"`
SchemaName string `json:"schema_name"`
Description string `json:"description"`
Columns []DBColumnInfo `json:"columns"`
}
func (*DBViewInfo) Definition ¶
func (v *DBViewInfo) Definition() (*ast.Definition, error)
type DiffResult ¶
type DiffResult struct {
// contains filtered or unexported fields
}
DiffResult implements both DefinitionsSource and ExtensionsSource for diff output.
func DiffSchemas ¶
func DiffSchemas(ctx context.Context, oldSchema, newSchema base.DefinitionsSource) *DiffResult
DiffSchemas compares two schema snapshots and produces incremental DDL changes suitable for Compiler.CompileChanges().
Types in newSchema but not oldSchema → add definition (no directive). Types in oldSchema but not newSchema → @drop definition. Types in both with different fields → field-level extensions:
- Field in new but not old → extend type X { newField: Type }
- Field in old but not new → extend type X { oldField: Boolean @drop }
- Field in both, different → extend type X { field: NewType @replace }
Types in both with different directives → extension with @drop_directive + new directives. Identical types → no output.
The result implements both DefinitionsSource (for type adds/drops) and ExtensionsSource (for field-level changes).
func (*DiffResult) DefinitionExtensions ¶
func (d *DiffResult) DefinitionExtensions(_ context.Context, name string) iter.Seq[*ast.Definition]
DefinitionExtensions returns extensions for a specific type name.
func (*DiffResult) Definitions ¶
func (d *DiffResult) Definitions(_ context.Context) iter.Seq[*ast.Definition]
func (*DiffResult) DirectiveDefinitions ¶
func (d *DiffResult) DirectiveDefinitions(_ context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
func (*DiffResult) DirectiveForName ¶
func (d *DiffResult) DirectiveForName(_ context.Context, _ string) *ast.DirectiveDefinition
func (*DiffResult) Extensions ¶
func (d *DiffResult) Extensions(_ context.Context) iter.Seq[*ast.Definition]
Extensions returns all field-level extension definitions.
func (*DiffResult) ForName ¶
func (d *DiffResult) ForName(_ context.Context, name string) *ast.Definition
type ExtensionCatalog ¶
type ExtensionCatalog interface {
Catalog
base.ExtensionsSource
Deps() []string // Names of other catalog extensions this extension depends on
}
type FileSource ¶
type FileSource struct {
// contains filtered or unexported fields
}
func NewFileSource ¶
func (*FileSource) CompileOptions ¶
func (s *FileSource) CompileOptions() compiler.Options
func (*FileSource) DefinitionExtensions ¶
func (s *FileSource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
func (*FileSource) Definitions ¶
func (s *FileSource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
func (*FileSource) Description ¶
func (s *FileSource) Description() string
func (*FileSource) DirectiveDefinitions ¶
func (s *FileSource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
func (*FileSource) DirectiveForName ¶
func (s *FileSource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
func (*FileSource) Engine ¶
func (s *FileSource) Engine() engines.Engine
func (*FileSource) Extensions ¶
func (s *FileSource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
func (*FileSource) ForName ¶
func (s *FileSource) ForName(ctx context.Context, name string) *ast.Definition
func (*FileSource) Name ¶
func (s *FileSource) Name() string
type IncrementalCatalog ¶
type IncrementalCatalog interface {
Catalog
// Changes returns incremental DDL changes since fromVersion.
// Returns:
// - changes: definitions with @drop or new additions;
// may also implement ExtensionsSource for field-level changes
// - newVersion: the version after these changes are applied
// - error: if changes cannot be computed (caller should fall back to full reload)
Changes(ctx context.Context, fromVersion string) (changes base.DefinitionsSource, newVersion string, err error)
}
IncrementalCatalog is implemented by catalogs that support providing incremental schema changes instead of requiring full recompilation. This is the pull-based model: the catalog manager calls Changes() with the last known version and receives only the definitions that changed.
Changes supports two granularities:
- Type-level: definitions with @drop (type removal) or no directive (type addition)
- Field-level: if the returned source also implements ExtensionsSource, extensions provide field add/drop/replace and directive changes
Use DiffSchemas to compute field-level changes between two schema snapshots.
type MergedCatalog ¶
type MergedCatalog struct {
// contains filtered or unexported fields
}
MergedCatalog combines multiple Catalogs into a single Catalog. Definitions are merged from all sub-catalogs.
func NewMergedCatalog ¶
func (*MergedCatalog) CompileOptions ¶
func (mc *MergedCatalog) CompileOptions() compiler.Options
func (*MergedCatalog) DefinitionExtensions ¶
func (mc *MergedCatalog) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
func (*MergedCatalog) Definitions ¶
func (mc *MergedCatalog) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
func (*MergedCatalog) Description ¶
func (mc *MergedCatalog) Description() string
func (*MergedCatalog) DirectiveDefinitions ¶
func (mc *MergedCatalog) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
func (*MergedCatalog) DirectiveForName ¶
func (mc *MergedCatalog) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
func (*MergedCatalog) Engine ¶
func (mc *MergedCatalog) Engine() engines.Engine
func (*MergedCatalog) Extensions ¶
func (mc *MergedCatalog) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
func (*MergedCatalog) ForName ¶
func (mc *MergedCatalog) ForName(ctx context.Context, name string) *ast.Definition
func (*MergedCatalog) Name ¶
func (mc *MergedCatalog) Name() string
type ReloadableCatalog ¶
type StringSource ¶
type StringSource struct {
// contains filtered or unexported fields
}
func NewStringSource ¶
func (*StringSource) CompileOptions ¶
func (s *StringSource) CompileOptions() compiler.Options
func (*StringSource) DefinitionExtensions ¶
func (s *StringSource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]
func (*StringSource) Definitions ¶
func (s *StringSource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]
func (*StringSource) Description ¶
func (s *StringSource) Description() string
func (*StringSource) DirectiveDefinitions ¶
func (s *StringSource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]
func (*StringSource) DirectiveForName ¶
func (s *StringSource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition
func (*StringSource) Engine ¶
func (s *StringSource) Engine() engines.Engine
func (*StringSource) Extensions ¶
func (s *StringSource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]
func (*StringSource) ForName ¶
func (s *StringSource) ForName(ctx context.Context, name string) *ast.Definition
func (*StringSource) Name ¶
func (s *StringSource) Name() string
type URISource ¶
type URISource struct {
// contains filtered or unexported fields
}