Documentation
¶
Overview ¶
Package drivers talks to various database backends and retrieves table, column, type, and foreign key information
Index ¶
- Constants
- func BuildRelationships(tables []Table) map[string][]orm.Relationship
- func ColumnDBTypes(cols []Column) map[string]string
- func ColumnNames(cols []Column) []string
- func ColumnsFromList(list []string, tablename string) []string
- func IsJoinTable(t Table) bool
- func Skip(name string, include, exclude []string) bool
- type Capabilities
- type Column
- type ColumnFilter
- type Constraint
- type Constructor
- type DBConstraints
- type DBInfo
- type Enum
- type Filter
- type ForeignKey
- type Interface
- type PrimaryKey
- type Table
- type TableInfo
- type TablesInfo
Constants ¶
const SelfJoinSuffix = "__self_join_reverse"
Variables ¶
This section is empty.
Functions ¶
func BuildRelationships ¶
func BuildRelationships(tables []Table) map[string][]orm.Relationship
func ColumnDBTypes ¶
ColumnDBTypes of the columns.
func ColumnsFromList ¶
ColumnsFromList takes a whitelist or blacklist and returns the columns for a given table.
func IsJoinTable ¶
A composite primary key involving two columns Both primary key columns are also foreign keys
Types ¶
type Capabilities ¶ added in v0.15.0
type Capabilities struct {
BulkInsert bool
}
type Column ¶
type Column struct { Name string `json:"name" yaml:"name" toml:"name"` DBType string `json:"db_type" yaml:"db_type" toml:"db_type"` Default string `json:"default" yaml:"default" toml:"default"` Comment string `json:"comment" yaml:"comment" toml:"comment"` Nullable bool `json:"nullable" yaml:"nullable" toml:"nullable"` Generated bool `json:"generated" yaml:"generated" toml:"generated"` AutoIncr bool `json:"autoincr" yaml:"autoincr" toml:"autoincr"` // DomainName is the domain type name associated to the column. See here: // https://www.postgresql.org/docs/10/extend-type-system.html#EXTEND-TYPE-SYSTEM-DOMAINS DomainName string `json:"domain_name" yaml:"domain_name" toml:"domain_name"` Type string `json:"type" yaml:"type" toml:"type"` Imports importers.List `json:"imports" yaml:"imports" toml:"imports"` }
Column holds information about a database column. Types are Go types, converted by TranslateColumnType.
type ColumnFilter ¶
func ParseColumnFilter ¶
func ParseColumnFilter(tables []string, only, except map[string][]string) ColumnFilter
type Constraint ¶
Constraint represents a primary key constraint in a database
type Constructor ¶
type Constructor interface { // Load all constraints in the database, keyed by TableInfo.Key Constraints(context.Context, ColumnFilter) (DBConstraints, error) // Load basic info about all tables TablesInfo(context.Context, Filter) (TablesInfo, error) // Load details about a single table TableDetails(ctx context.Context, info TableInfo, filter ColumnFilter) (schema, name string, _ []Column, _ error) }
Constructor breaks down the functionality required to implement a driver such that the drivers.Tables method can be used to reduce duplication in driver implementations.
type DBConstraints ¶
type DBConstraints struct { PKs map[string]*PrimaryKey FKs map[string][]ForeignKey Uniques map[string][]Constraint }
type DBInfo ¶
type DBInfo[T any] struct { Tables []Table `json:"tables"` Enums []Enum `json:"enums"` ExtraInfo T `json:"extra_info"` }
DBInfo is the database's table data and dialect.
type Filter ¶
func ParseTableFilter ¶ added in v0.15.0
type ForeignKey ¶
type ForeignKey struct { Constraint ForeignTable string `json:"foreign_table"` ForeignColumns []string `json:"foreign_columns"` }
ForeignKey represents a foreign key constraint in a database
type Interface ¶
type Interface[T any] interface { // The dialect Dialect() string // What the driver is capable of Capabilities() Capabilities // Assemble the database information into a nice struct Assemble(ctx context.Context) (*DBInfo[T], error) }
Interface abstracts either a side-effect imported driver or a binary that is called in order to produce the data required for generation.
type PrimaryKey ¶
type PrimaryKey = Constraint
PrimaryKey represents a primary key constraint in a database
type Table ¶
type Table struct { Key string `json:"key"` // For dbs with real schemas, like Postgres. // Example value: "schema_name"."table_name" Schema string `json:"schema"` Name string `json:"name"` Columns []Column `json:"columns"` PKey *PrimaryKey `json:"p_key"` FKeys []ForeignKey `json:"foreign_keys"` Uniques []Constraint `json:"unique"` IsJoinTable bool `json:"is_join_table"` Relationships []orm.Relationship `json:"relationship"` }
Table metadata from the database schema.
func BuildDBInfo ¶ added in v0.15.0
func BuildDBInfo(ctx context.Context, c Constructor, concurrency int, only, except map[string][]string) ([]Table, error)
TablesConcurrently is a concurrent version of BuildDBInfo. It returns the metadata for all tables, minus the tables specified in the excludes.
func (Table) CanSoftDelete ¶
func (Table) GetRelationshipInverse ¶
func (t Table) GetRelationshipInverse(tables []Table, r orm.Relationship) orm.Relationship
GetRelationshipInverse returns the Relationship of the other side
type TablesInfo ¶ added in v0.15.0
type TablesInfo []TableInfo
func (TablesInfo) Keys ¶ added in v0.15.0
func (t TablesInfo) Keys() []string