Help us shape the future of Go! Take the 2026 Go Developer Survey

sources

package
v0.3.34 Latest Latest
Warning

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

Go to latest
Published: May 15, 2026 License: MIT Imports: 18 Imported by: 1

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