engine

package
v0.0.0-...-b879bc2 Latest Latest
Warning

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

Go to latest
Published: Apr 10, 2026 License: Apache-2.0 Imports: 6 Imported by: 1

Documentation

Index

Constants

View Source
const (
	DatabaseType_Postgres      = "Postgres"
	DatabaseType_MySQL         = "MySQL"
	DatabaseType_MariaDB       = "MariaDB"
	DatabaseType_Sqlite3       = "Sqlite3"
	DatabaseType_MongoDB       = "MongoDB"
	DatabaseType_Redis         = "Redis"
	DatabaseType_ElasticSearch = "ElasticSearch"
	DatabaseType_ClickHouse    = "ClickHouse"
	DatabaseType_DuckDB        = "DuckDB"
	DatabaseType_Memcached     = "Memcached"
	DatabaseType_ElastiCache   = "ElastiCache" // Uses Redis plugin for now
	DatabaseType_DocumentDB    = "DocumentDB"  // Uses MongoDB plugin for now
)

Variables

View Source
var ErrMultiStatementUnsupported = errors.New("multi-statement SQL is not supported by this database")

ErrMultiStatementUnsupported is returned by plugins that do not support executing multiple SQL statements in a single request.

Functions

func GetStorageUnitModel

func GetStorageUnitModel(unit StorageUnit) *model.StorageUnit

GetStorageUnitModel converts an engine StorageUnit to a GraphQL model StorageUnit.

func IntPtr

func IntPtr(i int) *int

Helper function to create a pointer to an int

func RegisterPlugin

func RegisterPlugin(p *Plugin)

RegisterPlugin adds a plugin to the global registry. Called from init() in each plugin package.

func ValidateColumnType

func ValidateColumnType(typeName string, metadata *DatabaseMetadata) error

ValidateColumnType checks if a column type string is valid against the TypeDefinitions. It parses the type string (e.g., "VARCHAR(255)") and validates: - The base type exists in TypeDefinitions (or AliasMap) - Length/precision parameters match the type's requirements Returns nil if valid, or an error describing the issue.

Types

type BasePlugin

type BasePlugin struct{}

BasePlugin provides default implementations for all PluginFunctions methods. Non-SQL plugins embed this and override only the methods they support. User-facing operations return errors.ErrUnsupported; internal operations return empty results.

func (*BasePlugin) AddRow

func (b *BasePlugin) AddRow(_ *PluginConfig, _ string, _ string, _ []Record) (bool, error)

func (*BasePlugin) AddRowReturningID

func (b *BasePlugin) AddRowReturningID(_ *PluginConfig, _ string, _ string, _ []Record) (int64, error)

func (*BasePlugin) AddStorageUnit

func (b *BasePlugin) AddStorageUnit(_ *PluginConfig, _ string, _ string, _ []Record) (bool, error)

func (*BasePlugin) BulkAddRows

func (b *BasePlugin) BulkAddRows(_ *PluginConfig, _ string, _ string, _ [][]Record) (bool, error)

func (*BasePlugin) Chat

func (b *BasePlugin) Chat(_ *PluginConfig, _ string, _ string, _ string) ([]*ChatMessage, error)

func (*BasePlugin) ClearTableData

func (b *BasePlugin) ClearTableData(_ *PluginConfig, _ string, _ string) (bool, error)

func (*BasePlugin) DeleteRow

func (b *BasePlugin) DeleteRow(_ *PluginConfig, _ string, _ string, _ map[string]string) (bool, error)

func (*BasePlugin) ExportData

func (b *BasePlugin) ExportData(_ *PluginConfig, _ string, _ string, _ func([]string) error, _ []map[string]any) error

func (*BasePlugin) FormatValue

func (b *BasePlugin) FormatValue(val any) string

func (*BasePlugin) GetAllSchemas

func (b *BasePlugin) GetAllSchemas(_ *PluginConfig) ([]string, error)

func (*BasePlugin) GetColumnConstraints

func (b *BasePlugin) GetColumnConstraints(_ *PluginConfig, _ string, _ string) (map[string]map[string]any, error)

func (*BasePlugin) GetColumnsForTable

func (b *BasePlugin) GetColumnsForTable(_ *PluginConfig, _ string, _ string) ([]Column, error)

func (*BasePlugin) GetDatabaseMetadata

func (b *BasePlugin) GetDatabaseMetadata() *DatabaseMetadata

func (*BasePlugin) GetDatabases

func (b *BasePlugin) GetDatabases(_ *PluginConfig) ([]string, error)

