sources

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Mar 7, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FileSourceType    types.CatalogSourceType = "localFS"
	URISourceType     types.CatalogSourceType = "uri"
	URIFileSourceType types.CatalogSourceType = "uriFile"
	TextSourceType    types.CatalogSourceType = "text"
)

Variables

View Source
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 DescribeDataSource(ctx context.Context, qe types.Querier, name string) (*DBInfo, error)

func (*DBInfo) Build

func (s *DBInfo) Build(ctx context.Context, engine engines.Engine, opts compiler.Options) error

Build initializes DBInfo as a Catalog from its introspected schema info.

func (*DBInfo) CompileOptions

func (s *DBInfo) CompileOptions() compiler.Options

func (*DBInfo) DefinitionExtensions

func (s *DBInfo) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]

func (*DBInfo) Definitions

func (s *DBInfo) Definitions(ctx context.Context) iter.Seq[*ast.Definition]

func (*DBInfo) Description

func (s *DBInfo) Description() string

func (*DBInfo) DirectiveDefinitions

func (s *DBInfo) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]

func (*DBInfo) DirectiveForName

func (s *DBInfo) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition

func (*DBInfo) Engine

func (s *DBInfo) Engine() engines.Engine

func (*DBInfo) Extensions

func (s *DBInfo) Extensions(ctx context.Context) iter.Seq[*ast.Definition]

func (*DBInfo) ForName

func (s *DBInfo) ForName(ctx context.Context, name string) *ast.Definition

func (*DBInfo) Name

func (s *DBInfo) Name() string

func (*DBInfo) Version

func (s *DBInfo) Version(_ context.Context) (string, error)

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 NewFileSource(dirPath string, engine engines.Engine, opts compiler.Options) *FileSource

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

func (*FileSource) Reload

func (s *FileSource) Reload(_ context.Context) error

func (*FileSource) Version

func (s *FileSource) Version(_ context.Context) (string, error)

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 NewMergedCatalog(engine engines.Engine, opts compiler.Options, desc string, catalogs ...Catalog) *MergedCatalog

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

func (*MergedCatalog) Reload

func (mc *MergedCatalog) Reload(ctx context.Context) error

func (*MergedCatalog) Version

func (mc *MergedCatalog) Version(ctx context.Context) (string, error)

type ReloadableCatalog

type ReloadableCatalog interface {
	Catalog

	// Reload the catalog (e.g. after source changes). Returns an error if reloading fails.
	Reload(ctx context.Context) error
}

type StringSource

type StringSource struct {
	// contains filtered or unexported fields
}

func NewStringSource

func NewStringSource(name string, engine engines.Engine, opts compiler.Options, sources ...string) (*StringSource, error)

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

func (*StringSource) Version

func (s *StringSource) Version(_ context.Context) (string, error)

type URISource

type URISource struct {
	// contains filtered or unexported fields
}

func NewURISource

func NewURISource(pool *db.Pool, path string, isFile bool, engine engines.Engine, opts compiler.Options) *URISource

func (*URISource) CompileOptions

func (s *URISource) CompileOptions() compiler.Options

func (*URISource) DefinitionExtensions

func (s *URISource) DefinitionExtensions(ctx context.Context, name string) iter.Seq[*ast.Definition]

func (*URISource) Definitions

func (s *URISource) Definitions(ctx context.Context) iter.Seq[*ast.Definition]

func (*URISource) Description

func (s *URISource) Description() string

func (*URISource) DirectiveDefinitions

func (s *URISource) DirectiveDefinitions(ctx context.Context) iter.Seq2[string, *ast.DirectiveDefinition]

func (*URISource) DirectiveForName

func (s *URISource) DirectiveForName(ctx context.Context, name string) *ast.DirectiveDefinition

func (*URISource) Engine

func (s *URISource) Engine() engines.Engine

func (*URISource) Extensions

func (s *URISource) Extensions(ctx context.Context) iter.Seq[*ast.Definition]

func (*URISource) ForName

func (s *URISource) ForName(ctx context.Context, name string) *ast.Definition

func (*URISource) Name

func (s *URISource) Name() string

func (*URISource) Reload

func (s *URISource) Reload(ctx context.Context) error

func (*URISource) Version

func (s *URISource) Version(_ context.Context) (string, error)

Jump to

Keyboard shortcuts

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