duckdb

package
v0.0.0-...-1ca6825 Latest Latest
Warning

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

Go to latest
Published: May 16, 2026 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const DriverName = "duckdb"

Variables

This section is empty.

Functions

func NewDuckDBPlugin

func NewDuckDBPlugin() *engine.Plugin

NewDuckDBPlugin creates a new DuckDB plugin instance.

func Open

func Open(dsn string) gorm.Dialector

Open creates a new DuckDB dialector with the given DSN. An empty DSN creates an in-memory database.

Types

type Dialector

type Dialector struct {
	DSN  string
	Conn gorm.ConnPool
}

Dialector implements gorm.Dialector for DuckDB.

func (Dialector) BindVarTo

func (d Dialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v any)

func (Dialector) ClauseBuilders

func (d Dialector) ClauseBuilders() map[string]clause.ClauseBuilder

func (Dialector) DataTypeOf

func (d Dialector) DataTypeOf(field *schema.Field) string

func (Dialector) DefaultValueOf

func (d Dialector) DefaultValueOf(field *schema.Field) clause.Expression

func (Dialector) Explain

func (d Dialector) Explain(sql string, vars ...any) string

func (Dialector) Initialize

func (d Dialector) Initialize(db *gorm.DB) error

func (Dialector) Migrator

func (d Dialector) Migrator(db *gorm.DB) gorm.Migrator

func (Dialector) Name

func (d Dialector) Name() string

func (Dialector) QuoteTo

func (d Dialector) QuoteTo(writer clause.Writer, str string)

QuoteTo writes a double-quoted identifier (PostgreSQL-style).

func (Dialector) RollbackTo

func (d Dialector) RollbackTo(tx *gorm.DB, name string) error

func (Dialector) SavePoint

func (d Dialector) SavePoint(tx *gorm.DB, name string) error

type DuckDBMigrator

type DuckDBMigrator struct {
	migrator.Migrator
}

DuckDBMigrator wraps GORM's base migrator with DuckDB-specific overrides.

func (DuckDBMigrator) ColumnTypes

func (m DuckDBMigrator) ColumnTypes(value any) ([]gorm.ColumnType, error)

ColumnTypes queries information_schema.columns for accurate column metadata. The value may be a schema-qualified name like "main.orders" from FormTableName.

type DuckDBPlugin

type DuckDBPlugin struct {
	gorm_plugin.GormPlugin
}

DuckDBPlugin implements the WhoDB plugin for DuckDB.

func (*DuckDBPlugin) AddRowReturningID

func (p *DuckDBPlugin) AddRowReturningID(config *engine.PluginConfig, schema string, storageUnit string, values []engine.Record) (int64, error)

AddRowReturningID overrides the base implementation to use INSERT ... RETURNING, since DuckDB has no lastval() or last_insert_rowid() function.

func (*DuckDBPlugin) ConvertRawToRows

func (p *DuckDBPlugin) ConvertRawToRows(rows *sql.Rows) (*engine.GetRowsResult, error)

ConvertRawToRows overrides the base to check rows.Err() after iteration. The go-duckdb driver can fail during rows.Next() for unsupported types, and the base implementation does not check rows.Err().

func (*DuckDBPlugin) DB

func (p *DuckDBPlugin) DB(config *engine.PluginConfig) (*gorm.DB, error)

func (*DuckDBPlugin) FormTableName

func (p *DuckDBPlugin) FormTableName(schema string, storageUnit string) string

func (*DuckDBPlugin) FormatGeometryValue

func (p *DuckDBPlugin) FormatGeometryValue(rawBytes []byte, columnType string) string

func (*DuckDBPlugin) GetAllSchemasQuery

func (p *DuckDBPlugin) GetAllSchemasQuery() string

func (*DuckDBPlugin) GetColumnCodec

func (p *DuckDBPlugin) GetColumnCodec(columnType string) gorm_plugin.ColumnCodec

GetColumnCodec returns a generic codec for DuckDB row scanning.

func (*DuckDBPlugin) GetColumnConstraints

func (p *DuckDBPlugin) GetColumnConstraints(config *engine.PluginConfig, schema string, storageUnit string) (map[string]map[string]any, error)

GetColumnConstraints retrieves column constraints for DuckDB tables.

func (*DuckDBPlugin) GetCreateTableQuery

func (p *DuckDBPlugin) GetCreateTableQuery(db *gorm.DB, schema string, storageUnit string, columns []engine.Record) string