func (*BasePlugin) GetForeignKeyRelationships

func (b *BasePlugin) GetForeignKeyRelationships(_ *PluginConfig, _ string, _ string) (map[string]*ForeignKeyRelationship, error)

func (*BasePlugin) GetGraph

func (b *BasePlugin) GetGraph(_ *PluginConfig, _ string) ([]GraphUnit, error)

func (*BasePlugin) GetRowCount

func (b *BasePlugin) GetRowCount(_ *PluginConfig, _ string, _ string, _ *model.WhereCondition) (int64, error)

func (*BasePlugin) GetRows

func (b *BasePlugin) GetRows(_ *PluginConfig, _ *GetRowsRequest) (*GetRowsResult, error)

func (*BasePlugin) GetSSLStatus

func (b *BasePlugin) GetSSLStatus(_ *PluginConfig) (*SSLStatus, error)

func (*BasePlugin) GetStorageUnits

func (b *BasePlugin) GetStorageUnits(_ *PluginConfig, _ string) ([]StorageUnit, error)

func (*BasePlugin) IsAvailable

func (b *BasePlugin) IsAvailable(_ context.Context, _ *PluginConfig) bool

func (*BasePlugin) MarkGeneratedColumns

func (b *BasePlugin) MarkGeneratedColumns(_ *PluginConfig, _ string, _ string, _ []Column) error

func (*BasePlugin) NullifyFKColumn

func (b *BasePlugin) NullifyFKColumn(_ *PluginConfig, _ string, _ string, _ string) error

func (*BasePlugin) RawExecute

func (b *BasePlugin) RawExecute(_ *PluginConfig, _ string, _ ...any) (*GetRowsResult, error)

func (*BasePlugin) StorageUnitExists

func (b *BasePlugin) StorageUnitExists(_ *PluginConfig, _ string, _ string) (bool, error)

func (*BasePlugin) UpdateStorageUnit

func (b *BasePlugin) UpdateStorageUnit(_ *PluginConfig, _ string, _ string, _ map[string]string, _ []string) (bool, error)

func (*BasePlugin) WithTransaction

func (b *BasePlugin) WithTransaction(_ *PluginConfig, operation func(tx any) error) error

type Capabilities

type Capabilities struct {
	SupportsScratchpad     bool
	SupportsChat           bool
	SupportsGraph          bool
	SupportsSchema         bool
	SupportsDatabaseSwitch bool
	SupportsModifiers      bool
}

Capabilities declares which optional features a plugin supports. The frontend reads these to determine which UI elements to show.

type ChatMessage

type ChatMessage struct {
	Type                 string
	Result               *GetRowsResult
	Text                 string
	RequiresConfirmation bool
}

ChatMessage represents a message in an AI chat conversation with optional query results.

type Column

type Column struct {
	Type             string
	Name             string
	IsNullable       bool
	IsPrimary        bool
	IsAutoIncrement  bool
	IsComputed       bool // Database-managed, generated, etc
	IsForeignKey     bool
	ReferencedTable  *string
	ReferencedColumn *string
	Length           *int // For VARCHAR(n), CHAR(n) types
	Precision        *int // For DECIMAL(p,s) types
	Scale            *int // For DECIMAL(p,s) types
}

Column describes a database column including its type, name, and relationship metadata.

type Credentials

type Credentials struct {
	Id          *string  `json:"Id,omitempty"`
	Type        string   `json:"Type"`
	Hostname    string   `json:"Hostname"`
	Username    string   `json:"Username"`
	Password    string   `json:"Password"`
	Database    string   `json:"Database"`
	Advanced    []Record `json:"Advanced,omitempty"`
	AccessToken *string  `json:"AccessToken,omitempty"`
	IsProfile   bool     `json:"IsProfile,omitempty"`
}

Credentials holds authentication and connection details for a database.

type DatabaseMetadata

type DatabaseMetadata struct {
	DatabaseType    DatabaseType
	TypeDefinitions []TypeDefinition
	Operators       []string
	AliasMap        map[string]string
	Capabilities    Capabilities
}

DatabaseMetadata contains all metadata for a database type

type DatabaseType

type DatabaseType string

DatabaseType identifies a supported database system.

type Engine

type Engine struct {
	Plugins           []*Plugin
	LoginProfiles     []types.DatabaseCredentials
	ProfileRetrievers []LoginProfileRetriever
}

Engine manages database plugins and login profiles.

func (*Engine) AddLoginProfile

func (e *Engine) AddLoginProfile(profile types.DatabaseCredentials)

AddLoginProfile adds database credentials to the engine's profile list.

