Documentation
¶
Index ¶
- Constants
- Variables
- func GetStorageUnitModel(unit StorageUnit) *model.StorageUnit
- func IntPtr(i int) *int
- func RegisterPlugin(p *Plugin)
- func ValidateColumnType(typeName string, metadata *DatabaseMetadata) error
- type BasePlugin
- func (b *BasePlugin) AddRow(_ *PluginConfig, _ string, _ string, _ []Record) (bool, error)
- func (b *BasePlugin) AddRowReturningID(_ *PluginConfig, _ string, _ string, _ []Record) (int64, error)
- func (b *BasePlugin) AddStorageUnit(_ *PluginConfig, _ string, _ string, _ []Record) (bool, error)
- func (b *BasePlugin) BulkAddRows(_ *PluginConfig, _ string, _ string, _ [][]Record) (bool, error)
- func (b *BasePlugin) Chat(_ *PluginConfig, _ string, _ string, _ string) ([]*ChatMessage, error)
- func (b *BasePlugin) ClearTableData(_ *PluginConfig, _ string, _ string) (bool, error)
- func (b *BasePlugin) DeleteRow(_ *PluginConfig, _ string, _ string, _ map[string]string) (bool, error)
- func (b *BasePlugin) ExportData(_ *PluginConfig, _ string, _ string, _ func([]string) error, ...) error
- func (b *BasePlugin) FormatValue(val any) string
- func (b *BasePlugin) GetAllSchemas(_ *PluginConfig) ([]string, error)
- func (b *BasePlugin) GetColumnConstraints(_ *PluginConfig, _ string, _ string) (map[string]map[string]any, error)
- func (b *BasePlugin) GetColumnsForTable(_ *PluginConfig, _ string, _ string) ([]Column, error)
- func (b *BasePlugin) GetDatabaseMetadata() *DatabaseMetadata
- func (b *BasePlugin) GetDatabases(_ *PluginConfig) ([]string, error)
- func (b *BasePlugin) GetForeignKeyRelationships(_ *PluginConfig, _ string, _ string) (map[string]*ForeignKeyRelationship, error)
- func (b *BasePlugin) GetGraph(_ *PluginConfig, _ string) ([]GraphUnit, error)
- func (b *BasePlugin) GetRowCount(_ *PluginConfig, _ string, _ string, _ *model.WhereCondition) (int64, error)
- func (b *BasePlugin) GetRows(_ *PluginConfig, _ *GetRowsRequest) (*GetRowsResult, error)
- func (b *BasePlugin) GetSSLStatus(_ *PluginConfig) (*SSLStatus, error)
- func (b *BasePlugin) GetStorageUnits(_ *PluginConfig, _ string) ([]StorageUnit, error)
- func (b *BasePlugin) IsAvailable(_ context.Context, _ *PluginConfig) bool
- func (b *BasePlugin) MarkGeneratedColumns(_ *PluginConfig, _ string, _ string, _ []Column) error
- func (b *BasePlugin) NullifyFKColumn(_ *PluginConfig, _ string, _ string, _ string) error
- func (b *BasePlugin) RawExecute(_ *PluginConfig, _ string, _ ...any) (*GetRowsResult, error)
- func (b *BasePlugin) StorageUnitExists(_ *PluginConfig, _ string, _ string) (bool, error)
- func (b *BasePlugin) UpdateStorageUnit(_ *PluginConfig, _ string, _ string, _ map[string]string, _ []string) (bool, error)
- func (b *BasePlugin) WithTransaction(_ *PluginConfig, operation func(tx any) error) error
- type Capabilities
- type ChatMessage
- type Column
- type Credentials
- type DatabaseMetadata
- type DatabaseType
- type Engine
- type ExternalModel
- type ForeignKeyRelationship
- type GetRowsRequest
- type GetRowsResult
- type GraphUnit
- type GraphUnitRelationship
- type GraphUnitRelationshipType
- type LoginProfileRetriever
- type Plugin
- type PluginConfig
- type PluginFunctions
- type Record
- type SSLStatus
- type StorageUnit
- type TypeCategory
- type TypeDefinition
- type UnsupportedTypeError
Constants ¶
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 ¶
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 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 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 ¶
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 ¶
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 ¶
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 ¶
UnsupportedTypeError is returned when a column type is not supported by the database
func (*UnsupportedTypeError) Error ¶
func (e *UnsupportedTypeError) Error() string