GetCreateTableQuery builds a CREATE TABLE statement for DuckDB. For integer PK columns, it creates a sequence and uses DEFAULT nextval().

func (*DuckDBPlugin) GetCustomColumnTypeName

func (p *DuckDBPlugin) GetCustomColumnTypeName(columnName string, defaultTypeName string) string

func (*DuckDBPlugin) GetDatabases

func (p *DuckDBPlugin) GetDatabases(config *engine.PluginConfig) ([]string, error)

func (*DuckDBPlugin) GetForeignKeyRelationships

func (p *DuckDBPlugin) GetForeignKeyRelationships(config *engine.PluginConfig, schema string, storageUnit string) (map[string]*engine.ForeignKeyRelationship, error)

GetForeignKeyRelationships uses duckdb_constraints() instead of information_schema because DuckDB does not populate constraint_column_usage for foreign keys.

func (*DuckDBPlugin) GetGraphQueryDB

func (p *DuckDBPlugin) GetGraphQueryDB(db *gorm.DB, schema string) *gorm.DB

func (*DuckDBPlugin) GetLastInsertID

func (p *DuckDBPlugin) GetLastInsertID(db *gorm.DB) (int64, error)

GetLastInsertID returns 0 for DuckDB — DuckDB has no session-scoped lastval(). The actual ID retrieval is handled by AddRowReturningID using INSERT ... RETURNING.

func (*DuckDBPlugin) GetMaxBulkInsertParameters

func (p *DuckDBPlugin) GetMaxBulkInsertParameters() int

func (*DuckDBPlugin) GetPlaceholder

func (p *DuckDBPlugin) GetPlaceholder(index int) string

func (*DuckDBPlugin) GetPrimaryKeyColQuery

func (p *DuckDBPlugin) GetPrimaryKeyColQuery() string

func (*DuckDBPlugin) GetRowsOrderBy

func (p *DuckDBPlugin) GetRowsOrderBy(db *gorm.DB, schema string, storageUnit string) string

func (*DuckDBPlugin) GetSSLStatus

func (p *DuckDBPlugin) GetSSLStatus(config *engine.PluginConfig) (*engine.SSLStatus, error)

GetSSLStatus returns nil for DuckDB as it's a local file-based database that doesn't use network connections or SSL/TLS.

func (*DuckDBPlugin) GetStorageUnitExistsQuery

func (p *DuckDBPlugin) GetStorageUnitExistsQuery() string

func (*DuckDBPlugin) GetSupportedOperators

func (p *DuckDBPlugin) GetSupportedOperators() map[string]string

func (*DuckDBPlugin) GetTableInfoQuery

func (p *DuckDBPlugin) GetTableInfoQuery() string

func (*DuckDBPlugin) GetTableNameAndAttributes

func (p *DuckDBPlugin) GetTableNameAndAttributes(rows *sql.Rows) (string, []engine.Record)

func (*DuckDBPlugin) HandleCustomDataType

func (p *DuckDBPlugin) HandleCustomDataType(value string, columnType string, isNullable bool) (any, bool, error)

HandleCustomDataType converts string values back to DuckDB-compatible types for writes. This ensures values round-trip correctly (display → edit → save).

func (*DuckDBPlugin) IsArrayType

func (p *DuckDBPlugin) IsArrayType(columnType string) bool

func (*DuckDBPlugin) IsGeometryType

func (p *DuckDBPlugin) IsGeometryType(columnType string) bool

func (*DuckDBPlugin) MarkGeneratedColumns

func (p *DuckDBPlugin) MarkGeneratedColumns(config *engine.PluginConfig, schema string, storageUnit string, columns []engine.Column) error

func (*DuckDBPlugin) NormalizeType

func (p *DuckDBPlugin) NormalizeType(typeName string) string

func (*DuckDBPlugin) RawExecute

func (p *DuckDBPlugin) RawExecute(config *engine.PluginConfig, query string, params ...any) (*engine.GetRowsResult, error)

func (*DuckDBPlugin) ResolveGraphSchema

func (p *DuckDBPlugin) ResolveGraphSchema(config *engine.PluginConfig, schema string) string

func (*DuckDBPlugin) ShouldCheckRowsAffected

func (p *DuckDBPlugin) ShouldCheckRowsAffected() bool

Jump to

Keyboard shortcuts

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