func (*Engine) Choose

func (e *Engine) Choose(databaseType DatabaseType) *Plugin

Choose returns the plugin that matches the given database type, or nil if not found.

func (*Engine) RegisterProfileRetriever

func (e *Engine) RegisterProfileRetriever(retriever LoginProfileRetriever)

RegisterProfileRetriever adds a function that retrieves database credentials on demand.

func (*Engine) RegistryPlugin

func (e *Engine) RegistryPlugin(plugin *Plugin)

RegistryPlugin adds a database plugin to the engine.

type ExternalModel

type ExternalModel struct {
	Type     string // Provider type: "OpenAI", "Anthropic", "Ollama", etc.
	Token    string // API key
	Model    string // User-selected model: "gpt-4o", "claude-sonnet-4", etc.
	Endpoint string // Base URL (for Ollama/generic providers)
}

ExternalModel represents an external AI model configuration for chat functionality.

type ForeignKeyRelationship

type ForeignKeyRelationship struct {
	ColumnName       string
	ReferencedTable  string
	ReferencedColumn string
}

ForeignKeyRelationship describes a foreign key constraint on a column.

type GetRowsRequest

type GetRowsRequest struct {
	Schema      string
	StorageUnit string
	Where       *model.WhereCondition
	Sort        []*model.SortCondition
	PageSize    int
	PageOffset  int
}

GetRowsRequest bundles the parameters for a GetRows query.

type GetRowsResult

type GetRowsResult struct {
	Columns       []Column
	Rows          [][]string
	DisableUpdate bool
	TotalCount    int64
}

GetRowsResult contains the result of a row query including columns, data, and pagination info.

type GraphUnit

type GraphUnit struct {
	Unit      StorageUnit
	Relations []GraphUnitRelationship
}

GraphUnit represents a table and its relationships for graph visualization.

type GraphUnitRelationship

type GraphUnitRelationship struct {
	Name             string
	RelationshipType GraphUnitRelationshipType
	SourceColumn     *string
	TargetColumn     *string
}

GraphUnitRelationship describes a foreign key relationship between two tables.

type GraphUnitRelationshipType

type GraphUnitRelationshipType string

GraphUnitRelationshipType defines the cardinality of a relationship between tables.

type LoginProfileRetriever

type LoginProfileRetriever func() ([]types.DatabaseCredentials, error)

LoginProfileRetriever is a function that retrieves stored database credentials.

type Plugin

type Plugin struct {
	PluginFunctions
	Type DatabaseType
}

Plugin wraps PluginFunctions with a database type identifier.

func RegisteredPlugins

func RegisteredPlugins() []*Plugin

RegisteredPlugins returns all plugins registered via RegisterPlugin.

type PluginConfig

type PluginConfig struct {
	Credentials           *Credentials
	ExternalModel         *ExternalModel
	Transaction           any      // Optional transaction for transactional operations (e.g., *gorm.DB for SQL plugins)
	MultiStatement        bool     // Hint for plugins that need special handling for multi-statement scripts (e.g., MySQL)
	UpsertPKColumns       []string // PK columns for ON CONFLICT DO UPDATE; non-nil = upsert mode
	SkipConflictPKColumns []string // PK columns for ON CONFLICT DO NOTHING (append mode — skip duplicate rows)
}

PluginConfig contains all configuration needed to connect to and operate on a database.

func NewPluginConfig

func NewPluginConfig(credentials *Credentials) *PluginConfig

NewPluginConfig creates a new PluginConfig with the given credentials.

type PluginFunctions

type PluginFunctions interface {
	GetDatabases(config *PluginConfig) ([]string, error)
	IsAvailable(ctx context.Context, config *PluginConfig) bool
	GetAllSchemas(config *PluginConfig) ([]string, error)
	GetStorageUnits(config *PluginConfig, schema string) ([]StorageUnit, error)
	StorageUnitExists(config *PluginConfig, schema string, storageUnit string) (bool, error)
	AddStorageUnit(config *PluginConfig, schema string, storageUnit string, fields []Record) (bool, error)
	UpdateStorageUnit(config *PluginConfig, schema string, storageUnit string, values map[string]string, updatedColumns []string) (bool, error)
	AddRow(config *PluginConfig, schema string, storageUnit string, values []Record) (bool, error)
	AddRowReturningID(config *PluginConfig, schema string, storageUnit string, values []Record) (int64, error)
	BulkAddRows(config *PluginConfig, schema string, storageUnit string, rows [][]Record) (bool, error)
	DeleteRow(config *PluginConfig, schema string, storageUnit string, values map[string]string) (bool, error)
	GetRows(config *PluginConfig, req *GetRowsRequest) (*GetRowsResult, error)
	GetRowCount(config *PluginConfig, schema string, storageUnit string, where *model.WhereCondition) (int64, error)
	GetGraph(config *PluginConfig, schema string) ([]GraphUnit, error)
	RawExecute(config *PluginConfig, query string, params ...any) (*GetRowsResult, error)
	Chat(config *PluginConfig, schema string, previousConversation string, query string) ([]*ChatMessage, error)
	ExportData(config *PluginConfig, schema string, storageUnit string, writer func([]string) error, selectedRows []map[string]any) error
	FormatValue(val any) string
	GetColumnsForTable(config *PluginConfig, schema string, storageUnit string) ([]Column, error)

	// MarkGeneratedColumns enriches columns with auto-increment and computed column flags
	// by querying database-specific system catalogs
	MarkGeneratedColumns(config *PluginConfig, schema string, storageUnit string, columns []Column) error

	// Mock data generation methods
	GetColumnConstraints(config *PluginConfig, schema string, storageUnit string) (map[string]map[string]any, error)
	ClearTableData(config *PluginConfig, schema string, storageUnit string) (bool, error)
	NullifyFKColumn(config *PluginConfig, schema string, storageUnit string, column string) error

	// Foreign key detection
	GetForeignKeyRelationships(config *PluginConfig, schema string, storageUnit string) (map[string]*ForeignKeyRelationship, error)

	// Transaction support
	WithTransaction(config *PluginConfig, operation func(tx any) error) error

	// Database metadata for frontend type/operator configuration
	GetDatabaseMetadata() *DatabaseMetadata

	// GetSSLStatus returns the verified SSL/TLS status of the current connection.
	// Returns nil if SSL status cannot be determined (e.g., SQLite) or is not applicable.
	GetSSLStatus(config *PluginConfig) (*SSLStatus, error)
}

PluginFunctions defines the interface that all database plugins must implement. Each method provides a specific database operation capability.

type Record

type Record struct {
	Key   string            `json:"Key"`
	Value string            `json:"Value"`
	Extra map[string]string `json:"Extra,omitempty"`
}

Record represents a key-value pair with optional extra metadata, used for column attributes, configuration, and data transfer.

type SSLStatus

type SSLStatus struct {
	IsEnabled bool   // Whether SSL/TLS is active on the current connection
	Mode      string // SSL mode: disabled, required, verify-ca, verify-identity, etc.
}

SSLStatus contains verified SSL/TLS connection status from the database.

type StorageUnit

type StorageUnit struct {
	Name       string
	Attributes []Record
}

StorageUnit represents a database table, collection, or equivalent storage structure.

type TypeCategory

type TypeCategory string

TypeCategory represents the category of a database type for UI grouping

const (
	TypeCategoryNumeric  TypeCategory = "numeric"
	TypeCategoryText     TypeCategory = "text"
	TypeCategoryBinary   TypeCategory = "binary"
	TypeCategoryDatetime TypeCategory = "datetime"
	TypeCategoryBoolean  TypeCategory = "boolean"
	TypeCategoryJSON     TypeCategory = "json"
	TypeCategoryOther    TypeCategory = "other"
)

type TypeDefinition

type TypeDefinition struct {
	ID               string       // Canonical type name (e.g., "VARCHAR", "INTEGER")
	Label            string       // Display label for UI (e.g., "varchar", "integer")
	HasLength        bool         // Shows length input when selected (VARCHAR, CHAR)
	HasPrecision     bool         // Shows precision/scale inputs (DECIMAL, NUMERIC)
	DefaultLength    *int         // Default length for types with HasLength
	DefaultPrecision *int         // Default precision for types with HasPrecision
	Category         TypeCategory // Type category for grouping
	InsertFunc       string       // Function to wrap INSERT values (e.g. "TO_BITMAP"), empty for normal types
	TableModel       string       // Required table key model (e.g. "AGGREGATE"), empty for normal types
	DDLSuffix        string       // Appended after type in CREATE TABLE (e.g. "BITMAP_UNION"), empty for normal types
}

TypeDefinition describes a database column type with its metadata

type UnsupportedTypeError

type UnsupportedTypeError struct {
	TypeName     string
	DatabaseType string
}

UnsupportedTypeError is returned when a column type is not supported by the database

func (*UnsupportedTypeError) Error

func (e *UnsupportedTypeError) Error() string

Jump to

Keyboard shortcuts

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